[jboss-svn-commits] JBL Code SVN: r21071 - in labs/jbossrules/contrib/machinelearning/5.0: drools-clips and 25 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Jul 16 13:39:53 EDT 2008


Author: gizil
Date: 2008-07-16 13:39:52 -0400 (Wed, 16 Jul 2008)
New Revision: 21071

Added:
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Attribute.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/AttributeValueComparator.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/DecisionTree.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/DecisionTreePruner.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/DecisionTreeVisitor.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Domain.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/DomainComparator.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Instance.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/InstanceComparator.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/InstanceFactory.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/InstanceList.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/LeafNode.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Memory.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/NodeValue.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Path.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/QuantitativeDomain.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Schema.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Stats.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/TreeNode.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/AdaBoostBuilder.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/AdaBoostKBuilder.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/BoostedTester.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/C45Learner.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/DecisionTreeBuilder.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/DecisionTreeFactory.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/DecisionTreeMerger.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/ForestBuilder.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/ForestTester.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/ID3Learner.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/Learner.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/SingleTreeBuilder.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/SingleTreeTester.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/Tester.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/AttributeChooser.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/Categorizer.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/ClassDistribution.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/CondClassDistribution.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/CrossValidation.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/Entropy.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/Estimator.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/GainRatio.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/GlobalCategorizer.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/Heuristic.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/InformationContainer.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/InstDistribution.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/SplitPoint.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/ClassAnnotation.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/ClassLogger.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/ClassStructure.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/ClassVisitor.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/FeatureNotSupported.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/FieldAnnotation.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/LogMethod.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/Logger.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/LoggerFactory.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/LoggerInterface.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/NumberComparator.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/ObjectFactory.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/PseudoFieldExtractor.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/RulePrinter.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/SimpleLogger.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/Util.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/test/java/org/drools/learner/
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/test/java/org/drools/learner/LoggerTest.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/test/java/org/drools/learner/StructuredTestFactory.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/
   labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/Car.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/CarExample.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/CarExampleFromDrl.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/learner/
   labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/learner/car_c45_one.drl
   labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/learner/car_c45_one.stats
   labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/learner/golf_c45_one.drl
   labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/learner/golf_c45_one.stats
   labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/learner/log/
   labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/learner/log/car_c45_one.log
   labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/learner/log/golf_c45_one.log
   labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/learner/log/restaurant_id3_one.log
   labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/learner/restaurant_id3_one.drl
   labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/learner/restaurant_id3_one.stats
Modified:
   labs/jbossrules/contrib/machinelearning/5.0/drools-ant/.classpath
   labs/jbossrules/contrib/machinelearning/5.0/drools-ant/.project
   labs/jbossrules/contrib/machinelearning/5.0/drools-clips/.classpath
   labs/jbossrules/contrib/machinelearning/5.0/drools-clips/.project
   labs/jbossrules/contrib/machinelearning/5.0/drools-compiler/.classpath
   labs/jbossrules/contrib/machinelearning/5.0/drools-compiler/.project
   labs/jbossrules/contrib/machinelearning/5.0/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/.classpath
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/.project
   labs/jbossrules/contrib/machinelearning/5.0/drools-dataloaders/drools-dataloaders-smooks/.classpath
   labs/jbossrules/contrib/machinelearning/5.0/drools-dataloaders/drools-dataloaders-smooks/.project
   labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/.classpath
   labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/benchmark/manners/MannersBenchmark.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/FibonacciExample.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/troubleticket/TroubleTicketWithDT.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/HelloWorld.drl
   labs/jbossrules/contrib/machinelearning/5.0/drools-guvnor/.classpath
   labs/jbossrules/contrib/machinelearning/5.0/drools-jsr94/.classpath
   labs/jbossrules/contrib/machinelearning/5.0/drools-jsr94/.project
   labs/jbossrules/contrib/machinelearning/5.0/drools-repository/.classpath
   labs/jbossrules/contrib/machinelearning/5.0/drools-repository/.project
   labs/jbossrules/contrib/machinelearning/5.0/drools-solver/drools-solver-core/.classpath
   labs/jbossrules/contrib/machinelearning/5.0/drools-solver/drools-solver-core/.project
   labs/jbossrules/contrib/machinelearning/5.0/drools-solver/drools-solver-examples/.classpath
   labs/jbossrules/contrib/machinelearning/5.0/drools-solver/drools-solver-examples/.project
   labs/jbossrules/contrib/machinelearning/5.0/drools-templates/.classpath
   labs/jbossrules/contrib/machinelearning/5.0/drools-templates/.project
Log:
5.0 integration complete + the pruner

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-ant/.classpath
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-ant/.classpath	2008-07-16 17:22:56 UTC (rev 21070)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-ant/.classpath	2008-07-16 17:39:52 UTC (rev 21071)
@@ -1,22 +1,22 @@
-<classpath>
-  <classpathentry kind="src" path="src/main/java"/>
-  <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
-  <classpathentry kind="src" path="src/test/resources" output="target/test-classes" excluding="**/*.java"/>
-  <classpathentry kind="output" path="target/classes"/>
-  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-  <classpathentry kind="var" path="M2_REPO/ant/ant/1.6.5/ant-1.6.5.jar"/>
-  <classpathentry kind="var" path="M2_REPO/ant/ant-nodeps/1.6.5/ant-nodeps-1.6.5.jar"/>
-  <classpathentry kind="var" path="M2_REPO/com/thoughtworks/xstream/xstream/1.2.2/xstream-1.2.2.jar"/>
-  <classpathentry kind="var" path="M2_REPO/xpp3/xpp3_min/1.1.3.4.O/xpp3_min-1.1.3.4.O.jar"/>
-  <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
-  <classpathentry kind="src" path="/drools-compiler"/>
-  <classpathentry kind="src" path="/drools-core"/>
-  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel/2.0-dp4/mvel-2.0-dp4.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.0/antlr-runtime-3.0.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.2.3.v_686_R32x/core-3.2.3.v_686_R32x.jar"/>
-  <classpathentry kind="var" path="M2_REPO/janino/janino/2.5.10/janino-2.5.10.jar"/>
-  <classpathentry kind="src" path="/drools-decisiontables"/>
-  <classpathentry kind="src" path="/drools-templates"/>
-  <classpathentry kind="var" path="M2_REPO/jexcelapi/jxl/2.4.2/jxl-2.4.2.jar"/>
-  <classpathentry kind="src" path="/drools-verifier"/>
+<classpath>
+  <classpathentry kind="src" path="src/main/java"/>
+  <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
+  <classpathentry kind="src" path="src/test/resources" output="target/test-classes" excluding="**/*.java"/>
+  <classpathentry kind="output" path="target/classes"/>
+  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+  <classpathentry kind="var" path="M2_REPO/ant/ant/1.6.5/ant-1.6.5.jar"/>
+  <classpathentry kind="var" path="M2_REPO/ant/ant-nodeps/1.6.5/ant-nodeps-1.6.5.jar"/>
+  <classpathentry kind="var" path="M2_REPO/com/thoughtworks/xstream/xstream/1.2.2/xstream-1.2.2.jar"/>
+  <classpathentry kind="var" path="M2_REPO/xpp3/xpp3_min/1.1.3.4.O/xpp3_min-1.1.3.4.O.jar"/>
+  <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
+  <classpathentry kind="src" path="/drools-compiler"/>
+  <classpathentry kind="src" path="/drools-core"/>
+  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel/2.0-dp4/mvel-2.0-dp4.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.0/antlr-runtime-3.0.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.2.3.v_686_R32x/core-3.2.3.v_686_R32x.jar"/>
+  <classpathentry kind="var" path="M2_REPO/janino/janino/2.5.10/janino-2.5.10.jar"/>
+  <classpathentry kind="src" path="/drools-decisiontables"/>
+  <classpathentry kind="src" path="/drools-templates"/>
+  <classpathentry kind="var" path="M2_REPO/jexcelapi/jxl/2.4.2/jxl-2.4.2.jar"/>
+  <classpathentry kind="src" path="/drools-verifier"/>
 </classpath>
\ No newline at end of file

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-ant/.project
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-ant/.project	2008-07-16 17:22:56 UTC (rev 21070)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-ant/.project	2008-07-16 17:39:52 UTC (rev 21071)
@@ -1,23 +1,23 @@
-<projectDescription>
-  <name>drools-ant</name>
-  <comment>A rule production system</comment>
-  <projects>
-    <project>drools-compiler</project>
-    <project>drools-core</project>
-    <project>drools-decisiontables</project>
-    <project>drools-templates</project>
-    <project>drools-verifier</project>
-  </projects>
-  <buildSpec>
-    <buildCommand>
-      <name>org.eclipse.jdt.core.javabuilder</name>
-    </buildCommand>
-    <buildCommand>
-      <name>org.maven.ide.eclipse.maven2Builder</name>
-    </buildCommand>
-  </buildSpec>
-  <natures>
-    <nature>org.eclipse.jdt.core.javanature</nature>
-    <nature>org.maven.ide.eclipse.maven2Nature</nature>
-  </natures>
+<projectDescription>
+  <name>drools-ant</name>
+  <comment>A rule production system</comment>
+  <projects>
+    <project>drools-compiler</project>
+    <project>drools-core</project>
+    <project>drools-decisiontables</project>
+    <project>drools-templates</project>
+    <project>drools-verifier</project>
+  </projects>
+  <buildSpec>
+    <buildCommand>
+      <name>org.eclipse.jdt.core.javabuilder</name>
+    </buildCommand>
+    <buildCommand>
+      <name>org.maven.ide.eclipse.maven2Builder</name>
+    </buildCommand>
+  </buildSpec>
+  <natures>
+    <nature>org.eclipse.jdt.core.javanature</nature>
+    <nature>org.maven.ide.eclipse.maven2Nature</nature>
+  </natures>
 </projectDescription>
\ No newline at end of file

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-clips/.classpath
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-clips/.classpath	2008-07-16 17:22:56 UTC (rev 21070)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-clips/.classpath	2008-07-16 17:39:52 UTC (rev 21071)
@@ -1,15 +1,15 @@
-<classpath>
-  <classpathentry kind="src" path="src/main/java"/>
-  <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
-  <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
-  <classpathentry kind="src" path="src/test/resources" output="target/test-classes" excluding="**/*.java"/>
-  <classpathentry kind="output" path="target/classes"/>
-  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-  <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
-  <classpathentry kind="src" path="/drools-compiler"/>
-  <classpathentry kind="src" path="/drools-core"/>
-  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel/2.0-dp4/mvel-2.0-dp4.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.0/antlr-runtime-3.0.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.2.3.v_686_R32x/core-3.2.3.v_686_R32x.jar"/>
-  <classpathentry kind="var" path="M2_REPO/janino/janino/2.5.10/janino-2.5.10.jar"/>
+<classpath>
+  <classpathentry kind="src" path="src/main/java"/>
+  <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
+  <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
+  <classpathentry kind="src" path="src/test/resources" output="target/test-classes" excluding="**/*.java"/>
+  <classpathentry kind="output" path="target/classes"/>
+  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+  <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
+  <classpathentry kind="src" path="/drools-compiler"/>
+  <classpathentry kind="src" path="/drools-core"/>
+  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel/2.0-dp4/mvel-2.0-dp4.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.0/antlr-runtime-3.0.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.2.3.v_686_R32x/core-3.2.3.v_686_R32x.jar"/>
+  <classpathentry kind="var" path="M2_REPO/janino/janino/2.5.10/janino-2.5.10.jar"/>
 </classpath>
\ No newline at end of file

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-clips/.project
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-clips/.project	2008-07-16 17:22:56 UTC (rev 21070)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-clips/.project	2008-07-16 17:39:52 UTC (rev 21071)
@@ -1,16 +1,16 @@
-<projectDescription>
-  <name>drools-clips</name>
-  <comment>A rule production system</comment>
-  <projects>
-    <project>drools-compiler</project>
-    <project>drools-core</project>
-  </projects>
-  <buildSpec>
-    <buildCommand>
-      <name>org.eclipse.jdt.core.javabuilder</name>
-    </buildCommand>
-  </buildSpec>
-  <natures>
-    <nature>org.eclipse.jdt.core.javanature</nature>
-  </natures>
+<projectDescription>
+  <name>drools-clips</name>
+  <comment>A rule production system</comment>
+  <projects>
+    <project>drools-compiler</project>
+    <project>drools-core</project>
+  </projects>
+  <buildSpec>
+    <buildCommand>
+      <name>org.eclipse.jdt.core.javabuilder</name>
+    </buildCommand>
+  </buildSpec>
+  <natures>
+    <nature>org.eclipse.jdt.core.javanature</nature>
+  </natures>
 </projectDescription>
\ No newline at end of file

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-compiler/.classpath
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-compiler/.classpath	2008-07-16 17:22:56 UTC (rev 21070)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-compiler/.classpath	2008-07-16 17:39:52 UTC (rev 21071)
@@ -1,16 +1,16 @@
-<classpath>
-  <classpathentry kind="src" path="src/main/java"/>
-  <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
-  <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
-  <classpathentry kind="src" path="src/test/resources" output="target/test-classes" excluding="**/*.java"/>
-  <classpathentry kind="output" path="target/classes"/>
-  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-  <classpathentry kind="var" path="M2_REPO/com/thoughtworks/xstream/xstream/1.2.2/xstream-1.2.2.jar"/>
-  <classpathentry kind="var" path="M2_REPO/xpp3/xpp3_min/1.1.3.4.O/xpp3_min-1.1.3.4.O.jar"/>
-  <classpathentry kind="var" path="M2_REPO/janino/janino/2.5.10/janino-2.5.10.jar"/>
-  <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.0/antlr-runtime-3.0.jar"/>
-  <classpathentry kind="src" path="/drools-core"/>
-  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel/2.0-dp4/mvel-2.0-dp4.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.2.3.v_686_R32x/core-3.2.3.v_686_R32x.jar"/>
+<classpath>
+  <classpathentry kind="src" path="src/main/java"/>
+  <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
+  <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
+  <classpathentry kind="src" path="src/test/resources" output="target/test-classes" excluding="**/*.java"/>
+  <classpathentry kind="output" path="target/classes"/>
+  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+  <classpathentry kind="var" path="M2_REPO/com/thoughtworks/xstream/xstream/1.2.2/xstream-1.2.2.jar"/>
+  <classpathentry kind="var" path="M2_REPO/xpp3/xpp3_min/1.1.3.4.O/xpp3_min-1.1.3.4.O.jar"/>
+  <classpathentry kind="var" path="M2_REPO/janino/janino/2.5.10/janino-2.5.10.jar"/>
+  <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.0/antlr-runtime-3.0.jar"/>
+  <classpathentry kind="src" path="/drools-core"/>
+  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel/2.0-dp4/mvel-2.0-dp4.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.2.3.v_686_R32x/core-3.2.3.v_686_R32x.jar"/>
 </classpath>
\ No newline at end of file

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-compiler/.project
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-compiler/.project	2008-07-16 17:22:56 UTC (rev 21070)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-compiler/.project	2008-07-16 17:39:52 UTC (rev 21071)
@@ -1,15 +1,15 @@
-<projectDescription>
-  <name>drools-compiler</name>
-  <comment>A rule production system</comment>
-  <projects>
-    <project>drools-core</project>
-  </projects>
-  <buildSpec>
-    <buildCommand>
-      <name>org.eclipse.jdt.core.javabuilder</name>
-    </buildCommand>
-  </buildSpec>
-  <natures>
-    <nature>org.eclipse.jdt.core.javanature</nature>
-  </natures>
+<projectDescription>
+  <name>drools-compiler</name>
+  <comment>A rule production system</comment>
+  <projects>
+    <project>drools-core</project>
+  </projects>
+  <buildSpec>
+    <buildCommand>
+      <name>org.eclipse.jdt.core.javabuilder</name>
+    </buildCommand>
+  </buildSpec>
+  <natures>
+    <nature>org.eclipse.jdt.core.javanature</nature>
+  </natures>
 </projectDescription>
\ No newline at end of file

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java	2008-07-16 17:22:56 UTC (rev 21070)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -56,6 +56,12 @@
 import org.drools.lang.descr.RuleDescr;
 import org.drools.lang.descr.TypeDeclarationDescr;
 import org.drools.lang.descr.TypeFieldDescr;
+// learner packages
+import org.drools.learner.DecisionTree;
+import org.drools.learner.tools.LoggerFactory;
+import org.drools.learner.tools.RulePrinter;
+import org.drools.learner.tools.Util;
+
 import org.drools.process.core.Process;
 import org.drools.reteoo.ReteooRuleBase;
 import org.drools.rule.ImportDeclaration;
@@ -241,6 +247,25 @@
         this.results.addAll( parser.getErrors() );
         addPackage( pkg );
     }
+    
+    /**
+     * Load the decision tree and its rules.
+     * 
+     * @param learner
+     * @throws DroolsParserException
+     * @throws IOException 
+     */
+    public void addPackageFromTree(final DecisionTree dt) throws DroolsParserException, IOException {
+    	Reader reader = RulePrinter.readRules(dt);
+ /*   	final DrlParser parser = new DrlParser();
+    	final PackageDescr pkg = parser.parse( reader );
+    	this.results.addAll( parser.getErrors() );
+        addPackage( pkg );
+        */
+    	// save the logger
+    	LoggerFactory.dump_buffer(Util.DRL_DIRECTORY+dt.getSignature(), "log");
+    	this.addPackageFromDrl(reader);
+    }
 
     /**
      * Load a rule package from XML source.

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/.classpath
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/.classpath	2008-07-16 17:22:56 UTC (rev 21070)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/.classpath	2008-07-16 17:39:52 UTC (rev 21071)
@@ -1,8 +1,12 @@
-<?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry including="**/*.java" kind="src" output="target/test-classes" path="src/test/java"/>
-	<classpathentry including="**/*.java" kind="src" path="src/main/java"/>
-	<classpathentry kind="con" path="org.devzuz.q.maven.jdt.core.mavenClasspathContainer"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="output" path="target/classes"/>
-</classpath>
+  <classpathentry kind="src" path="src/main/java"/>
+  <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
+  <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
+  <classpathentry kind="src" path="src/test/resources" output="target/test-classes" excluding="**/*.java"/>
+  <classpathentry kind="output" path="target/classes"/>
+  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+  <classpathentry kind="var" path="M2_REPO/com/thoughtworks/xstream/xstream/1.2.2/xstream-1.2.2.jar"/>
+  <classpathentry kind="var" path="M2_REPO/xpp3/xpp3_min/1.1.3.4.O/xpp3_min-1.1.3.4.O.jar"/>
+  <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel/2.0-dp4/mvel-2.0-dp4.jar"/>
+</classpath>
\ No newline at end of file

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/.project
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/.project	2008-07-16 17:22:56 UTC (rev 21070)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/.project	2008-07-16 17:39:52 UTC (rev 21071)
@@ -1,28 +1,20 @@
-<?xml version="1.0" encoding="UTF-8"?>
 <projectDescription>
-	<name>drools-core</name>
-	<comment>A rule production system</comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.drools.eclipse.droolsbuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.devzuz.q.maven.jdt.core.mavenIncrementalBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-		<nature>org.devzuz.q.maven.jdt.core.mavenNature</nature>
-	</natures>
-</projectDescription>
+  <name>drools-core</name>
+  <comment>A rule production system</comment>
+  <projects/>
+  <buildSpec>
+    <buildCommand>
+      <name>org.eclipse.jdt.core.javabuilder</name>
+    </buildCommand>
+    <buildCommand>
+      <name>org.drools.eclipse.droolsbuilder</name>
+    </buildCommand>
+    <buildCommand>
+      <name>org.devzuz.q.maven.jdt.core.mavenIncrementalBuilder</name>
+    </buildCommand>
+  </buildSpec>
+  <natures>
+    <nature>org.eclipse.jdt.core.javanature</nature>
+    <nature>org.devzuz.q.maven.jdt.core.mavenNature</nature>
+  </natures>
+</projectDescription>
\ No newline at end of file

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Attribute.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Attribute.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Attribute.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,41 @@
+package org.drools.learner;
+
+public class Attribute {
+	
+	private String name;
+	private Object value;
+	
+	//final ClassFieldExtractor extractor = cache.getExtractor( class_obj, f_name, getClass().getClassLoader() );
+	
+	public String getName() {
+		return name;
+	}
+	
+	public void setName(String _name) {
+		this.name = _name;
+	}
+	
+	public Object getValue() {
+		return value;
+	}
+	
+	public void setValue(Object _value) {
+		this.value = _value;
+	}
+	
+	/* we assume that "another" points to the same attribute type as this */
+	public int compareValue(Attribute another) {
+		/* Boolean, Double, Integer, String...*/
+		return AttributeValueComparator.instance.compare(getValue(), another.getValue());
+	}
+	
+	public int hashCode() {
+		return this.value.hashCode();
+	}
+	
+	public String toString() {
+		return value.toString();
+	}
+	
+
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Attribute.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/AttributeValueComparator.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/AttributeValueComparator.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/AttributeValueComparator.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,16 @@
+package org.drools.learner;
+
+import java.util.Comparator;
+
+public class AttributeValueComparator implements Comparator<Object> {
+
+	/* we assume that "another" points to the same attribute type as this */
+	public int compare(Object value1, Object value2) {
+		if (value1 instanceof Comparable)
+			return ((Comparable)value1).compareTo(value2); /* Boolean, Double, Integer, String...*/
+		return value1.hashCode() - value2.hashCode();
+	}
+
+	// singleton wannabe
+	public static AttributeValueComparator instance = new AttributeValueComparator();
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/AttributeValueComparator.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/DecisionTree.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/DecisionTree.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/DecisionTree.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,170 @@
+package org.drools.learner;
+
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+
+import org.drools.learner.tools.LoggerFactory;
+import org.drools.learner.tools.SimpleLogger;
+
+
+public class DecisionTree {
+	
+	protected static SimpleLogger slog = LoggerFactory.getSysOutLogger(DecisionTree.class, SimpleLogger.DEFAULT_LEVEL);
+	
+	//private Class<?> obj_clazz;
+	private Schema obj_schema;
+	
+	/* the target attribute */
+	private Domain target;
+	
+	///* all attributes that will be used during classification */
+	private ArrayList<Domain> attrsToClassify;
+
+	private TreeNode root;
+	
+	// The id of the tree in the forest
+	private int id;
+	
+	private String execution_signature;
+	public long FACTS_READ = 0;
+
+	private int validation_error, training_error;
+
+	private int num_nonterminal_nodes;
+
+	public DecisionTree(Schema inst_schema, String _target) {
+		this.obj_schema = inst_schema; //inst_schema.getObjectClass();
+		this.num_nonterminal_nodes = 0;
+
+		if (slog.debug() != null)
+			slog.debug().log("The target attribute: "+ _target+ "\n");
+		
+		this.target = inst_schema.getAttrDomain(_target);
+		
+		if (slog.debug() != null)
+			slog.debug().log("The target domain: "+ target+ "\n");
+		this.attrsToClassify = new ArrayList<Domain>(inst_schema.getAttrNames().size()-1);
+		for (String attr_name : inst_schema.getAttrNames()) {
+			if (!attr_name.equals(_target)) {
+				//flog.debug("Adding the attribute: "+ attr_name);
+				if (slog.debug() != null)
+					slog.debug().log("Adding the attribute: "+ attr_name+ "\n");
+				this.attrsToClassify.add(inst_schema.getAttrDomain(attr_name));
+			}
+		}
+		Collections.sort(this.attrsToClassify, new DomainComparator()); // compare the domains by the name
+		
+	}
+	
+	public DecisionTree(DecisionTree parentTree, Domain exceptDomain) {
+		//this.domainSet = new Hashtable<String, Domain<?>>();
+		this.obj_schema = parentTree.getSchema();
+		this.target = parentTree.getTargetDomain();
+		this.attrsToClassify = new ArrayList<Domain>(parentTree.getAttrDomains().size()-1);
+		for (Domain attr_domain : parentTree.getAttrDomains()) {
+			if (attr_domain.isNotJustSelected(exceptDomain))
+				this.attrsToClassify.add(attr_domain);
+		}
+//		System.out.print("New tree ");
+//		for (Domain d:attrsToClassify)
+//			System.out.print("d: "+d);
+//		System.out.println("");
+		//Collections.sort(this.attrsToClassify, new Comparator<Domain>()); // compare the domains by the name
+		
+	}
+	
+	private Schema getSchema() {
+		return obj_schema;
+	}
+
+	public Class<?> getObjClass() {
+		return obj_schema.getObjectClass();
+	}
+	
+	public HashMap<String, ArrayList<Field>> getAttrRelationMap() {
+		return obj_schema.getAttrRelationMap();
+	}
+	
+	public int getId() {
+		return id;
+	}
+	
+	public void setID(int i) {
+		this.id = i;
+	}
+	
+	public Domain getTargetDomain() {
+		return target;
+	}
+	
+	public ArrayList<Domain> getAttrDomains() {
+		return attrsToClassify;
+	}
+	
+	public TreeNode getRoot() {
+		return (root);
+	}
+
+	public void setRoot(TreeNode root) {
+		this.root = root;
+	}
+	
+	public Object vote(Instance i) {
+		return this.getRoot().voteFor(i);
+	}
+	
+
+	public void setValidationError(int error) {
+		validation_error = error;
+	}	
+	public int getValidationError() {
+		return validation_error;
+	}
+	
+	public void setTrainingError(int error) {
+		training_error = error;
+	}
+	public int getTrainingError() {
+		return training_error;
+	}
+	
+	public int calc_num_node_leaves(TreeNode my_node) {
+		if (my_node instanceof LeafNode) {
+
+			return 1;
+		} else {
+			num_nonterminal_nodes ++;
+		}
+		
+		int leaves = 0;
+		for (Object child_key: my_node.getChildrenKeys()) {
+			/* split the last two class at the same time */
+			
+			TreeNode child = my_node.getChild(child_key);
+			leaves += calc_num_node_leaves(child);
+			
+		}
+		my_node.setNumLeaves(leaves);
+		return leaves;
+	}
+	
+	public int getNumNonTerminalNodes() {
+		return num_nonterminal_nodes;
+	}
+	public void setSignature(String executionSignature) {
+		execution_signature = executionSignature;
+	}
+	
+	public String getSignature() {
+		return execution_signature;
+	}
+	
+	@Override
+	public String toString() {
+		String out = "Facts scanned " + FACTS_READ + "\n";
+		return out + root.toString();
+	}
+	
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/DecisionTree.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/DecisionTreePruner.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/DecisionTreePruner.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/DecisionTreePruner.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,374 @@
+package org.drools.learner;
+
+import java.util.ArrayList;
+import java.util.Collections;
+
+import org.drools.learner.builder.SingleTreeTester;
+import org.drools.learner.eval.Estimator;
+import org.drools.learner.tools.LoggerFactory;
+import org.drools.learner.tools.SimpleLogger;
+
+
+
+public class DecisionTreePruner {
+	
+	private static SimpleLogger flog = LoggerFactory.getUniqueFileLogger(DecisionTreePruner.class, SimpleLogger.DEFAULT_LEVEL);
+	private static SimpleLogger slog = LoggerFactory.getSysOutLogger(DecisionTreePruner.class, SimpleLogger.DEBUG);
+	
+	private Estimator procedure;
+	
+	private ArrayList<ArrayList<NodeUpdate>> updates;
+	private int num_trees_to_grow;
+	
+	private NodeUpdate best_update;
+	public DecisionTreePruner(Estimator proc) {
+		procedure = proc;
+		num_trees_to_grow = procedure.getEstimatorSize();
+		updates = new ArrayList<ArrayList<NodeUpdate>>(num_trees_to_grow);
+		
+		best_update = new NodeUpdate(10000000.0d);
+	} 	
+	
+	public void prun_tree(DecisionTree tree) {
+		// TODO Auto-generated method stub
+		
+	}
+	
+	public void prun_to_estimate() {	
+		for (DecisionTree dt: procedure.getEstimators()) {
+			// dt.getId()
+			//dt.calc_num_node_leaves(dt.getRoot()); // this is done in the estimator
+			ArrayList<NodeUpdate> tree_sequence = new ArrayList<NodeUpdate>();
+			updates.add(tree_sequence);
+			NodeUpdate init_tree = new NodeUpdate(dt.getValidationError());
+			init_tree.setResubstitution_cost(dt.getTrainingError());
+			init_tree.setAlpha(-1);	// dont know
+			init_tree.setCost_complexity(-1);	// dont known
+			init_tree.setDecisionTree(dt);
+			init_tree.setNum_terminal_nodes(dt.getRoot().getNumLeaves());
+			tree_sequence.add(init_tree);
+			
+			sequence_trees(dt);
+			
+			// sort the found candidates
+			//Collections.sort(updates.get(dt.getId()), arg1)
+			
+			int id =0;
+			System.out.println("Tree id\t Num_leaves\t Cross-validated\t Resubstitution\t Alpha\t");
+			for (NodeUpdate nu: updates.get(dt.getId()) ){
+				//System.out.println("Tree id\t Num_leaves\t Cross-validated\t Resubstitution\t Alpha\t");
+				System.out.println(id +"\t"+ nu.getNum_terminal_nodes()+"\t"+nu.getCross_validated_cost()+"\t"+nu.getResubstitution_cost()+"\t"+nu.getAlpha()+"\n");
+				id++;
+			}
+		}
+	
+	}
+	
+	private void sequence_trees(DecisionTree dt_0) {
+		if (slog.debug() !=null)
+			slog.debug().log(dt_0.toString() +"\n");
+		// if number of non-terminal nodes in the tree is more than 1 
+		// = if there exists at least one non-terminal node different than root
+		if (dt_0.getNumNonTerminalNodes() < 1) {
+			if (slog.debug() !=null)
+				slog.debug().log(":sequence_trees:TERMINATE-There is no non-terminal nodes? " + dt_0.getNumNonTerminalNodes() +"\n");
+			return; 
+		} else if (dt_0.getNumNonTerminalNodes() == 1 && dt_0.getRoot().getNumLeaves()<=1) {
+			if (slog.debug() !=null)
+				slog.debug().log(":sequence_trees:TERMINATE-There is only one node left which is root node " + dt_0.getNumNonTerminalNodes()+ " and it has only one leaf (pruned)" +dt_0.getRoot().getNumLeaves()+"\n");
+			return; 
+		}
+		// for each non-leaf subtree
+		ArrayList<TreeNode> candidate_nodes = new ArrayList<TreeNode>();
+		// to find all candidates with min_alpha value
+		TreeSequenceProc search = new TreeSequenceProc(100000.0d, new MinAlphaProc()); 
+		
+		
+		search.find_candidate_nodes(dt_0, dt_0.getRoot(), candidate_nodes);
+		double min_alpha = search.getTheAlpha();
+		System.out.println("!!!!!!!!!!!alpha: "+min_alpha + " num_nodes_found "+candidate_nodes.size());
+		
+		if (candidate_nodes.size() >0) {
+			// The one or more subtrees with that value of will be replaced by leaves
+			// instead of getting the first node, have to process all nodes and prune all
+			// write a method to prune all
+			TreeNode best_node = candidate_nodes.get(0);
+			LeafNode best_clone = new LeafNode(dt_0.getTargetDomain(), best_node.getLabel());
+			best_clone.setRank(	best_node.getRank());
+			best_clone.setNumMatch(best_node.getNumMatch());						//num of matching instances to the leaf node
+			best_clone.setNumClassification(best_node.getNumLabeled());				//num of (correctly) classified instances at the leaf node
+
+			NodeUpdate update = new NodeUpdate(best_node, best_clone);
+			//update.set
+			update.setAlpha(min_alpha);
+			update.setDecisionTree(dt_0);
+			int k = numExtraMisClassIfPrun(best_node); // extra misclassified guys
+			int num_leaves = best_node.getNumLeaves();
+			int new_num_leaves = dt_0.getRoot().getNumLeaves() - num_leaves +1;
+
+			TreeNode father_node = best_node.getFather();
+			if (father_node != null) {
+				for(Object key: father_node.getChildrenKeys()) {
+					if (father_node.getChild(key).equals(best_node)) {
+						father_node.putNode(key, best_clone);
+						break;
+					}
+				}
+				updateLeaves(father_node, -num_leaves+1);
+			} else {
+				// this node does not have any father node it is the root node of the tree
+				dt_0.setRoot(best_clone);
+			}
+			
+			
+			ArrayList<InstanceList> sets = procedure.getFold(dt_0.getId());
+			//InstanceList learning_set = sets.get(0);
+			InstanceList validation_set = sets.get(1);
+			
+			int error = 0;
+			SingleTreeTester t= new SingleTreeTester(dt_0);
+			for (int index_i = 0; index_i < validation_set.getSize(); index_i++) {
+				Integer result = t.test(validation_set.getInstance(index_i));
+				if (result == Stats.INCORRECT) {
+					error ++;
+				}
+			}
+			
+			
+			update.setCross_validated_cost(error);
+			int new_resubstitution_cost = dt_0.getTrainingError() + k;
+			double cost_complexity = new_resubstitution_cost + min_alpha * (new_num_leaves);
+			
+			
+			if (slog.debug() !=null)
+				slog.debug().log(":sequence_trees:cost_complexity of selected tree "+ cost_complexity +"\n");
+			update.setResubstitution_cost(new_resubstitution_cost);
+			// Cost Complexity = Resubstitution Misclassification Cost + \alpha . Number of terminal nodes
+			update.setCost_complexity(cost_complexity);
+			update.setNum_terminal_nodes(new_num_leaves);
+
+			updates.get(dt_0.getId()).add(update);
+			
+			if (slog.debug() !=null)
+				slog.debug().log(":sequence_trees:error "+ error +"<?"+ procedure.getValidationErrorEstimate() * 1.6 +"\n");
+
+			if (error < procedure.getValidationErrorEstimate() * 1.6) {
+				// if the error of the tree is not that bad
+				
+				if (error < best_update.getCross_validated_cost()) {
+					best_update = update;
+					if (slog.debug() !=null)
+						slog.debug().log(":sequence_trees:best node updated \n");
+		
+				}
+					
+				sequence_trees(dt_0);
+			} else {
+				update.setStopTree();
+				return;
+			}
+		}
+		
+	}
+
+	private void updateLeaves(TreeNode my_node, int i) {
+		my_node.setNumLeaves(my_node.getNumLeaves() + i);
+		TreeNode father_node = my_node.getFather();
+		if (father_node !=null)
+			updateLeaves(father_node, i);
+		
+	}
+	
+	
+	private int numExtraMisClassIfPrun(TreeNode my_node) {
+		int num_misclassified = (int) my_node.getNumMatch() - my_node.getNumLabeled(); // needs to be cast because of
+		if (slog.debug() !=null)
+			slog.debug().log(":numExtraMisClassIfPrun:num_misclassified "+ num_misclassified);
+		
+		
+		
+		int kids_misclassified = 0;
+		for(Object key: my_node.getChildrenKeys()) {
+			TreeNode child = my_node.getChild(key);
+			kids_misclassified += child.getMissClassified();//(int) child.getNumMatch() - child.getNumLabeled();
+			if (slog.debug() !=null)
+				slog.debug().log(" kid="+ kids_misclassified );
+		}
+		if (slog.debug() !=null)
+			slog.debug().log("\n");
+		return num_misclassified - kids_misclassified;
+	}
+	
+	
+	public class TreeSequenceProc {
+		private double the_alpha;
+		private AlphaSelectionProc alpha_proc;
+		
+		public TreeSequenceProc(double value, AlphaSelectionProc cond) {
+			the_alpha = value;
+			alpha_proc = cond;
+		}
+		
+		// memory optimized
+		public void find_candidate_nodes(DecisionTree dt, TreeNode my_node, ArrayList<TreeNode> nodes) {
+			
+			if (my_node instanceof LeafNode) {
+				
+				//leaves.add((LeafNode) my_node);
+				return;
+			} else {
+				// if you prune that one k more instances are misclassified
+				
+				int k = numExtraMisClassIfPrun(my_node);
+				int num_leaves = my_node.getNumLeaves();
+				
+				double alpha = ((double)k)/((double)dt.FACTS_READ * (num_leaves-1));
+				if (slog.debug() !=null)
+					slog.debug().log(":search_alphas:alpha "+ alpha+ "/"+the_alpha+ " k "+k+" num_leaves "+num_leaves+" all "+ dt.FACTS_READ +  "\n");
+				
+				the_alpha = alpha_proc.update_nodes(alpha, the_alpha, my_node, nodes);		
+				
+				for (Object attributeValue : my_node.getChildrenKeys()) {
+					TreeNode child = my_node.getChild(attributeValue);
+					find_candidate_nodes(dt, child, nodes);
+					//nodes.pop();
+				}				
+			}
+			return;
+		}
+		
+		public double getTheAlpha() {
+			return the_alpha;
+		}
+	}
+	
+	public interface AlphaSelectionProc {
+		public double update_nodes(double cur_alpha, double the_alpha, TreeNode cur_node, ArrayList<TreeNode> nodes);
+	}
+	public class MinAlphaProc implements AlphaSelectionProc{
+//		private double best_alpha;
+//		public MinAlphaProc(double value) {
+//			best_alpha = value;
+//		}
+		
+		public double update_nodes(double cur_alpha, double the_alpha, TreeNode cur_node, ArrayList<TreeNode> nodes) {
+			if (cur_alpha == the_alpha) {
+				// add this one to the set
+				nodes.add(cur_node);
+				return cur_alpha;
+			} else if (cur_alpha < the_alpha) {
+				
+				nodes.clear(); // can not put a new 'cause then it does not update the global one = new ArrayList<TreeNode>();
+				// remove the ones you found and replace with that one
+				//tree_sequence.get(dt_id).put(my_node), alpha
+				
+				nodes.add(cur_node);
+				return cur_alpha;
+				
+			} else {
+				
+			}
+			return the_alpha;
+		}
+
+//		public double getAlpha() {
+//			return best_alpha;
+//		}
+	}
+	
+	public class AnAlphaProc implements AlphaSelectionProc{
+//		private double an_alpha;
+//		public AnAlphaProc(double value) {
+//			an_alpha = value;
+//		}
+		
+		public double update_nodes(double cur_alpha, double the_alpha, TreeNode cur_node, ArrayList<TreeNode> nodes) {
+			
+			if (cur_alpha == the_alpha) {
+				// add this one to the set
+				nodes.add(cur_node);
+			}
+			return cur_alpha;
+		}
+
+//		public double getAlpha() {
+//			return an_alpha;
+//		}
+	}
+	
+	public class NodeUpdate{
+		
+		private boolean stopTree;
+		
+		private DecisionTree tree;
+		
+		private TreeNode old_node, node_update;
+		private int num_terminal_nodes;
+		private double cross_validated_cost;
+		private double resubstitution_cost;
+		private double cost_complexity;
+		private double alpha;
+		
+		// to set an node update with the worst cross validated error
+		public NodeUpdate(double error) {
+			cross_validated_cost = error;
+			stopTree = false;
+			old_node = null;
+			node_update = null;
+		}
+		public NodeUpdate(TreeNode old_n, LeafNode new_n) {
+			stopTree = false;
+			old_node = old_n;
+			node_update = new_n;
+		}
+		
+		public void setDecisionTree(DecisionTree dt_0) {
+			tree = dt_0;
+		}
+
+		public void setStopTree() {
+			stopTree = true;
+		}
+
+		public int getNum_terminal_nodes() {
+			return num_terminal_nodes;
+		}
+
+		public void setNum_terminal_nodes(int num_terminal_nodes) {
+			this.num_terminal_nodes = num_terminal_nodes;
+		}
+
+		public double getCross_validated_cost() {
+			return cross_validated_cost;
+		}
+
+		public void setCross_validated_cost(double cross_validated_cost) {
+			this.cross_validated_cost = cross_validated_cost;
+		}
+
+		public double getResubstitution_cost() {
+			return resubstitution_cost;
+		}
+
+		public void setResubstitution_cost(double resubstitution_cost) {
+			this.resubstitution_cost = resubstitution_cost;
+		}
+
+		public double getCost_complexity() {
+			return cost_complexity;
+		}
+
+		public void setCost_complexity(double cost_complexity) {
+			this.cost_complexity = cost_complexity;
+		}
+
+		public double getAlpha() {
+			return alpha;
+		}
+
+		public void setAlpha(double alpha) {
+			this.alpha = alpha;
+		}	
+	}
+
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/DecisionTreePruner.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/DecisionTreeVisitor.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/DecisionTreeVisitor.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/DecisionTreeVisitor.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,142 @@
+package org.drools.learner;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Stack;
+
+
+public class DecisionTreeVisitor {
+	
+	private Stack<NodeValue> nodes;
+	
+	private HashMap<Integer, Path> paths;
+	
+	private int num_paths_found;
+	
+	public DecisionTreeVisitor() {
+		/* most important */
+		this.nodes = new Stack<NodeValue>();
+		this.paths = new HashMap<Integer, Path>();
+		num_paths_found = 0;
+	}
+	
+	public void visit(DecisionTree dt) {
+		dfs(dt.getRoot(), dt.getId());
+//		if (!nodes.empty())
+//			nodes.pop(); // POP the root
+		
+	}
+	// memory optimized
+	public void visit2(DecisionTree dt) {
+		dfs2(dt.getRoot(), dt.getId());
+		//if (!nodes.empty())
+			nodes.pop(); // POP the root
+		
+	}
+	
+	private void dfs(TreeNode my_node, int tree_id) {
+		//System.out.println("How many guys there of "+my_node.getDomain().getName() +"  : "+my_node.getDomain().getValues().size());
+
+		if (my_node instanceof LeafNode) {
+			NodeValue leaf_value = new NodeValue(my_node);
+			leaf_value.setValue(((LeafNode) my_node).getCategory()); //getValue(null));
+			nodes.push(leaf_value);
+			Path p = spitPath(nodes);
+			p.setTreeId(tree_id);
+			num_paths_found ++;
+			if (!paths.containsKey(p.hashCode())) {
+				paths.put(p.hashCode(), p);
+			}
+			nodes.pop();
+			return;
+		}
+		
+		for (Object attributeValue : my_node.getChildrenKeys()) {
+			//System.out.println("Domain: "+ my_node.getDomain().getName() + " the value:"+ attributeValue);
+			NodeValue node_value = new NodeValue(my_node);
+			node_value.setValue(attributeValue);		
+			nodes.push(node_value);
+			TreeNode child = my_node.getChild(attributeValue);
+			dfs(child, tree_id);
+			nodes.pop();
+		}
+		return;
+	}
+	// memory optimized
+	private void dfs2(TreeNode my_node, int tree_id) {
+		//System.out.println("How many guys there of "+my_node.getDomain().getName() +"  : "+my_node.getDomain().getValues().size());
+		NodeValue node_value = new NodeValue(my_node);
+		nodes.push(node_value);
+		if (my_node instanceof LeafNode) {
+			//NodeValue leaf_value = new NodeValue(my_node);
+			node_value.setValue(((LeafNode) my_node).getCategory()); //getValue(null));
+			//nodes.push(leaf_value);
+			//paths.add(getPath(nodes)); // if i can spit the rule here it would work
+			Path p = spitPath(nodes);
+			p.setTreeId(tree_id);
+
+			if (!paths.containsKey(p.hashCode())) {
+				paths.put(p.hashCode(), p);
+			}
+			return;
+		}
+		
+		for (Object attributeValue : my_node.getChildrenKeys()) {
+			//System.out.println("Domain: "+ my_node.getDomain().getName() + " the value:"+ attributeValue);
+			node_value.setValue(attributeValue);			
+			TreeNode child = my_node.getChild(attributeValue);
+			dfs2(child, tree_id);
+			nodes.pop();
+		}
+		return;
+	}
+
+	
+	public int getNumPaths() {
+		return paths.size();
+	}
+	
+	public int getNumPathsFound() {
+		return num_paths_found;
+	}
+
+	public Collection<Path> getPathList() {
+		return paths.values();
+	}
+	
+	private Path spitPath(Stack<NodeValue> nodes) {
+		//, Stack<NodeValue> leaves // if more than one leaf
+		Path newPath = new Path(nodes.size());// (nodes, leaves) //if more than one leaf
+		//newRule.setObjectClass(this.getRuleClass());
+		Iterator<NodeValue> it = nodes.iterator();
+		while (it.hasNext()) {
+
+			NodeValue current = it.next();
+			if (it.hasNext()) { 
+				newPath.addStep(current);
+			} else {
+				newPath.setStats(current);
+			}
+		}
+		
+//		if (slog.debug() != null) {
+//			slog.debug().log("\n"+newPath.hashCode()+ " : "+ newPath + "\n");	
+//		}
+		return newPath;	
+	}
+
+
+	
+//	private ArrayList<NodeValue> getPath(Stack<NodeValue> nodes) {
+//		//, Stack<NodeValue> leaves // if more than one leaf
+//		ArrayList<NodeValue> path = new ArrayList<NodeValue> (nodes.size());
+//		Iterator<NodeValue> it = nodes.iterator();
+//		while (it.hasNext()) {
+//			NodeValue current = it.next();
+//			path.add(current);
+//		}
+//		return path;	
+//	}
+
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/DecisionTreeVisitor.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Domain.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Domain.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Domain.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,177 @@
+package org.drools.learner;
+
+import java.util.ArrayList;
+import java.util.Collections;
+
+import org.drools.learner.tools.Util;
+
+public class Domain {
+	private boolean categorical, fixed, artificial;
+	//private DataType dataType;
+	private String fName;
+	private Class<?> fType, objKlass /*the class that attribute belongs to*/; // , ownerKlass;		// not sure if necessary
+	protected ArrayList<Object> fCategories;
+	
+	public Domain(Class<?> klass, String _name, Class<?> _type) {
+		this.fName = _name;
+		this.fType = _type;
+		this.objKlass = klass;
+		
+		this.categorical = true;	// BY DEFAULT, it is categorical
+		this.artificial = false;	// BY DEFAULT, it is a real field, if it is artificial it means there is no field exist but there is method which computes the value
+		//this.dataType = DataType.PRIMITIVE; // BY DEFAULT it is primitive
+		this.fCategories = new ArrayList<Object>(2);
+		
+	}
+	public Domain cheapClone() {
+		Domain dom = new Domain(this.objKlass, this.fName, this.fType);
+		//dom.fixed = this.fixed;
+		dom.categorical = this.categorical;
+		//dom.readingSeq = readingSeq;
+		dom.fCategories = this.fCategories;
+		
+		return dom;
+	}
+
+	public Class<?> getFType() {
+		return this.fType;
+	}
+	
+	public String getFReferenceName() {
+		return Util.getFReference(objKlass, fName);
+	}
+	public String getFName() {
+		return this.fName;
+	}
+	
+	protected void setFName(String name) {
+		this.fName = name;
+	}
+	public void setFixed(boolean _fixed) {
+		this.fixed = _fixed;
+	}
+
+	/** Indicates that this domain cannot be changed after creation */
+	boolean isFixed() {
+		return this.fixed;
+	}
+	
+	public void setCategorical(boolean _cate) {
+		this.categorical = _cate;
+	}
+
+	/** Indicates that this domain has discrete set of values */
+	public boolean isCategorical() {
+		return this.categorical;
+	}
+	
+	// if the field is a artificial field
+	public void setArtificial(boolean b) {
+		this.artificial = b;
+	}
+	public boolean isArtificial() {
+		return this.artificial;
+	}
+//	public void setOwnerKlass(Class<?> owner_clazz) {
+//		 = owner_clazz;
+//	}
+	
+	public Class<?> getObjKlass() {
+		return objKlass;
+	}
+	
+	public void addCategory(Object value) {
+		if (fixed)	return;
+		if (categorical) {
+			if (!fCategories.contains(value))	fCategories.add(value);
+		} else {
+			return;
+		}
+		
+	}
+
+	public Object getCategory(int idx) {
+		return fCategories.get(idx);
+	}
+	public int getCategoryCount() {
+		return fCategories.size();
+	}
+	
+	public boolean isPossible(Object _value) throws Exception {
+		//System.out.println("Domain.isPossible() start "+ value+ " ?");
+//		since the value is coming from the extractor i dont check the type	
+//		if (_value.getClass()!= this.fType)
+//			return false;
+		//System.exit(0);
+		if (fixed) {// if it is boolean type actually you do not need to check for the contains function {TRUE, FALSE}
+			return this.containsValue(_value);
+		} else {
+			return true;
+		}
+		
+	}
+	
+	public boolean containsValue(Object value) throws Exception {
+		if (categorical) {
+			return this.fCategories.contains(value);
+		} else {
+			if (fCategories.isEmpty() || fCategories.size()==1)
+				throw new Exception(" Domain "+fName+" is constant and not discrete but bounds are not set: possible values size: "+ fCategories.size());
+			
+			// they must be sorted 
+			return (AttributeValueComparator.instance.compare(value, fCategories.get(0)) >= 0 && AttributeValueComparator.instance.compare(value, fCategories.get(getCategoryCount()-1)) <= 0);
+			//return (nComparator.compare((Number)value, fValues.get(0)) >= 0 && nComparator.compare((Number)value, fValues.get(fValues.size()-1)) <= 0);
+			
+			/* should i check if the value is in one of the intervals
+			 * this is necessary only if the intervals are unbroken 
+			 */
+		}
+	}
+	
+	public Object getCategoryOf(Object value) {
+		if (categorical) {
+			return value;
+		} else {
+	
+			int insertion_point = Collections.binarySearch(this.fCategories, value , AttributeValueComparator.instance);
+			/*
+			 * index of the search key, if it is contained in the list; otherwise, (-(insertion point) - 1). 
+			 * The insertion point is defined as the point at which the key would be inserted into the list: 
+			 * the index of the first element greater than the key, or list.size(), if all elements in the 
+			 * list are less than the specified key. Note that this guarantees that the return value will be >= 0 
+			 * if and only if the key is found.
+			 */
+			if (insertion_point >= 0) {
+				return this.fCategories.get(insertion_point);
+			} else {
+				int unfound_insertion_point = -(insertion_point) -1;
+				if (unfound_insertion_point >= this.fCategories.size()) {
+					//System.out.println("insestion point is the size domain "+this);
+					unfound_insertion_point = this.fCategories.size() -1;  
+				}
+				return this.fCategories.get(unfound_insertion_point);
+			}
+		}
+	
+	}
+	
+	public boolean isNotJustSelected(Domain exceptDomain) {
+		if (this.objKlass.equals(exceptDomain.getObjKlass()))
+			return !this.getFName().equals(exceptDomain.getFName());
+		return true;
+	}
+	
+	public int hashCode() {
+		return objKlass.hashCode() ^ fName.hashCode() ^ fCategories.hashCode(); // TODO
+	}
+	
+	public String toString() {
+		StringBuffer sb = new StringBuffer(fName + "");
+//		for (Object v: fValues) {
+//			sb.append("-" + v);
+//		}
+		return sb.toString();
+
+	}
+
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Domain.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/DomainComparator.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/DomainComparator.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/DomainComparator.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,19 @@
+package org.drools.learner;
+
+import java.util.Comparator;
+
+
+public class DomainComparator implements Comparator<Domain> {
+
+	public int compare(Domain d0, Domain d1) {
+		
+		return d0.getFName().compareTo(d1.getFName());
+//		int fNameComp = d0.getFName().compareTo(d1.getFName());
+//		if (fNameComp!=0)
+//			return fNameComp;
+//		else if ()	// do other stuff
+//			return 1;
+//		else
+//			return 0;
+	}
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/DomainComparator.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Instance.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Instance.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Instance.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,51 @@
+package org.drools.learner;
+
+import java.util.HashMap;
+
+
+public class Instance {
+	private HashMap<String, Attribute> attributes;
+	private double weight = 1.0;
+	
+	public Instance() {
+		this.attributes = new HashMap<String, Attribute>(); // TODO should i set a size, HOW?
+	}
+	
+	public void setWeight(double w) {
+		weight = w;
+	}
+	
+	public double getWeight() {
+		return weight;
+	}
+	
+	// name : _obj_klass+"@"+attr_name
+	// value : its value
+	public void setAttr(String _name, Object _value) {
+		Attribute f_attr = new Attribute();
+		f_attr.setName(_name);
+		f_attr.setValue(_value);
+		this.attributes.put(_name, f_attr);
+	}
+	
+	public Attribute getAttr(String field_name) {
+		return attributes.get(field_name);
+	}
+	public Object getAttrValue(String field_name) {
+		return attributes.get(field_name).getValue();
+	}
+	
+	public int hashCode() {
+		return attributes.hashCode();
+	}
+
+	public String toString() {
+		StringBuffer sb = new StringBuffer(this.hashCode() + " ");
+		for (String key: attributes.keySet()) {
+			sb.append(key +"="+attributes.get(key)+", ");
+		}
+		return sb.toString();
+	}
+	
+
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Instance.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/InstanceComparator.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/InstanceComparator.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/InstanceComparator.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,17 @@
+package org.drools.learner;
+
+import java.util.Comparator;
+
+
+public class InstanceComparator implements Comparator<Instance> {
+	
+	private String attr_name;
+
+	public InstanceComparator(String _attr_name) {
+		this.attr_name = _attr_name;
+	}
+	public int compare(Instance i0, Instance i1) {
+		return i0.getAttr(this.attr_name).compareValue(i1.getAttr(this.attr_name));
+	}
+
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/InstanceComparator.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/InstanceFactory.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/InstanceFactory.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/InstanceFactory.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,139 @@
+package org.drools.learner;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+
+import org.drools.WorkingMemory;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.learner.builder.Learner.DataType;
+import org.drools.learner.tools.ClassStructure;
+import org.drools.learner.tools.LoggerFactory;
+import org.drools.learner.tools.SimpleLogger;
+import org.drools.learner.tools.Util;
+import org.drools.spi.ReadAccessor;
+
+public class InstanceFactory {
+
+	private static SimpleLogger flog = LoggerFactory.getUniqueFileLogger(InstanceFactory.class, SimpleLogger.DEFAULT_LEVEL);
+	private static SimpleLogger slog = LoggerFactory.getSysOutLogger(InstanceFactory.class, SimpleLogger.DEFAULT_LEVEL);
+	
+	private WorkingMemory session;
+	private Schema schema;
+	public InstanceFactory(WorkingMemory _session, Schema _schema) {
+		session = _session;
+		schema = _schema;
+	}
+	
+	public Instance createInstance(Object _obj) {
+		try {
+			//if (schema.getClassStructure().containsKey(_obj.getClass())) {
+			if (schema.getObjectClass().isAssignableFrom(_obj.getClass())) {
+				Instance i= new Instance();
+				boolean bok = instantiateAttributes(i, _obj, _obj.getClass());
+				if (!bok) {
+					if (slog.error() != null)
+						slog.error().log("What is going on, how come it is wrong : ");
+					System.exit(0);
+				}
+				return i; // perfectly instantiated
+			} else 
+				return null;// could not instantiate
+			
+//			if (instantiateAttributes(i, _obj, _obj.getClass()))
+//				return i;	// perfectly instantiated
+//			else
+//				return null;// could not instantiate
+		} catch (Exception e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		return null;
+	}
+
+	public boolean instantiateAttributes(Instance inst, Object _obj, Class<?> klass) throws Exception {
+
+		if (slog.info() != null)
+			slog.info().log("Klass : "+ klass);
+		ClassStructure struct = schema.getClassStructure().get(klass);
+		if (slog.info() != null)
+			slog.info().log("\t ClassStructure : "+ struct + "\n");
+		if (struct == null)
+			return false;
+		
+		if (struct.hasLabel()) {// it has a method or label	
+			if (slog.debug() != null)
+				slog.debug().log(":instantiateAttributes:structure has a label ");
+			for (Method m : struct.getMethods()) {
+				String m_name = m.getName();
+//				if (m_name.startsWith("get")) {//TODO check
+//					m_name = m_name.substring(3).toLowerCase();
+//				}
+				
+				DataType m_type = DataType.PRIMITIVE;// must be primitive
+				if (slog.debug() != null)
+					slog.debug().log("method= "+m_name + " m_type="+m_type+ "\n");
+				getAttributeValue(inst, _obj, m_name, m_type);
+			}
+		}
+		// get the fields declared in the class
+		for (Field f : struct.getFields()) {
+			String f_name = f.getName();
+			DataType f_type = struct.getFieldType(f);
+			getAttributeValue(inst, _obj, f_name, f_type);
+		}
+		if (!struct.getParent().equals(Object.class))
+			return instantiateAttributes(inst, _obj, struct.getParent());
+		
+		return true;
+	}
+	
+	public void getAttributeValue(Instance inst, Object _obj, String name, DataType type) throws Exception {
+		Class<?> _obj_klass = _obj.getClass();
+		String fReference = Util.getFReference(_obj_klass, name);
+		switch (type) {
+		case PRIMITIVE:		// domain exist only for primitive types
+			Domain fieldDomain = schema.getAttrDomain(fReference);		
+			ReadAccessor f_extractor = schema.getAttrExtractor(fReference);
+			if (slog.info() != null)
+				slog.info().log("Field name : "+ name+ " of the object "+ _obj + " the extract:"+f_extractor+"\n");
+			
+			//Object f_value = f_extractor.getValue( (InternalWorkingMemory) session, _obj);
+			Object f_value = f_extractor.getValue( _obj);
+			if (f_value != null) {
+				try {
+					if (fieldDomain.isPossible(f_value)) {
+						fieldDomain.addCategory(f_value);
+						inst.setAttr(fReference, f_value);
+					}
+				} catch (Exception e) {
+					if (slog.debug() != null)
+						slog.debug().log("Domain: "+fieldDomain+ " could not add the value "+ f_value+ "\n");
+					e.printStackTrace();
+				}
+			} else {
+				if (slog.debug() != null)
+					slog.debug().log("Field name : "+ name+ " of the object "+ _obj + " the extract:"+f_extractor+"\n");
+				if (slog.debug() != null)
+					slog.debug().log("The attribute value cannot be read, check the attribute\n");
+				System.exit(0);
+			}
+			break;
+		case STRUCTURED:	// the extractor exists for both types of data.
+			ReadAccessor complex_f_extractor = schema.getAttrExtractor(fReference);	// this returns an object to me
+			//Object obj_value = complex_f_extractor.getValue( (InternalWorkingMemory) session, _obj);
+			Object obj_value = complex_f_extractor.getValue(_obj);
+			instantiateAttributes(inst, obj_value, obj_value.getClass());
+			
+			break;
+		// case Collection
+		default:
+			throw new Exception("What type of data is this");
+		
+		}
+
+		return;
+	}
+
+
+
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/InstanceFactory.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/InstanceList.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/InstanceList.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/InstanceList.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,138 @@
+package org.drools.learner;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.drools.WorkingMemory;
+import org.drools.learner.tools.LoggerFactory;
+import org.drools.learner.tools.SimpleLogger;
+public class InstanceList {
+
+	private static SimpleLogger flog = LoggerFactory.getUniqueFileLogger(InstanceList.class, SimpleLogger.WARN);
+	private static SimpleLogger slog = LoggerFactory.getSysOutLogger(InstanceList.class, SimpleLogger.DEBUG);
+	
+	private Schema schema;
+	private ArrayList<Instance> instances;
+	private InstanceFactory factory;
+	
+	public InstanceList(Schema _schema, WorkingMemory _session) {
+		this.schema = _schema;
+		this.instances = new ArrayList<Instance>(); 
+		this.factory = new InstanceFactory(_session, _schema);
+	}
+	
+	// will be used as copy constructer
+	public InstanceList(Schema _schema, int size) {
+		this.schema = _schema;
+		this.instances = new ArrayList<Instance>(size);
+	}
+
+	public void addStructuredInstance(Object _obj) {
+		//the factory will validate the object class during the execution
+		// create instance and all attributes according to the schema		
+		Instance inst = factory.createInstance(_obj);		
+		
+		if (inst != null ) {
+			// the object is validated and the instance is created
+			//System.out.println(inst);
+			instances.add(inst);
+		} else {
+			if (slog.warn() != null)
+				slog.warn().log("The object "+_obj.getClass()+" is not related to the structure, couldnot create the instance\n");
+			//System.exit(0);
+		}
+	}
+	
+	public void addAsInstance(Instance inst) {
+		instances.add(inst);
+	}
+	
+	public int getSize() {
+		return instances.size();
+	}
+	
+	public Instance getInstance(int index) {
+		return instances.get(index);
+	}
+	
+	public List<Instance> getInstances() {
+		return instances;
+	}
+	
+	public InstanceList getInstances(int[] bag) {
+		if (bag.length > this.getSize()) {
+			System.out.println("Exception: TOO BIG to get Memory.getClassInstancesOf");
+			return null;
+		}
+		InstanceList toReturn = new InstanceList(this.getSchema(), bag.length);
+		for (int j = 0; j< bag.length ; j ++) {
+			toReturn.addAsInstance(this.getInstance(bag[j]));
+		}
+		return toReturn;
+	}
+	
+	public Schema getSchema() {
+		return schema;
+	}
+	public Collection<String> getTargets() {
+		return schema.getTargets();
+	}
+
+	public Collection<String> getAttributes() {
+		return schema.getAttrNames();
+	}
+	
+	
+/*	String getClassName();
+
+	void assignTo(Collection<Instance> c);
+
+	Domain getDomain(String attr);
+
+ 	public Collection<Domain> getDomains();
+
+	public int getSize();
+
+	public String toString();*/
+}
+
+/*
+	Data set: 	A schema and a set of instances matching the schema. 
+				Generally, no ordering on instances is assumed. 
+				Most machine learning work uses a single fixed-format table.
+	
+	
+				
+	Instance: 	A single object of the world from which a model will be learned, 
+														or on which a model will be used (e.g., for prediction). 
+				In most machine learning work, instances are described by feature vectors; 
+				some work uses more complex representations (e.g., containing relations between instances or between parts of instances).
+		= (example, case, record)
+	
+	Schema: 	A description of a data set's attributes and their properties.
+	
+	Attribute:	A quantity describing an instance. 
+				An attribute has a domain defined by the attribute type, which denotes the values that can be taken by an attribute. 
+		= (field, variable, feature)
+		
+	The following domain types are common:
+		- Categorical: 	A finite number of discrete values. 
+						The type nominal denotes that there is no ordering between the values, such as last names and colors. 
+						The type ordinal denotes that there is an ordering, 
+						such as in an attribute taking on the values low, medium, or high.
+						
+		- Continuous (quantitative): Commonly, subset of real numbers, 
+									where there is a measurable difference between the possible values. 
+						Integers are usually treated as continuous in practical problems.
+						
+	Feature:	A feature is the specification of an attribute and its value. 
+				For example, color is an attribute. ``Color is blue'' is a feature of an example. 
+				Many transformations to the attribute set leave the feature set unchanged 
+				(for example, regrouping attribute values or transforming multi-valued attributes to binary attributes). 
+				Some authors use feature as a synonym for attribute (e.g., in feature-subset selection).	
+	
+	Feature vector:	A list of features describing an instance.
+		= (record, tuple)
+	
+*/
\ No newline at end of file


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/InstanceList.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/LeafNode.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/LeafNode.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/LeafNode.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,72 @@
+package org.drools.learner;
+
+import org.drools.learner.tools.Util;
+
+public class LeafNode extends TreeNode {
+	
+	private Object targetCategory;
+	private double num_intances_classified;
+	
+	public LeafNode(Domain targetDomain, Object value) {
+		super(targetDomain);
+		this.targetCategory = value;
+		num_intances_classified = 0;
+	}
+	
+	public void putNode(Object attributeCategory, TreeNode node) {
+		throw new RuntimeException("cannot add Node to a leaf node");
+	}
+	
+	public Object getCategory() {
+		return targetCategory;
+	}
+	
+	public void setNumClassification(double size) {
+		this.num_intances_classified= size;
+	}
+	
+	public double getNumClassification() {
+		return this.num_intances_classified;
+	}
+	
+	public int getMissClassified() {
+		return (int) (getNumMatch() - num_intances_classified);
+	}
+	
+	public int getNumLeaves() {
+		return 1;
+	}
+//	public Integer evaluate(Instance i) {
+//		String targetFName = super.getDomain().getFName();
+//		
+//		Object attr_value = i.getAttrValue(targetFName);
+//		Object i_category = super.getDomain().getCategoryOf(attr_value);
+//		if (AttributeValueComparator.instance.compare(i_category, this.targetCategory) == 0) {
+//			return Integer.valueOf(1); 	//correct
+//		} else {
+//			return Integer.valueOf(0);	// mistake
+//		}			
+//	}
+	
+	public Object voteFor(Instance i) {
+		
+		return this.targetCategory;
+	}
+	
+	public int hashCode() {
+		return super.hashCode() ^ targetCategory.hashCode(); // ^ id;//should i add the children
+	}
+	
+	public String toString(){
+		return "DECISION -> " + targetCategory.toString();
+	}
+	
+	public String toString(int tab, int depth, StringBuffer buf) {
+		buf.append(Util.ntimes("\t", tab + 1));
+		
+		buf.append( super.getDomain().getFName() + ":DECISION->" +targetCategory.toString() + " match: "+getNumMatch()+" correct:"+num_intances_classified+"\n");
+		return buf.toString();
+	}
+	
+
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/LeafNode.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Memory.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Memory.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Memory.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,76 @@
+package org.drools.learner;
+
+import java.util.HashMap;
+import java.util.Iterator;
+
+import org.drools.WorkingMemory;
+import org.drools.learner.builder.Learner.DataType;
+import org.drools.learner.builder.Learner.DomainAlgo;
+import org.drools.learner.tools.FeatureNotSupported;
+
+public class Memory {
+
+	// TODO pass a list of classes, and get all the object from that class
+	// by default structured
+	public static Memory createFromWorkingMemory(WorkingMemory _session, Class<?> clazz, DomainAlgo domain, DataType data) throws FeatureNotSupported {
+		// if mem == null
+		Memory mem = new Memory();
+
+		mem.session = _session;
+
+		mem.setClassToClassify(clazz);
+		// create schema from clazz
+		Schema inst_schema = null;
+		try {
+			inst_schema = Schema.createSchemaStructure(clazz, domain, data);
+		} catch (Exception e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+			System.exit(0);
+		}
+
+		// create a instance list that can hold objects from our schema
+		mem.instances.put(clazz, new InstanceList(inst_schema, _session));
+
+		/* 
+		 * do they create an ObjectTypeNode for each new inserted object type?
+		 * even if there is no rule exists.
+		 * No probably they do not 
+		 */
+		Iterator<Object> it_object = _session.iterateObjects();	// how can i get the object type nodes
+		while (it_object.hasNext()) {
+			Object obj = it_object.next();
+			// validating in the the factory during instantiation
+			//if (clazz.isAssignableFrom(obj.getClass()))
+			mem.instances.get(clazz).addStructuredInstance(obj);
+		}
+		//dt.FACTS_READ += facts.size();
+
+		return mem;
+	}
+
+
+	// Drools memory
+	private WorkingMemory session;
+	//// class specification
+	//private Schema schema;
+	Class<?> clazzToClassify;
+	
+	// instance list
+	private HashMap<Class<?>,InstanceList> instances;
+	
+	
+	private Memory() {
+		this.instances = new HashMap<Class<?>, InstanceList>();
+	}
+	
+	private void setClassToClassify(Class<?> clazz) {
+		this.clazzToClassify = clazz;
+	}
+	
+	public InstanceList getClassInstances() {
+		return instances.get(this.clazzToClassify);
+	}
+
+	
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Memory.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/NodeValue.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/NodeValue.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/NodeValue.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,104 @@
+package org.drools.learner;
+
+public class NodeValue { //implements RuleNode {
+	
+	//private static final Logger flog = LoggerFactory.getFileLogger(NodeValue.class, LogLevel.ERROR, Util.log_file); 
+	
+	private TreeNode node;
+	private Object nodeValue;	// should it be Attribute???
+	
+	public NodeValue(TreeNode n) {
+		this.node = n;
+	}
+	public String getFReference() {
+		return node.getDomain().getFReferenceName();
+	}
+	
+	public String getFName() {
+//		String full_name = node.getDomain().getFName();
+//		String fname = full_name.substring(full_name.lastIndexOf('@')+1, full_name.length());
+		return node.getDomain().getFName() ;
+	}
+	
+	public Object getValue() {
+		return nodeValue;
+	}
+	public void setValue(Object category) {
+		this.nodeValue = category;
+		
+	}
+	
+	public TreeNode getNode() {
+		return node;
+	}
+	
+	@Override
+	public int hashCode() {
+		String hash = stringCode();
+		return hash.hashCode();
+		
+	}
+	
+	public String stringCode() {
+		return node.getDomain().getObjKlass().getName()+"." + node.getDomain().getFName()+"."+nodeValue;
+	}
+	
+	public String toString() {
+		
+		String fName = this.getFName();//object class name
+		Class<?> node_obj = node.getDomain().getObjKlass();
+		
+		String value;
+		if (node.getDomain().getFType() == String.class)
+			value = "\""+nodeValue+ "\""; 
+		else
+			value = nodeValue + "";
+		
+		if (node.getDomain().isCategorical())
+			return fName + " == "+ value; 
+		else {
+			
+			int size = node.getDomain().getCategoryCount()-1;
+			//System.out.println("How many guys there of "+node.getDomain().getName() +" and the value "+nodeValue+" : "+size);
+			
+			int idx = size;
+			if (nodeValue instanceof Number) {
+				for (; idx>=0; idx--) {
+					Object categoryValue = node.getDomain().getCategory(idx);
+					if (nodeValue instanceof Comparable && categoryValue instanceof Comparable) {
+						// TODO ask this to daniel???
+//						if (Util.DEBUG_RULE_PRINTER) {
+//							System.out.println("NodeValue:"+ nodeValue+ " c-"+nodeValue.getClass() +" & category:"+ categoryValue+ " c-"+categoryValue.getClass());
+//						}
+						if ( AttributeValueComparator.instance.compare(nodeValue, categoryValue) == 0 ) {
+							break;
+						}
+					} else {
+						System.out.println("Fuck not comparable NodeValue:"+ nodeValue+ " c-"+nodeValue.getClass() +" & category:"+ categoryValue+ " c-"+categoryValue.getClass());
+						System.exit(0);
+					}
+
+				}
+			} else {
+				/* TODO implement the String setting */
+				System.out.println("Fuck not number:"+ nodeValue+ " c-"+nodeValue.getClass());
+				System.exit(0);
+
+			}
+			
+			if (idx == 0)
+				return fName + " <= "+ value;
+			else if (idx == size)
+				// if the category is the last one that the rule is domain.name > category(last-1)
+				return fName+ " > "+ node.getDomain().getCategory(size-1);
+			else {
+				//return node.getDomain().getCategory(idx) + " < " + fName+ " <= "+ node.getDomain().getCategory(idx+1);
+				// Why drools does not support category(idx) < domain.name <= category(idx+1)
+				//flog.debug("value "+ value + "=====?????"+   node.getDomain().getCategory(idx+1));
+				
+				return fName+ " <= "+ value; // node.getDomain().getCategory(idx+1);
+			}
+		}
+	}
+	
+}
\ No newline at end of file


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/NodeValue.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Path.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Path.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Path.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,160 @@
+package org.drools.learner;
+
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.Iterator;
+
+public class Path {
+	
+	private int code;
+	private Class<?> attr_obj;	// object class name
+	private ArrayList<NodeValue> conditions;
+	
+	private NodeValue action;
+/* 	action nodeValue has the information of 	
+	private double rank;				 // matching ratio
+	private double num_classified_instances;// number of instances matching that rule
+	private double info_mea;
+	*/
+	private int treeId; 				// id of the tree that the path belongs 
+	
+//	private int id;						 // unique id, need a unique name in the drl file
+//	
+	
+	public Path(int numCond) {
+		conditions = new ArrayList<NodeValue>(numCond);
+		code = 0;
+	}
+
+	
+	public void addStep(NodeValue current) {
+		NodeValue nv = new NodeValue(current.getNode());
+		nv.setValue(current.getValue());
+		updateHashCode(nv);
+		conditions.add(nv);
+	}
+	
+	public void setStats(NodeValue current) {
+		action = new NodeValue(current.getNode());
+		action.setValue(current.getValue());
+		
+		updateHashCode(action);
+		//this.setNumClassifiedInstances(((LeafNode)current.getNode()).getNumClassification()); // only the leaf node case
+	}
+	
+	public Iterator<NodeValue> getConditionIterator() {
+		return conditions.iterator();
+	}
+	
+	public NodeValue getAction() {
+		return action;
+	}
+	
+	public void updateHashCode(NodeValue nv) {
+		code = code + nv.hashCode() << 6;
+	}
+	public void setObjectClass(Class<?> obj) {
+		attr_obj= obj;
+	}
+	public String getObjectClassName() {
+		return attr_obj.getSimpleName();
+	}
+	
+	public int getTreeId() {
+		return treeId;
+	}
+	
+	public void setTreeId(int id) {
+		treeId = id;
+	}
+//	private int getId() {
+//		return id;
+//	}
+//	
+//	public void setId(int id) {
+//		this.id= id;
+//	}
+	
+//	private void setNumClassifiedInstances(double dataSize) {
+//		this.num_classified_instances = dataSize;	
+//	}
+	public double getNumClassified() {
+		return ((LeafNode)this.action.getNode()).getNumMatch();	
+	}
+
+//	public void setRank(double r) {
+//		this.rank = r;
+//	}
+	public double getRank() {
+		return ((LeafNode)this.action.getNode()).getRank(); //this.rank;
+	}
+	
+	public double getInfoMea() {
+		return ((LeafNode)this.action.getNode()).getInfoMea();
+	}
+	
+	public static Comparator<Path> getPathRankComparator() {
+		return new PathComparator();
+	}
+	
+	private static class PathComparator implements Comparator<Path>{
+		// this will sort from best rank to least rank
+		public int compare(Path r1, Path r2) {
+			if (r1.getRank() < r2.getRank())
+				return 1; // normally -1
+			else if (r1.getRank() > r2.getRank())
+				return -1; // normally 1
+			else
+				return 0;
+		}	
+	}
+/* 	WHAT TODO ???	
+	public static Comparator<Path> getInfoComparator() {
+		return new PathInfoComparator();
+	}
+	
+	private static class PathInfoComparator implements Comparator<Path>{
+		// this will sort from best rank to least rank
+		public int compare(Path p1, Path p2) {
+//			COMPLEXITY++;
+//			if (n1.hashCode() == n2.hashCode())
+//				return 0;
+			double p1_mea = p1.getInfoMea();
+			double p2_mea = p2.getInfoMea();
+//			switch (INFO_MEA) {
+//			case 4:	/* 4 - ranked gain ration/
+//				p1_mea = p1.getRank()*p1_mea;
+//				p2_mea = p2.getRank()*p2_mea;
+//				break;
+//			}
+			
+			//if a node with the same domain exist at the same depth
+			//COMPLEXITY++;
+			if (p1_mea < p2_mea)
+				return 1;	// inverted=>must be -1
+			//COMPLEXITY++;
+			if (p1_mea > p2_mea)
+				return -1;	// inverted=>must be 1
+			//COMPLEXITY++;	//else {
+			return 0;
+		}	
+	}
+*/
+	@Override
+	public int hashCode() {
+		return code;
+	}
+
+	public String toString() {
+		StringBuffer out_bf = new StringBuffer();
+		
+		for (NodeValue c:conditions) {
+			//out_bf.append(c.stringCode() +" - ");
+			out_bf.append(c +", ");
+		}
+		//out_bf.append(" => "+action.stringCode());
+		out_bf.append(" => "+action);
+		return out_bf.toString();
+		
+	}
+}
\ No newline at end of file


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Path.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/QuantitativeDomain.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/QuantitativeDomain.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/QuantitativeDomain.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,106 @@
+package org.drools.learner;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+
+import org.drools.learner.eval.SplitPoint;
+
+public class QuantitativeDomain extends Domain{
+	
+	public static QuantitativeDomain createFromDomain(Domain father) {
+		QuantitativeDomain quantitative = new QuantitativeDomain(father.getObjKlass(), father.getFName(), father.getFType());
+		//quantitative.setCategories(father.getCategories());
+		
+		return quantitative;
+	}
+	
+	public QuantitativeDomain cheapClone() {
+		QuantitativeDomain qdom = new QuantitativeDomain(super.getObjKlass(), super.getFName(), super.getFType());
+		if (super.isCategorical()) {
+			System.out.println("QuantitativeDomain.cheapClone() fuck categorical how come QuantitativeDomain cloned " );
+			System.exit(0);
+		}
+		qdom.setCategorical(super.isCategorical());
+
+		//for (int i = 0; i<super.getCategoryCount(); i++)
+		qdom.fCategories = this.fCategories;
+		qdom.splits = this.splits;
+		
+		return qdom;
+	}
+	
+
+	private ArrayList<SplitPoint> splits;
+	
+	private QuantitativeDomain(Class<?> _obj_klass, String _fname, Class<?> _ftype) {
+		super(_obj_klass, _fname, _ftype);
+		super.setCategorical(false);	 // by deafault it is true, must set it to false
+		this.splits = new ArrayList<SplitPoint>();
+		
+
+	}
+	public void setFName(String fname) {
+		super.setFName(fname);
+	}
+
+	
+	public boolean isCategorical() {
+		return false;
+	}
+	
+//	public int getIndex(int index) {
+//		return splits.get(index).getIndex();
+//	}
+	public SplitPoint getSplit(int index) {
+		return splits.get(index);
+	}
+
+	public int getNumIndices() {
+		return splits.size();
+	}
+	
+	public boolean addSplitPoint(SplitPoint pair) { //int index, Number value) {
+		
+		int insertion_point = Collections.binarySearch(this.splits, pair, getSplitComparator());
+		if (insertion_point >= 0) {
+			return false;	/* the pair exists in the list and the return is index of the search key*/
+		} else {			/* (-(insertion point) - 1)
+							* 	the point at which the key would be inserted into the list
+							* 	the index of the first element greater than the key, or list.size()
+							*/
+			int unfound_insertion_point = -(insertion_point) -1;
+			this.splits.add(unfound_insertion_point, pair);
+			super.fCategories.add(unfound_insertion_point, pair.getValue());
+			return true;
+		}
+		/* otherwise *
+		if (!this.containsIndex(index)) {
+			super.splits.add(pair);
+		}
+		Collections.sort(super.fCategories, nComparator); */
+	}
+	
+	public boolean containsIndex(int value) {
+		for (Object op: super.fCategories) {
+			SplitPoint sp = (SplitPoint) op;
+			if (sp.getIndex() == value)
+				return true;
+			
+		}
+		return false;
+
+	}
+	
+	public static Comparator<SplitPoint> getSplitComparator() {
+		return new SplitComparator();
+	}
+	
+	private static class SplitComparator implements Comparator<SplitPoint>{
+		public int compare(SplitPoint sp1, SplitPoint sp2) {
+			return sp1.getIndex() - sp2.getIndex();
+			
+		}	
+	}
+
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/QuantitativeDomain.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Schema.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Schema.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Schema.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,126 @@
+package org.drools.learner;
+
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Hashtable;
+import java.util.Set;
+
+import org.drools.learner.builder.Learner.DataType;
+import org.drools.learner.builder.Learner.DomainAlgo;
+import org.drools.learner.tools.ClassStructure;
+import org.drools.learner.tools.ClassVisitor;
+import org.drools.learner.tools.FeatureNotSupported;
+import org.drools.spi.ReadAccessor;
+
+public class Schema {
+	
+	public static Schema createSchemaStructure(Class<?> clazz, DomainAlgo domain_type, DataType data_type) throws Exception {
+		Schema schema = new Schema(clazz);
+		//ŒClassFieldExtractorCache cache = ClassFieldExtractorCache.getInstance();
+
+		// schema is modified
+		ClassVisitor visitor = new ClassVisitor(schema, domain_type, data_type);
+		visitor.visit();
+		
+		
+		/* TODO insanity checks:
+		 * 1- the annotations are not given
+		 * 2- there is no target specified
+		 * 3- more than one target is specified
+		 */	
+		if (!visitor.isTargetFound()) {
+			throw new Exception("Target Not Found, please annotate the target field");
+		} else if (schema.getTargets().size()>1) {
+			//System.out.println("More ");
+			throw new FeatureNotSupported("More than one target specified, feature not supported yet ");
+		}
+		return schema;
+	}
+	// the owner class of the schema
+	private Class<?> klass;
+	
+	// the structure of the owner class
+	private HashMap<Class<?>,ClassStructure> klassStructure;
+	
+	// key: Object_class_name at field_name
+	private HashMap<String, ReadAccessor> extractorMap;
+
+	// key: Object_class_name at field_name
+	private HashMap<String, Domain> domainMap;
+	
+	// key: Object_class_name at field_name
+	private HashMap<String, ArrayList<Field>> attrRelationMap;
+	
+
+	private HashSet<String> targets;
+	
+	public Schema(Class<?> _klass) {
+		this.klass = _klass;
+		
+		this.klassStructure = new HashMap<Class<?>,ClassStructure>();
+		this.extractorMap = new HashMap<String, ReadAccessor>();
+		this.domainMap = new HashMap<String, Domain>();
+		this.attrRelationMap = new HashMap<String, ArrayList<Field>>();
+		this.targets = new HashSet<String>();
+	}
+	
+	public Class<?> getObjectClass() {
+		return klass;
+	}
+	
+	public HashMap<Class<?>,ClassStructure> getClassStructure() {
+		return klassStructure;
+	}
+	public void putStructure(Class<?> clazz, ClassStructure structure) {
+		klassStructure.put(clazz, structure);;
+	}
+	
+	public void addParentField(String attr_name, Field klass) {
+		if (!this.attrRelationMap.containsKey(attr_name)) {
+			this.attrRelationMap.put(attr_name, new ArrayList<Field>());
+		}
+		this.attrRelationMap.get(attr_name).add(klass);
+	}
+	
+	public HashMap<String, ArrayList<Field>> getAttrRelationMap() {
+		return attrRelationMap;
+	}
+	
+	
+	public boolean addTarget(String _target) {
+		return targets.add(_target);
+	}
+	
+	public void clearTargets() {
+		targets.clear();
+	}
+	
+	public Set<String> getAttrNames() {
+		return this.domainMap.keySet();
+	}
+	
+	public void putDomain(String attr_name, Domain d) {
+		domainMap.put(attr_name, d);
+	}
+	
+	public Domain getAttrDomain(String attr_name) {
+		return this.domainMap.get(attr_name);
+	}
+	
+	public void putExtractor(String attr_name, ReadAccessor extract) {
+		extractorMap.put(attr_name, extract);
+	}
+	public ReadAccessor getAttrExtractor(String attr_name) {
+		return this.extractorMap.get(attr_name);
+	}
+	
+	public Collection<String> getTargets() {
+		return targets;
+	}
+
+
+
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Schema.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Stats.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Stats.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Stats.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,103 @@
+package org.drools.learner;
+
+import java.io.FileNotFoundException;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.io.Writer;
+import java.util.ArrayList;
+
+public class Stats {
+	
+	public static final int INCORRECT = 0, CORRECT = 1, UNKNOWN = 2;
+	
+	private Class<?> stat_class;
+	private ArrayList<Integer> histogram;
+	
+	private int total_data;
+	
+	public Stats( Class<?> _stat_class) {
+		stat_class = _stat_class;
+		
+		/*
+		 * INCORRECT | CORRECT | UNKNOWN
+		 *   |		 	  |  	    |
+		 *   0       	  1       	2
+		 */
+		histogram = new ArrayList<Integer>(3);
+		for (int i=0; i < 3; i ++) {
+			histogram.add(new Integer(0));
+		}
+		total_data = 0;
+	}
+	public int getResult(int classification) {
+		return histogram.get(classification);
+	}
+
+	public void change(Integer result, int i) {
+		histogram.set(result, Integer.valueOf(histogram.get(result) + i));
+		total_data += i;
+	}
+	
+	public int getTotal() {
+		return total_data;
+	}
+	/*
+	 * fileSignature must contain the folder location
+	 * by default the folder = "src/main/rules/"
+	 */
+	public void print2file(String fileSignature) {
+		
+		//String dataFileName = "src/main/rules/"+_packageNames+"/"+ fileName; 
+		
+		if (!fileSignature.endsWith(".stats"))
+			fileSignature += ".stats";
+		System.out.println("printing stats:"+ fileSignature);
+		
+		try {
+			StatsPrinter.print(this, new FileWriter(fileSignature));
+		} catch (FileNotFoundException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+	
+	public void print2out() {
+		try {
+			StatsPrinter.print(this, new PrintWriter(System.out));
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		
+	}
+	
+	public String print2string() {
+		StringWriter swr = new StringWriter();
+		try {
+			StatsPrinter.print(this, swr);
+			return swr.toString();
+		} catch (IOException e) {
+			e.printStackTrace();
+			return "";
+		}
+	}
+}
+
+class StatsPrinter {
+	//public static void print(Stats mystats, OutputStream os) {
+	public static void print(Stats mystats, Writer wr) throws IOException {
+		//PrintWriter pwr = new PrintWriter(os);
+		
+		// print the statistics of the results to a file	
+		wr.write("TESTING results: incorrect "+ mystats.getResult(Stats.INCORRECT)+"\n");
+		wr.write("TESTING results: correct "+ mystats.getResult(Stats.CORRECT)+"\n");
+		wr.write("TESTING results: unknown "+ mystats.getResult(Stats.UNKNOWN)+"\n");
+		wr.write("TESTING results: Total Number "+ mystats.getTotal());
+		
+		wr.flush();
+	}
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Stats.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/TreeNode.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/TreeNode.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/TreeNode.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,165 @@
+package org.drools.learner;
+
+import java.util.Collection;
+import java.util.Hashtable;
+import java.util.List;
+
+import org.drools.learner.tools.Util;
+
+public class TreeNode {
+	
+	//private static final Logger log = LoggerFactory.getSysOutLogger(TreeNode.class, LogLevel.ERROR);
+	//private static final Logger flog = LoggerFactory.getFileLogger(TreeNode.class);	
+
+	private Domain domain;
+	private TreeNode father;
+	private Hashtable<Object, TreeNode> children;
+	/* TODO explain
+	 * rank:
+	 * gain:
+	 * gainRatio
+	 */
+	private double rank, infoMea;
+	
+	// Number of all instances matching at that node
+	private double num_matching_instances;
+	private Object label;
+	private int label_size;
+	private int leaves;
+	
+	public TreeNode(Domain domain) {
+		this.father = null;
+		this.domain = domain;
+		this.children = new Hashtable<Object, TreeNode>();
+		
+	}
+	
+	public double getRank() {
+		return rank;
+	}
+
+	public void setRank(double _rank) {
+		this.rank = _rank;
+	}
+	
+	public void setNumMatch(double size) {
+		this.num_matching_instances= size;
+	}
+	
+	public double getNumMatch() {
+		return this.num_matching_instances;
+	}
+	
+	public Domain getDomain() {
+		return domain;
+	}
+	
+	public void putNode(Object attributeCategory, TreeNode node) {
+		children.put(attributeCategory, node);
+	}
+	
+	public Collection<Object> getChildrenKeys() {
+		return children.keySet();
+	}
+	
+	public TreeNode getChild(Object attr_key) {
+		return children.get(attr_key);
+	}
+	
+	public double getInfoMea() {
+		return infoMea;
+	}
+	
+	public void setInfoMea(double mea) {
+		this.infoMea = mea;
+	}
+	public Object getLabel() {
+		return label;
+	}
+
+	public void setLabel(Object get_winner_class) {
+		label = get_winner_class;
+	}
+	
+	public void setNumLabeled(int supportersFor) {
+		label_size = supportersFor;
+	}
+	
+	public int getNumLabeled() {
+		return label_size;
+	}
+	
+	public int getNumLeaves() {
+		return leaves;
+	}
+	
+	public void setNumLeaves(int leaves2) {
+		leaves = leaves2;
+	}
+	
+	public void setFather(TreeNode currentNode) {
+		father = currentNode;
+	}
+	public TreeNode getFather() {
+		return father;
+	}
+	public Object voteFor(Instance i) {
+		final Object attr_value = i.getAttrValue(this.domain.getFReferenceName());
+		final Object category = domain.getCategoryOf(attr_value);
+		
+		final TreeNode my_node = this.getChild(category);
+		
+		
+//		flog.debug(new Object() {
+//			public String toString() {
+//				
+//				StringBuffer sb = new StringBuffer(Util.ntimes("$", 5)+"\nDomain:"+domain.getFName()+"->");
+//				for (int idx = 0; idx < domain.getCategoryCount(); idx++) {
+//					sb.append(domain.getCategory(idx)+"-");
+//				}
+//				sb.append(" SEARCHING for = "+ attr_value + " in "+ domain.getFName());
+//				sb.append("\n KEYS:");
+//				for (Object key: getChildrenKeys()) {
+//					sb.append(" "+key +"% "+ getChild(key).getDomain() + " :");
+//				}
+//				return sb.toString();
+//			}
+//		});
+		return my_node.voteFor(i);
+	}
+	
+	public int getMissClassified() {
+		int num_missclassified = 0;
+		for(Object key: this.getChildrenKeys()) {
+			TreeNode child = this.getChild(key);
+			num_missclassified += child.getMissClassified();
+		}
+		return num_missclassified;
+	}
+	
+	public int hashCode() {
+		return domain.hashCode(); // ^ id;//should i add the children
+	}
+	
+	public String toString() {
+		return toString(1, 5, new StringBuffer());
+	}
+	
+	public String toString(int tab, int depth, StringBuffer buf) {
+		//if (depth > 0 && domain != null) {
+		if (domain != null) {
+			buf.append(Util.ntimes("\t", tab));
+			buf.append(Util.ntimes("***",1));
+			buf.append( domain.getFName() + " n.hash:"+this.hashCode()+" match:" +num_matching_instances+" correct:"+label_size+ " \n");
+			for (Object attributeValue : children.keySet()) {
+				buf.append(Util.ntimes("\t", tab + 1));
+				buf.append("+" + attributeValue );
+				buf.append("\n");
+				TreeNode child = children.get(attributeValue);
+				buf.append(child.toString(tab + 1, --depth, new StringBuffer()));
+			}
+		}
+		return buf.toString();
+	}
+
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/TreeNode.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/AdaBoostBuilder.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/AdaBoostBuilder.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/AdaBoostBuilder.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,182 @@
+package org.drools.learner.builder;
+
+import java.util.ArrayList;
+
+import org.drools.learner.DecisionTree;
+import org.drools.learner.InstanceList;
+import org.drools.learner.Memory;
+import org.drools.learner.Stats;
+import org.drools.learner.tools.LoggerFactory;
+import org.drools.learner.tools.SimpleLogger;
+import org.drools.learner.tools.Util;
+
+/*
+ * 
+ */
+public class AdaBoostBuilder implements DecisionTreeBuilder{
+
+	private static SimpleLogger flog = LoggerFactory.getUniqueFileLogger(AdaBoostBuilder.class, SimpleLogger.DEFAULT_LEVEL);
+	private static SimpleLogger slog = LoggerFactory.getSysOutLogger(AdaBoostBuilder.class, SimpleLogger.DEFAULT_LEVEL);
+	
+	private TreeAlgo algorithm = TreeAlgo.BOOST; // default bagging, TODO boosting
+	
+	private static int FOREST_SIZE = 50;
+	private static final double TREE_SIZE_RATIO = 1.0d;
+	private static final boolean WITH_REP = false;
+	
+	private ArrayList<DecisionTree> forest;
+	private ArrayList<Double> classifier_accuracy;
+	
+	private DecisionTreeMerger merger;
+	
+	public AdaBoostBuilder() {
+		//this.trainer = _trainer;
+		merger = new DecisionTreeMerger();
+	}
+	public void build(Memory mem, Learner _trainer) {
+		
+		final InstanceList class_instances = mem.getClassInstances();
+		_trainer.setInputData(class_instances);
+		
+		
+		if (class_instances.getTargets().size()>1 ) {
+			//throw new FeatureNotSupported("There is more than 1 target candidates");
+			if (flog.error() !=null)
+				flog.error().log("There is more than 1 target candidates\n");
+			System.exit(0);
+			// TODO put the feature not supported exception || implement it
+		} else if (_trainer.getTargetDomain().getCategoryCount() >2) {
+			if (flog.error() !=null)
+				flog.error().log("The target domain is not binary!!!\n");
+			System.exit(0);
+		}
+	
+		int N = class_instances.getSize();
+		int NUM_DATA = (int)(TREE_SIZE_RATIO * N);
+		_trainer.setDataSizePerTree(NUM_DATA);
+
+		
+		forest = new ArrayList<DecisionTree> (FOREST_SIZE);
+		classifier_accuracy = new ArrayList<Double>(FOREST_SIZE);
+		// weight for each instance - the higher the weight, the more the instance influences the classifier learned.
+		double [] weights = new double [NUM_DATA];
+		for (int index_i=0; index_i<NUM_DATA; index_i++) {		
+			weights[index_i] = 1.0d/(double)NUM_DATA;
+			class_instances.getInstance(index_i).setWeight(weights[index_i] * (double)NUM_DATA);
+			if (slog.debug() != null)
+				slog.debug().log(index_i+" new weight:"+class_instances.getInstance(index_i).getWeight()+ "\n");
+		}
+		
+		int i = 0;
+//			int[] bag;		
+		while (i++ < FOREST_SIZE ) {
+//			if (WITH_REP)
+//				bag = Util.bag_w_rep(NUM_DATA, N);
+//			else
+//				bag = Util.bag_wo_rep(NUM_DATA, N);	
+			
+			InstanceList working_instances = class_instances; //.getInstances(bag);			
+			DecisionTree dt = _trainer.train_tree(working_instances);
+			dt.setID(i);
+			
+			double error = 0.0, sum_weight = 0.0;
+			SingleTreeTester t= new SingleTreeTester(dt);
+			for (int index_i = 0; index_i < NUM_DATA; index_i++) {
+				Integer result = t.test(class_instances.getInstance(index_i));
+				sum_weight += weights[index_i];
+				if (result == Stats.INCORRECT) {
+					error += weights[index_i];
+					if (slog.debug() != null)
+						slog.debug().log("[e:"+error+" w:"+weights[index_i]+ "] ");
+				}
+			}
+			
+			error = error / sum_weight; // forgotton
+			if (error > 0.0f) {
+				double alpha = Util.ln( (1.0d-error)/error ) / 2.0d;
+				
+				if (error < 0.5d) {
+					// The classification accuracy of the weak classifier
+					classifier_accuracy.add(alpha);
+					
+					double norm_fact= 0.0d;
+					// Boosting the missclassified instances
+					for (int index_i = 0; index_i < NUM_DATA; index_i++) {
+						Integer result = t.test(class_instances.getInstance(index_i));//TODO dont need to test two times
+						switch (result) {
+						case Stats.INCORRECT:
+							weights[index_i] = weights[index_i] * Util.exp(alpha);
+							break;
+						case Stats.CORRECT:	// if it is correct do not update
+							//weights[index_i] = weights[index_i] * Util.exp(-1.0d * alpha);
+							break;
+						case Stats.UNKNOWN:
+							if (slog.error() !=null)
+								slog.error().log("Unknown situation bok\n");
+							System.exit(0);
+							break;
+						}
+						norm_fact += weights[index_i];
+					}
+					// Normalization of the weights
+					for (int index_i = 0; index_i < NUM_DATA; index_i++) {
+						weights[index_i] = weights[index_i] / norm_fact;
+						class_instances.getInstance(index_i).setWeight(weights[index_i] * (double)NUM_DATA);
+					}
+				} else {
+					if (slog.debug() != null)
+						slog.debug().log("The error="+error+" alpha:"+alpha+ "\n");
+					if (slog.error() != null)
+						slog.error().log("error:"+error + " alpha will be negative and the weights of the training samples will be updated in the wrong direction"+"\n");
+					FOREST_SIZE = i-1;//ignore the current tree
+					break;
+				}
+			}
+			
+			
+			else {
+				if (slog.stat() != null) {
+					slog.stat().log("\n Boosting ends: ");
+					slog.stat().log("All instances classified correctly TERMINATE, forest size:"+i+ "\n");
+				}
+				// What to do here??
+				FOREST_SIZE = i;
+				classifier_accuracy.add(10.0); // TODO add a very big number
+				
+				
+			}
+			
+			
+			forest.add(dt);
+			// the DecisionTreeMerger will visit the decision tree and add the paths that have not been seen yet to the list
+			merger.add(dt);	
+
+			if (slog.stat() !=null)
+				slog.stat().stat(".");
+
+		}
+		// TODO how to compute a best tree from the forest
+		DecisionTree best = merger.getBest();
+		if (best == null)
+			best = forest.get(0);
+		
+		_trainer.setBestTree(forest.get(0));
+		//this.c45 = dt;
+	}
+
+	public ArrayList<DecisionTree> getTrees() {
+		return forest;
+	}
+	public ArrayList<Double> getAccuracies() {
+		return classifier_accuracy;
+	}
+	public TreeAlgo getTreeAlgo() {
+		return algorithm; //TreeAlgo.BAG; // default
+	}
+	public void clearForest(int j) {
+		//forest = null;
+		for (int i = forest.size()-1; i >j; i--)
+			forest.remove(i);
+		
+	}
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/AdaBoostBuilder.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/AdaBoostKBuilder.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/AdaBoostKBuilder.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/AdaBoostKBuilder.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,185 @@
+package org.drools.learner.builder;
+
+import java.util.ArrayList;
+
+import org.drools.learner.AttributeValueComparator;
+import org.drools.learner.DecisionTree;
+import org.drools.learner.Instance;
+import org.drools.learner.InstanceList;
+import org.drools.learner.Memory;
+import org.drools.learner.Stats;
+import org.drools.learner.tools.LoggerFactory;
+import org.drools.learner.tools.SimpleLogger;
+import org.drools.learner.tools.Util;
+
+public class AdaBoostKBuilder implements DecisionTreeBuilder{
+
+	private static SimpleLogger flog = LoggerFactory.getUniqueFileLogger(AdaBoostKBuilder.class, SimpleLogger.DEFAULT_LEVEL);
+	private static SimpleLogger slog = LoggerFactory.getSysOutLogger(AdaBoostKBuilder.class, SimpleLogger.DEBUG);
+	
+	private TreeAlgo algorithm = TreeAlgo.BOOST_K; // default bagging, TODO boosting
+	
+	private static int FOREST_SIZE = 10;
+	private static final double TREE_SIZE_RATIO = 0.9;
+	private static final boolean WITH_REP = false;
+	
+	private ArrayList<DecisionTree> forest;
+	private ArrayList<Double> classifier_accuracy;
+	//private Learner trainer;
+	
+	public AdaBoostKBuilder() {
+		//this.trainer = _trainer;
+	}
+	public void build(Memory mem, Learner _trainer) {
+		
+		final InstanceList class_instances = mem.getClassInstances();
+		_trainer.setInputData(class_instances);
+		
+		
+		if (class_instances.getTargets().size()>1 ) {
+			//throw new FeatureNotSupported("There is more than 1 target candidates");
+			if (flog.error() !=null)
+				flog.error().log("There is more than 1 target candidates");
+			System.exit(0);
+			// TODO put the feature not supported exception || implement it
+		} else if (_trainer.getTargetDomain().getCategoryCount() <=2) {
+			if (flog.warn() !=null)
+				flog.warn().log("The target domain is binary!!! Do u really need that one");
+		}
+	
+		int N = class_instances.getSize();
+		int K = _trainer.getTargetDomain().getCategoryCount();
+		int M = (int)(TREE_SIZE_RATIO * N);
+		_trainer.setDataSizePerTree(M);
+
+		
+		forest = new ArrayList<DecisionTree> (FOREST_SIZE);
+		classifier_accuracy = new ArrayList<Double>(FOREST_SIZE);
+		//Initialize the weight wij  (i = 1,...,m (number of instances) and j = 1,...,K (number of classes))
+		double[][] weight = new double[M][K];
+		for (int index_i=0; index_i<M; index_i++) {
+			for (int index_j=0; index_j<K; index_j++) {
+				Instance inst_i = class_instances.getInstance(index_i);
+				
+				
+				Object instance_target = inst_i.getAttrValue(_trainer.getTargetDomain().getFReferenceName());
+				Object instance_target_category = _trainer.getTargetDomain().getCategoryOf(instance_target);
+				Object target_category= _trainer.getTargetDomain().getCategory(index_j);
+				
+				if (AttributeValueComparator.instance.compare(instance_target_category, target_category) == 0) {
+					//if y_i == u_j => the instance i is in class n.
+					weight[index_i][index_j]= 0;
+				} else {
+					// mistake
+					weight[index_i][index_j]= 1;
+				} 
+				
+			}
+		}
+		
+		int i = 0;
+		int[] bag;		
+		while (i++ < FOREST_SIZE ) {
+			// a.  Normalize wij
+			if (WITH_REP)
+				bag = Util.bag_w_rep(M, N);
+			else
+				bag = Util.bag_wo_rep(M, N);
+			
+
+			// b. Train h_t(x) by minimizing loss function
+			
+			InstanceList working_instances = class_instances.getInstances(bag);			
+			DecisionTree dt = _trainer.train_tree(working_instances);
+			dt.setID(i);
+			
+			double error = 0.0;
+			SingleTreeTester t= new SingleTreeTester(dt);
+			for (int index_i = 0; index_i < M; index_i++) {
+				Integer result = t.test(class_instances.getInstance(index_i));
+				if (result == Stats.INCORRECT) {
+				
+					//error += distribution.get(index_i);
+				}
+			}
+			
+			if (error > 0.0f) {
+				double alpha = Util.ln( (1.0d-error)/error ) / 2.0d;
+				
+				if (error < 0.5d) {
+					// The classification accuracy of the weak classifier
+					classifier_accuracy.add(alpha);
+					
+					double norm_fact= 0.0d;
+					// Update the weight matrix wij:
+					for (int index_i = 0; index_i < M; index_i++) {
+						Integer result = t.test(class_instances.getInstance(index_i));//TODO dont need to test two times
+						switch (result) {
+						case Stats.INCORRECT:
+							//distribution.set(index_i, distribution.get(index_i) * Util.exp(alpha));
+							break;
+						case Stats.CORRECT:
+							//distribution.set(index_i, distribution.get(index_i) * Util.exp(-1.0d * alpha));
+							break;
+						case Stats.UNKNOWN:
+							if (slog.error() !=null)
+								slog.error().log("Unknown situation bok");
+							System.exit(0);
+							break;
+						}
+						//norm_fact += distribution.get(index_i);
+					}
+					// Normalization of the weights
+					for (int index_i = 0; index_i < M; index_i++) {
+						//distribution.set(index_i, distribution.get(index_i) / norm_fact);
+					}
+				} else {
+					if (slog.debug() != null)
+						slog.debug().log("The error="+error+" alpha:"+alpha+ "\n");
+					if (slog.error() != null)
+						slog.error().log("error:"+error + " alpha will be negative and the weights of the training samples will be updated in the wrong direction"+"\n");
+					FOREST_SIZE = i-1;//ignore the current tree
+					break;
+				}
+			}
+			
+			
+			else {
+				if (slog.stat() != null)
+					slog.stat().log("All instances classified correctly TERMINATE, forest size:"+i+ "\n");
+				// What to do here??
+				FOREST_SIZE = i;
+				classifier_accuracy.add(10.0); // TODO add a very big number
+				
+				
+			}
+			
+			
+			forest.add(dt);
+
+			if (slog.stat() !=null)
+				slog.stat().stat(".");
+
+		}
+		// TODO how to compute a best tree from the forest
+		_trainer.setBestTree(forest.get(0));
+		
+		//this.c45 = dt;
+	}
+
+	public ArrayList<DecisionTree> getTrees() {
+		return forest;
+	}
+	public ArrayList<Double> getAccuracies() {
+		return classifier_accuracy;
+	}
+	public TreeAlgo getTreeAlgo() {
+		return algorithm; //TreeAlgo.BAG; // default
+	}
+	public void clearForest(int j) {
+		//forest = null;
+		for (int i = forest.size()-1; i >j; i--)
+			forest.remove(i);
+		
+	}
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/AdaBoostKBuilder.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/BoostedTester.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/BoostedTester.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/BoostedTester.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,92 @@
+package org.drools.learner.builder;
+
+import java.util.ArrayList;
+
+import org.drools.learner.DecisionTree;
+import org.drools.learner.Domain;
+import org.drools.learner.Instance;
+import org.drools.learner.InstanceList;
+import org.drools.learner.Stats;
+import org.drools.learner.eval.ClassDistribution;
+import org.drools.learner.tools.LoggerFactory;
+import org.drools.learner.tools.SimpleLogger;
+import org.drools.learner.tools.Util;
+
+public class BoostedTester extends Tester{
+	
+	private static SimpleLogger flog = LoggerFactory.getUniqueFileLogger(BoostedTester.class, SimpleLogger.DEFAULT_LEVEL);
+	private static SimpleLogger slog = LoggerFactory.getSysOutLogger(BoostedTester.class, SimpleLogger.DEFAULT_LEVEL);
+	
+	private ArrayList<DecisionTree> trees;
+	private ArrayList<Double> accuracy;
+	private Domain targetDomain;
+	
+	public BoostedTester(ArrayList<DecisionTree> forest, ArrayList<Double> _accuracy) {
+		trees = forest;
+		accuracy = _accuracy;
+		targetDomain = forest.get(0).getTargetDomain();
+	}
+	
+	public Stats test(InstanceList data) {
+
+		Stats evaluation = new Stats(data.getSchema().getObjectClass()) ; //represent.getObjClass());
+		
+		int i = 0;
+		for (Instance instance : data.getInstances()) {
+			Object forest_decision = this.voteOn(instance);
+			Integer result = evaluate(targetDomain, instance, forest_decision);
+			
+			//flog.debug(Util.ntimes("#\n", 1)+i+ " <START> TEST: instant="+ instance + " = target "+ result);			
+			if (i%1000 ==0 && slog.stat() != null)
+					slog.stat().stat("."); 
+
+			evaluation.change(result, 1);
+			i ++;
+		}	
+		return evaluation;
+		
+		//printStats(evaluation, executionSignature);
+	}
+	
+	public Object voteOn(Instance i) {
+		ClassDistribution classification = new ClassDistribution(targetDomain);
+
+		for (int j = 0; j< trees.size() ; j ++) {
+			Object vote = trees.get(j).vote(i);
+			if (vote != null) {
+				classification.change(vote, accuracy.get(j));
+				//classification.change(Util.sum(), accuracy.get(j));
+			} else {
+				// TODO add an unknown value
+				//classification.change(-1, 1);
+				if (flog.error() !=null)
+					flog.error().log(Util.ntimes("\n", 10)+"Unknown situation at tree: " + j + " for fact "+ i);
+				System.exit(0);
+			}
+			if (slog.debug() != null)
+				slog.debug().log("Vote "+accuracy.get(j)+" for "+vote + "\n");
+		}
+		classification.evaluateMajority();
+		Object winner = classification.get_winner_class();
+		if (slog.debug() != null)
+			slog.debug().log("Winner = "+winner + "\n");
+		
+		double ratio = 0.0;
+		if (classification.get_num_ideas() == 1) {
+			//100 %
+			ratio = 1.0d;
+			return winner;
+		} else {
+			double num_votes = classification.getVoteFor(winner);
+			ratio = (num_votes/(double) trees.size());
+			// TODO if the ratio is smaller than some number => reject
+		}
+		return winner;
+		
+	}
+	
+	public void printStats(final Stats evaluation, String executionSignature) {
+		super.printStats(evaluation, executionSignature);
+	}
+
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/BoostedTester.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/C45Learner.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/C45Learner.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/C45Learner.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,134 @@
+package org.drools.learner.builder;
+
+import java.util.Hashtable;
+import java.util.List;
+
+import org.drools.learner.DecisionTree;
+import org.drools.learner.Domain;
+import org.drools.learner.LeafNode;
+import org.drools.learner.TreeNode;
+import org.drools.learner.eval.AttributeChooser;
+import org.drools.learner.eval.Heuristic;
+import org.drools.learner.eval.InformationContainer;
+import org.drools.learner.eval.InstDistribution;
+import org.drools.learner.tools.FeatureNotSupported;
+import org.drools.learner.tools.Util;
+
+public class C45Learner extends Learner{
+	
+	private AttributeChooser chooser;
+	
+	public C45Learner(Heuristic hf) {
+		super();
+		super.setDomainAlgo(DomainAlgo.QUANTITATIVE);
+		chooser = new AttributeChooser(hf);
+	}
+	
+	
+	protected TreeNode train(DecisionTree dt, InstDistribution data_stats) {//List<Instance> data) {
+		
+		if (data_stats.getSum() == 0) {
+			throw new RuntimeException("Nothing to classify, factlist is empty");
+		}
+		
+		/* let's get the statistics of the results */
+		//InstDistribution stats_by_class = new InstDistribution(dt.getTargetDomain());///* the target domain*/);
+		data_stats.evaluateMajority();
+		
+		
+		/* if all elements are classified to the same value */
+		if (data_stats.get_num_ideas(/* number of supported target categories*/) == 1) {
+
+			LeafNode classifiedNode = new LeafNode(dt.getTargetDomain()				/* target domain*/, 
+												   data_stats.get_winner_class() 	/*winner target category*/);
+			classifiedNode.setRank(	(double)data_stats.getSum()/
+									(double)this.getDataSize()/* total size of data fed to dt*/);
+			classifiedNode.setNumMatch(data_stats.getSum());						//num of matching instances to the leaf node
+			classifiedNode.setNumClassification(data_stats.getSum());				//num of classified instances at the leaf node
+			
+			//classifiedNode.setInfoMea(mea)
+			return classifiedNode;
+		}
+		
+		List<Domain> attribute_domains = dt.getAttrDomains();
+		/* if  there is no attribute left in order to continue */
+		if (attribute_domains.size() == 0) {
+			/* an heuristic of the leaf classification*/
+			Object winner = data_stats.get_winner_class();								/*winner target category*/
+			LeafNode noAttributeLeftNode = new LeafNode(dt.getTargetDomain()			/* target domain*/, 
+														winner);
+			noAttributeLeftNode.setRank((double)data_stats.getVoteFor(winner)/
+										(double)this.getDataSize()						/* total size of data fed to dt*/);
+			noAttributeLeftNode.setNumMatch(data_stats.getSum());						//num of matching instances to the leaf node
+			noAttributeLeftNode.setNumClassification(data_stats.getVoteFor(winner));	//num of classified instances at the leaf node
+			//noAttributeLeftNode.setInfoMea(best_attr_eval.attribute_eval);
+			
+			
+			/* we need to know how many guys cannot be classified and who these guys are */
+			data_stats.missClassifiedInstances(missclassified_data);
+			dt.setTrainingError((int) (dt.getTrainingError() + data_stats.getSum()));
+			return noAttributeLeftNode;
+		}
+		
+	
+		InformationContainer best_attr_eval = new InformationContainer();
+		
+		/* choosing the best attribute in order to branch at the current node*/
+		chooser.chooseAttribute(best_attr_eval, data_stats, attribute_domains);
+		Domain node_domain = best_attr_eval.domain;
+		
+		if (slog.debug() != null)
+			slog.debug().log("\n"+Util.ntimes("*", 20)+" 1st best attr: "+ node_domain);
+
+		TreeNode currentNode = new TreeNode(node_domain);
+		currentNode.setNumMatch(data_stats.getSum());									//num of matching instances to the leaf node
+		currentNode.setRank((double)data_stats.getSum()/
+							(double)this.getDataSize()									/* total size of data fed to dt*/);
+		currentNode.setInfoMea(best_attr_eval.attribute_eval);
+		//what the highest represented class is and what proportion of items at that node actually are that class
+		currentNode.setLabel(data_stats.get_winner_class());
+		currentNode.setNumLabeled(data_stats.getSupportersFor(data_stats.get_winner_class()).size());
+
+		Hashtable<Object, InstDistribution> filtered_stats = null;
+		try {
+			filtered_stats = data_stats.split(best_attr_eval);
+		} catch (FeatureNotSupported e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}// node_domain);
+		
+		dt.FACTS_READ += data_stats.getSum();
+		
+		for (int c = 0; c<node_domain.getCategoryCount(); c++) {
+			/* split the last two class at the same time */
+			Object category = node_domain.getCategory(c);
+			if (slog.debug() != null)
+				slog.debug().log("{"+ node_domain +":"+category+ "}"+(c==node_domain.getCategoryCount()-1?"\n":""));
+			
+			/* list of domains except the choosen one (&target domain)*/
+			DecisionTree child_dt = new DecisionTree(dt, node_domain);	
+			
+			if (filtered_stats == null || filtered_stats.get(category) == null || filtered_stats.get(category).getSum() ==0) {
+				/* majority !!!! */
+				LeafNode majorityNode = new LeafNode(dt.getTargetDomain(), data_stats.get_winner_class());
+				majorityNode.setRank(-1.0);		//it does not classify any instance
+				majorityNode.setNumMatch(0);
+				majorityNode.setNumClassification(0);
+				//currentNode.setInfoMea(best_attr_eval.attribute_eval);
+				//dt.setTrainingError((int) (dt.getTrainingError() + data_stats.getSum()));
+				
+				majorityNode.setFather(currentNode);
+				currentNode.putNode(category, majorityNode);
+			} else {
+				TreeNode newNode = train(child_dt, filtered_stats.get(category));//, attributeNames_copy
+				newNode.setFather(currentNode);
+				currentNode.putNode(category, newNode);
+			}
+		}
+
+		return currentNode;
+		
+	}
+	
+
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/C45Learner.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/DecisionTreeBuilder.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/DecisionTreeBuilder.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/DecisionTreeBuilder.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,17 @@
+package org.drools.learner.builder;
+
+
+import org.drools.learner.Memory;
+
+public interface DecisionTreeBuilder {
+	
+	//public static final int SINGLE = 1, BAG = 2, BOOST = 3;
+	public static enum TreeAlgo { SINGLE, BAG, BOOST, BOOST_K }
+	
+	void build(Memory wm, Learner trainer);
+	
+//	public Learner getLearner();
+	
+	public TreeAlgo getTreeAlgo();
+	
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/DecisionTreeBuilder.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/DecisionTreeFactory.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/DecisionTreeFactory.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/DecisionTreeFactory.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,252 @@
+package org.drools.learner.builder;
+
+import org.drools.WorkingMemory;
+import org.drools.learner.DecisionTree;
+import org.drools.learner.DecisionTreePruner;
+import org.drools.learner.Memory;
+import org.drools.learner.builder.Learner.DataType;
+import org.drools.learner.builder.Learner.DomainAlgo;
+import org.drools.learner.builder.DecisionTreeBuilder.TreeAlgo;
+import org.drools.learner.eval.CrossValidation;
+import org.drools.learner.eval.Entropy;
+import org.drools.learner.eval.GainRatio;
+import org.drools.learner.eval.Heuristic;
+import org.drools.learner.tools.FeatureNotSupported;
+import org.drools.learner.tools.Util;
+
+
+// uses the static functions from the deprecated class DecisionTreeFactory
+public class DecisionTreeFactory {
+	
+	public static DecisionTree createSingleID3E(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+		return createSingleID3(wm, obj_class, new Entropy());
+	}
+	
+	public static DecisionTree createSingleID3G(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+		return createSingleID3(wm, obj_class, new GainRatio());
+	}
+	
+	protected static DecisionTree createSingleID3(WorkingMemory wm, Class<? extends Object> obj_class, Heuristic h) throws FeatureNotSupported {	
+		/*
+		 * Quesitons:
+		 * 1- which class to work with? : obj_class
+		 * 2- what is its target attribute?
+		 * 3- what are the objects
+		 */ 
+		DataType data = Learner.DEFAULT_DATA;
+		ID3Learner learner = new ID3Learner(h);
+		SingleTreeBuilder single_builder = new SingleTreeBuilder();
+		
+//		String algo_suffices = org.drools.learner.deprecated.DecisionTreeFactory.getAlgoSuffices(learner.getDomainAlgo(), single_builder.getTreeAlgo());
+//		String executionSignature = org.drools.learner.deprecated.DecisionTreeFactory.getSignature(obj_class, "", algo_suffices);
+		String algo_suffices = DecisionTreeFactory.getAlgoSuffices(learner.getDomainAlgo(), single_builder.getTreeAlgo());
+		String executionSignature = DecisionTreeFactory.getSignature(obj_class, "", algo_suffices);
+		
+		/* create the memory */
+		Memory mem = Memory.createFromWorkingMemory(wm, obj_class, learner.getDomainAlgo(), data);
+		single_builder.build(mem, learner);//obj_class, target_attr, working_attr
+		
+		SingleTreeTester tester = new SingleTreeTester(learner.getTree());
+		tester.printStats(tester.test(mem.getClassInstances()), Util.DRL_DIRECTORY + executionSignature);
+		//Tester.test(c45, mem.getClassInstances());
+		
+		learner.getTree().setSignature(executionSignature);
+		return learner.getTree();
+	}
+	public static DecisionTree createSingleC45E(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+		return createSingleC45(wm, obj_class, new Entropy());
+	}
+	
+	public static DecisionTree createSingleC45G(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+		return createSingleC45(wm, obj_class, new GainRatio());
+	}
+	
+	protected static DecisionTree createSingleC45(WorkingMemory wm, Class<? extends Object> obj_class, Heuristic h) throws FeatureNotSupported {
+		DataType data = Learner.DEFAULT_DATA;
+		C45Learner learner = new C45Learner(h);
+		
+		SingleTreeBuilder single_builder = new SingleTreeBuilder();
+		
+//		String algo_suffices = org.drools.learner.deprecated.DecisionTreeFactory.getAlgoSuffices(learner.getDomainAlgo(), single_builder.getTreeAlgo());
+//		String executionSignature = org.drools.learner.deprecated.DecisionTreeFactory.getSignature(obj_class, "", algo_suffices);
+		String algo_suffices = DecisionTreeFactory.getAlgoSuffices(learner.getDomainAlgo(), single_builder.getTreeAlgo());
+		String executionSignature = DecisionTreeFactory.getSignature(obj_class, "", algo_suffices);
+		
+		/* create the memory */
+		Memory mem = Memory.createFromWorkingMemory(wm, obj_class, learner.getDomainAlgo(), data);
+		single_builder.build(mem, learner);//obj_class, target_attr, working_attr
+		
+		SingleTreeTester tester = new SingleTreeTester(learner.getTree());
+		tester.printStats(tester.test(mem.getClassInstances()), Util.DRL_DIRECTORY + executionSignature);
+		//Tester.test(c45, mem.getClassInstances());
+		
+		learner.getTree().setSignature(executionSignature);
+		return learner.getTree();
+	}
+	
+	public static DecisionTree createBagC45E(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+		return createBagC45( wm,obj_class, new Entropy());
+	}
+	public static DecisionTree createBagC45G(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+		return createBagC45( wm,obj_class, new GainRatio());
+	}
+	
+	protected static DecisionTree createBagC45(WorkingMemory wm, Class<? extends Object> obj_class, Heuristic h) throws FeatureNotSupported {
+		DataType data = Learner.DEFAULT_DATA;
+		C45Learner learner = new C45Learner(h);	
+		ForestBuilder forest = new ForestBuilder();
+		
+//		String algo_suffices = org.drools.learner.deprecated.DecisionTreeFactory.getAlgoSuffices(learner.getDomainAlgo(), forest.getTreeAlgo());
+//		String executionSignature = org.drools.learner.deprecated.DecisionTreeFactory.getSignature(obj_class, "", algo_suffices);
+		String algo_suffices = DecisionTreeFactory.getAlgoSuffices(learner.getDomainAlgo(), forest.getTreeAlgo());
+		String executionSignature = DecisionTreeFactory.getSignature(obj_class, "", algo_suffices);
+		
+		/* create the memory */
+		Memory mem = Memory.createFromWorkingMemory(wm, obj_class, learner.getDomainAlgo(), data);
+		forest.build(mem, learner);
+		//forest.clearForest(10);
+
+		ForestTester tester = new ForestTester(forest.getTrees());
+		tester.printStats(tester.test(mem.getClassInstances()), Util.DRL_DIRECTORY + executionSignature);
+		//forest.test(mem.getClassInstances(), Util.DRL_DIRECTORY+executionSignature);
+		
+		//Tester bla => test(c45, mem.getClassInstances());
+		learner.getTree().setSignature(executionSignature);
+		return learner.getTree();
+	}
+	
+	public static DecisionTree createBoostedC45E(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+		return createBoostedC45(wm, obj_class, new Entropy());
+	}
+	public static DecisionTree createBoostedC45G(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+		return createBoostedC45(wm, obj_class, new GainRatio());
+	}
+	
+	public static DecisionTree createBoostedC45(WorkingMemory wm, Class<? extends Object> obj_class, Heuristic h) throws FeatureNotSupported {
+		DataType data = Learner.DEFAULT_DATA;
+
+		C45Learner learner = new C45Learner(h);		
+		AdaBoostBuilder forest = new AdaBoostBuilder();
+		
+//		String algo_suffices = org.drools.learner.deprecated.DecisionTreeFactory.getAlgoSuffices(learner.getDomainAlgo(), forest.getTreeAlgo());
+//		String executionSignature = org.drools.learner.deprecated.DecisionTreeFactory.getSignature(obj_class, "", algo_suffices);
+		String algo_suffices = DecisionTreeFactory.getAlgoSuffices(learner.getDomainAlgo(), forest.getTreeAlgo());
+		String executionSignature = DecisionTreeFactory.getSignature(obj_class, "", algo_suffices);
+
+		
+		/* create the memory */
+		Memory mem = Memory.createFromWorkingMemory(wm, obj_class, learner.getDomainAlgo(), data);
+		forest.build(mem, learner);
+		//forest.clearForest(10);
+
+		BoostedTester tester = new BoostedTester(forest.getTrees(), forest.getAccuracies());
+		tester.printStats(tester.test(mem.getClassInstances()), Util.DRL_DIRECTORY + executionSignature);
+		//forest.test(mem.getClassInstances(), Util.DRL_DIRECTORY+executionSignature);
+		
+		//Tester bla => test(c45, mem.getClassInstances());
+		learner.getTree().setSignature(executionSignature);
+		return learner.getTree();
+	}
+	
+	public static DecisionTree createSinglePrunnedC45E(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+		return createSinglePrunnedC45(wm, obj_class, new Entropy());
+	}
+	public static DecisionTree createSinglePrunnedC45G(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+		return createSinglePrunnedC45(wm, obj_class, new GainRatio());
+	}
+	
+	protected static DecisionTree createSinglePrunnedC45(WorkingMemory wm, Class<? extends Object> obj_class, Heuristic h) throws FeatureNotSupported {
+		DataType data = Learner.DEFAULT_DATA;
+		C45Learner learner = new C45Learner(h);
+		
+		SingleTreeBuilder single_builder = new SingleTreeBuilder();
+		
+//		String algo_suffices = org.drools.learner.deprecated.DecisionTreeFactory.getAlgoSuffices(learner.getDomainAlgo(), single_builder.getTreeAlgo());
+//		String executionSignature = org.drools.learner.deprecated.DecisionTreeFactory.getSignature(obj_class, "", algo_suffices);
+		String algo_suffices = DecisionTreeFactory.getAlgoSuffices(learner.getDomainAlgo(), single_builder.getTreeAlgo());
+		String executionSignature = DecisionTreeFactory.getSignature(obj_class, "", algo_suffices);
+		
+		
+		
+		/* create the memory */
+		Memory mem = Memory.createFromWorkingMemory(wm, obj_class, learner.getDomainAlgo(), data);
+		single_builder.build(mem, learner);//obj_class, target_attr, working_attr
+		
+		CrossValidation validater = new CrossValidation(10, mem.getClassInstances());
+		validater.validate(learner);
+		
+		DecisionTreePruner pruner = new DecisionTreePruner(validater);
+		pruner.prun_to_estimate();
+		
+		// you should be able to get the pruned tree
+		// prun.getMinimumCostTree()
+		// prun.getOptimumCostTree()
+		
+		// test the tree
+		SingleTreeTester tester = new SingleTreeTester(learner.getTree());
+		tester.printStats(tester.test(mem.getClassInstances()), Util.DRL_DIRECTORY + executionSignature);
+		
+		/* Once Talpha is found the tree that is finally suggested for use is that 
+		 * which minimises the cost-complexity using and all the data use the pruner to prun the tree
+		 */
+		pruner.prun_tree(learner.getTree());
+		
+		
+		// test the tree again
+		
+		
+		//Tester.test(c45, mem.getClassInstances());
+		
+		learner.getTree().setSignature(executionSignature);
+		return learner.getTree();
+	}
+	
+	public static String getSignature(Class<? extends Object> obj_class, String fileName, String suffices) {
+		
+		//String fileName = (dataFile == null || dataFile == "") ? this.getRuleClass().getSimpleName().toLowerCase(): dataFile; 			
+		String objectSignature = fileName;
+		if (objectSignature == null || objectSignature =="") {
+			objectSignature = obj_class.getSimpleName().toLowerCase();
+			if (suffices != null && suffices != "")
+				objectSignature += "_"+ suffices;
+		}
+		
+		String packageFolders = obj_class.getPackage().getName();
+		String _packageNames = packageFolders.replace('.', '/');
+		String executionSignature = _packageNames+"/"+ objectSignature; //"src/main/rules/"+
+		
+		return executionSignature;
+		
+	}
+	
+	public static String getAlgoSuffices(DomainAlgo domain_a, TreeAlgo tree_a) {
+		String suffix = "";
+		switch (domain_a) {
+		case CATEGORICAL:
+			suffix += "id3" ;
+			break;
+		case QUANTITATIVE:
+			suffix += "c45";
+			break;
+		default:
+			suffix += "?" ;
+		
+		}
+		
+		switch (tree_a) {
+		case SINGLE:
+			suffix += "_one";
+			break;
+		case BAG:
+			suffix += "_bag";
+			break;
+		case BOOST:
+			suffix += "_boost";
+			break;
+		default:
+			suffix += "_?" ;
+		
+		}
+		return suffix;
+	}
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/DecisionTreeFactory.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/DecisionTreeMerger.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/DecisionTreeMerger.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/DecisionTreeMerger.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,80 @@
+package org.drools.learner.builder;
+
+import java.util.ArrayList;
+import java.util.Collections;
+
+import org.drools.learner.DecisionTree;
+import org.drools.learner.DecisionTreeVisitor;
+import org.drools.learner.Path;
+import org.drools.learner.tools.LoggerFactory;
+import org.drools.learner.tools.SimpleLogger;
+
+public class DecisionTreeMerger {
+	
+	//private static SimpleLogger flog = LoggerFactory.getFileLogger(DecisionTreeMerger.class, SimpleLogger.WARN, "rules_gizil2");
+	private static SimpleLogger flog = LoggerFactory.getUniqueFileLogger(DecisionTreeMerger.class, SimpleLogger.WARN);
+	private static SimpleLogger slog = LoggerFactory.getSysOutLogger(DecisionTreeMerger.class, SimpleLogger.WARN);
+	
+	
+	private DecisionTreeVisitor visitor;
+	
+	private ArrayList<Path> sorted_paths;
+	
+	public DecisionTreeMerger() {
+		visitor = new DecisionTreeVisitor();
+		
+	}
+	public void add(DecisionTree dt) {
+		visitor.visit(dt);
+	}
+	
+	public void add2(DecisionTree dt) {
+		visitor.visit2(dt);
+	}
+	
+	public DecisionTree getBest() {
+		sortPaths();
+		printSortedPaths();
+		//System.exit(0);
+		return null;
+	}
+	
+	public void sortPaths() {
+		sorted_paths = new ArrayList<Path>(visitor.getPathList());
+		Collections.sort(sorted_paths, Path.getPathRankComparator());	
+	}
+	
+	public int getNumPaths() {
+		return visitor.getNumPaths();
+	}
+	
+	public int getNumPathsfound() {
+		return visitor.getNumPathsFound();
+	}
+	public void printPaths() {
+		if (flog.warn() != null) {
+			for (Path p : visitor.getPathList()) {
+				flog.warn().log(p.hashCode()+ "-"+p.getRank()+" : "+ p + "\n");
+			}
+			
+		}
+		
+	}
+	
+	
+	public void printSortedPaths() {
+		
+		if (flog.warn() != null) {
+			flog.warn().log("Sorted paths: Total num of paths "+getNumPathsfound()+" num paths different"+getNumPaths()+ "\n");
+			slog.warn().log("Total num of paths "+getNumPathsfound()+" num paths different"+getNumPaths()+ "\n");
+			for (Path p: sorted_paths) {
+				flog.warn().log(p.hashCode()+ "-"+p.getTreeId()+"-"+p.getRank()+" : "+ p + "\n");
+				slog.warn().log(p.hashCode()+ "-"+p.getTreeId()+"-"+p.getRank()+" : "+ p + "\n");
+			}
+			
+		}
+		
+		
+		
+	}
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/DecisionTreeMerger.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/ForestBuilder.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/ForestBuilder.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/ForestBuilder.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,95 @@
+package org.drools.learner.builder;
+
+import java.util.ArrayList;
+
+import org.drools.learner.DecisionTree;
+import org.drools.learner.InstanceList;
+import org.drools.learner.Memory;
+import org.drools.learner.tools.LoggerFactory;
+import org.drools.learner.tools.SimpleLogger;
+import org.drools.learner.tools.Util;
+
+public class ForestBuilder implements DecisionTreeBuilder{
+
+	private static SimpleLogger flog = LoggerFactory.getUniqueFileLogger(ForestBuilder.class, SimpleLogger.DEFAULT_LEVEL);
+	private static SimpleLogger slog = LoggerFactory.getSysOutLogger(ForestBuilder.class, SimpleLogger.DEBUG);
+	
+	private TreeAlgo algorithm = TreeAlgo.BAG; // default bagging, TODO boosting
+	
+	private static final int FOREST_SIZE = 50;
+	private static final double TREE_SIZE_RATIO = 0.9;
+	private static final boolean WITH_REP = true;
+	
+	private ArrayList<DecisionTree> forest;
+	//private Learner trainer;
+	
+	private DecisionTreeMerger merger;
+	
+	public ForestBuilder() {
+		//this.trainer = _trainer;
+		merger = new DecisionTreeMerger();
+	}
+	public void build(Memory mem, Learner _trainer) {
+		
+		final InstanceList class_instances = mem.getClassInstances();
+		_trainer.setInputData(class_instances);
+		
+		if (class_instances.getTargets().size()>1) {
+			//throw new FeatureNotSupported("There is more than 1 target candidates");
+			if (flog.error() !=null)
+				flog.error().log("There is more than 1 target candidates");
+			System.exit(0);
+			// TODO put the feature not supported exception || implement it
+		}
+	
+		int N = class_instances.getSize();
+		int tree_capacity = (int)(TREE_SIZE_RATIO * N);
+		_trainer.setDataSizePerTree(tree_capacity);
+
+		
+		forest = new ArrayList<DecisionTree> (FOREST_SIZE);
+		int i = 0;
+		int[] bag;		
+		while (i++ < FOREST_SIZE) {
+			if (WITH_REP)
+				bag = Util.bag_w_rep(tree_capacity, N);
+			else
+				bag = Util.bag_wo_rep(tree_capacity, N);
+			
+			InstanceList working_instances = class_instances.getInstances(bag);		
+			
+			if (slog.debug() != null)
+				slog.debug().log("\n"+"Training a tree"+"\n");
+			DecisionTree dt = _trainer.train_tree(working_instances);
+			if (slog.debug() != null)
+				slog.debug().log("\n"+"the end"+ "\n");
+			dt.setID(i);
+			forest.add(dt);
+			// the DecisionTreeMerger will visit the decision tree and add the paths that have not been seen yet to the list
+			merger.add(dt);	
+
+			if (slog.stat() !=null)
+				slog.stat().stat(".");
+
+		}
+		
+		//System.exit(0);
+		// TODO how to compute a best tree from the forest
+		DecisionTree best = merger.getBest();
+		if (best == null)
+			best = forest.get(0);
+		_trainer.setBestTree(best);// forest.get(0));
+		
+		//this.c45 = dt;
+	}
+
+	public TreeAlgo getTreeAlgo() {
+		return algorithm; //TreeAlgo.BAG; // default
+	}
+	
+	public ArrayList<DecisionTree> getTrees() {
+		return forest;
+	}
+}
+
+


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/ForestBuilder.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/ForestTester.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/ForestTester.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/ForestTester.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,85 @@
+package org.drools.learner.builder;
+
+import java.util.ArrayList;
+
+import org.drools.learner.DecisionTree;
+import org.drools.learner.Domain;
+import org.drools.learner.Instance;
+import org.drools.learner.InstanceList;
+import org.drools.learner.Stats;
+import org.drools.learner.eval.ClassDistribution;
+import org.drools.learner.tools.LoggerFactory;
+import org.drools.learner.tools.SimpleLogger;
+import org.drools.learner.tools.Util;
+
+public class ForestTester extends Tester{
+	
+	private static SimpleLogger flog = LoggerFactory.getUniqueFileLogger(ForestTester.class, SimpleLogger.DEFAULT_LEVEL);
+	private static SimpleLogger slog = LoggerFactory.getSysOutLogger(ForestTester.class, SimpleLogger.DEFAULT_LEVEL);
+	
+	private ArrayList<DecisionTree> trees;
+	private Domain targetDomain;
+	
+	public ForestTester(ArrayList<DecisionTree> forest) {
+		trees = forest;
+		targetDomain = forest.get(0).getTargetDomain();
+	}
+	
+	public Stats test(InstanceList data) {
+
+		Stats evaluation = new Stats(data.getSchema().getObjectClass()) ; //represent.getObjClass());
+		
+		int i = 0;
+		for (Instance instance : data.getInstances()) {
+			Object forest_decision = this.voteOn(instance);
+			Integer result = evaluate(targetDomain, instance, forest_decision);
+			
+			//flog.debug(Util.ntimes("#\n", 1)+i+ " <START> TEST: instant="+ instance + " = target "+ result);			
+			if (i%1000 ==0 && slog.stat() != null)
+					slog.stat().stat("."); 
+
+			evaluation.change(result, 1);
+			i ++;
+		}	
+		
+		return evaluation;
+	}
+	
+	public Object voteOn(Instance i) {
+		ClassDistribution classification = new ClassDistribution(targetDomain);
+
+		for (int j = 0; j< trees.size() ; j ++) {
+			Object vote = trees.get(j).vote(i);
+			if (vote != null) {
+				classification.change(vote, 1);
+				//classification.change(Util.sum(), 1);
+			} else {
+				// TODO add an unknown value
+				//classification.change(-1, 1);
+				if (flog.error() !=null)
+					flog.error().log(Util.ntimes("\n", 10)+"Unknown situation at tree: " + j + " for fact "+ i);
+				System.exit(0);
+			}
+		}
+		classification.evaluateMajority();
+		Object winner = classification.get_winner_class();
+		
+		
+		double ratio = 0.0;
+		if (classification.get_num_ideas() == 1) {
+			//100 %
+			ratio = 1;
+			return winner;
+		} else {
+			double num_votes = classification.getVoteFor(winner);
+			ratio = (num_votes/(double) trees.size());
+			// TODO if the ratio is smaller than some number => reject
+		}
+		return winner;
+		
+	}
+	public void printStats(final Stats evaluation, String executionSignature) {
+		super.printStats(evaluation, executionSignature);
+	}
+
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/ForestTester.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/ID3Learner.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/ID3Learner.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/ID3Learner.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,99 @@
+package org.drools.learner.builder;
+
+import java.util.Hashtable;
+import java.util.List;
+
+import org.drools.learner.DecisionTree;
+import org.drools.learner.Domain;
+import org.drools.learner.LeafNode;
+import org.drools.learner.TreeNode;
+import org.drools.learner.eval.AttributeChooser;
+import org.drools.learner.eval.Heuristic;
+import org.drools.learner.eval.InstDistribution;
+import org.drools.learner.tools.Util;
+
+public class ID3Learner extends Learner {
+	
+	private AttributeChooser chooser;
+	
+	public ID3Learner(Heuristic hf) {
+		super();
+		super.setDomainAlgo(DomainAlgo.CATEGORICAL);
+		chooser = new AttributeChooser(hf);
+	}
+	
+	protected TreeNode train(DecisionTree dt, InstDistribution data_stats) {//List<Instance> data) {
+		
+		if (data_stats.getSum() == 0) {
+			throw new RuntimeException("Nothing to classify, factlist is empty");
+		}
+		
+		/* let's get the statistics of the results */
+		//InstDistribution stats_by_class = new InstDistribution(dt.getTargetDomain());///* the target domain*/);
+		data_stats.evaluateMajority();
+		
+		
+		/* if all elements are classified to the same value */
+		if (data_stats.get_num_ideas(/* number of supported target categories*/) == 1) {
+
+			LeafNode classifiedNode = new LeafNode(dt.getTargetDomain()				/* target domain*/, 
+												   data_stats.get_winner_class() 	/*winner target category*/);
+			classifiedNode.setRank(	(double)data_stats.getSum()/
+									(double)this.getDataSize()/* total size of data fed to dt*/);
+			classifiedNode.setNumMatch(data_stats.getSum());						//num of matching instances to the leaf node
+			classifiedNode.setNumClassification(data_stats.getSum());				//num of classified instances at the leaf node
+			return classifiedNode;
+		}
+		List<Domain> attribute_domains = dt.getAttrDomains();
+		
+		/* if  there is no attribute left in order to continue */
+		if (attribute_domains.size() == 0) {
+			/* an heuristic of the leaf classification*/
+			Object winner = data_stats.get_winner_class();								/*winner target category*/
+			LeafNode noAttributeLeftNode = new LeafNode(dt.getTargetDomain()			/* target domain*/, 
+														winner);
+			noAttributeLeftNode.setRank((double)data_stats.getVoteFor(winner)/
+										(double)this.getDataSize()						/* total size of data fed to dt*/);
+			noAttributeLeftNode.setNumMatch(data_stats.getSum());						//num of matching instances to the leaf node
+			noAttributeLeftNode.setNumClassification(data_stats.getVoteFor(winner));	//num of classified instances at the leaf node
+			return noAttributeLeftNode;
+		}
+		
+		
+		/* id3 starts: choose the attribute according to the entropy function 
+		 * entrophy function: data, info of the data wrt target domain, info for each attribute 
+		 * */
+		Domain node_domain = chooser.chooseAttributeAsCategorical(data_stats, attribute_domains);
+		
+		
+		if (flog.stat() !=null)
+			flog.stat().log(Util.ntimes("*", 20)+" 1st best attr: "+ node_domain);
+
+		TreeNode currentNode = new TreeNode(node_domain);
+		currentNode.setNumMatch(data_stats.getSum());									//num of matching instances to the leaf node
+		Hashtable<Object, InstDistribution> filtered_stats = data_stats.splitFromCategorical(node_domain, null);
+		dt.FACTS_READ += data_stats.getSum();
+		
+		for (int c=0; c<node_domain.getCategoryCount(); c++) {
+			/* split the last two class at the same time */
+			Object category = node_domain.getCategory(c);
+			
+			/* list of domains except the choosen one (&target domain)*/
+			DecisionTree child_dt = new DecisionTree(dt, node_domain);	
+			
+			if (filtered_stats.get(category) == null || filtered_stats.get(category).getSum() ==0) {
+				/* majority !!!! */
+				LeafNode majorityNode = new LeafNode(dt.getTargetDomain(), data_stats.get_winner_class());
+				majorityNode.setRank(-1.0);		//it does not classify any instance
+				majorityNode.setNumMatch(0);
+				majorityNode.setNumClassification(0);
+				currentNode.putNode(category, majorityNode);
+			} else {
+				TreeNode newNode = train(child_dt, filtered_stats.get(category));//, attributeNames_copy
+				currentNode.putNode(category, newNode);
+			}
+		}
+		return currentNode;
+		
+	}
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/ID3Learner.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/Learner.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/Learner.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/Learner.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,121 @@
+package org.drools.learner.builder;
+
+import java.util.HashSet;
+import java.util.Iterator;
+
+import org.drools.learner.DecisionTree;
+import org.drools.learner.Domain;
+import org.drools.learner.Instance;
+import org.drools.learner.InstanceList;
+import org.drools.learner.TreeNode;
+import org.drools.learner.eval.InstDistribution;
+import org.drools.learner.tools.LoggerFactory;
+import org.drools.learner.tools.SimpleLogger;
+
+public abstract class Learner {
+	
+	protected static SimpleLogger flog = LoggerFactory.getUniqueFileLogger(Learner.class, SimpleLogger.DEFAULT_LEVEL);
+	protected static SimpleLogger slog = LoggerFactory.getSysOutLogger(Learner.class, SimpleLogger.DEBUG);
+	
+	public static enum DomainAlgo { CATEGORICAL, QUANTITATIVE }
+	public static DomainAlgo DEFAULT_DOMAIN = DomainAlgo.QUANTITATIVE;
+	
+	public static enum DataType {PRIMITIVE, STRUCTURED, COLLECTION}
+	public static DataType DEFAULT_DATA = DataType.PRIMITIVE;
+	private int data_size;
+	private DecisionTree best_tree;
+	private InstanceList input_data;
+	protected HashSet<Instance> missclassified_data;
+	
+
+	private DomainAlgo algorithm;
+	
+	
+	protected abstract TreeNode train(DecisionTree dt, InstDistribution data_stats);
+	
+	public Learner() {
+		this.data_size = 0;
+	}
+
+	
+	public DecisionTree train_tree(InstanceList working_instances) {
+		String target_reference = this.getTargetDomain().getFReferenceName();
+		//System.out.println("(Learner) target   "+ target_reference);
+		DecisionTree dt = new DecisionTree(input_data.getSchema(), target_reference);
+
+		//flog.debug("Num of attributes: "+ dt.getAttrDomains().size());
+		
+		InstDistribution stats_by_class = new InstDistribution(dt.getTargetDomain());
+		stats_by_class.calculateDistribution(working_instances.getInstances());
+		dt.FACTS_READ += working_instances.getSize();
+
+		TreeNode root = train(dt, stats_by_class);
+		dt.setRoot(root);
+		//flog.debug("Result tree\n" + dt);
+		return dt;
+	}
+	
+	public Domain getTargetDomain() {
+		Iterator<String> it_target= input_data.getTargets().iterator();
+		// TODO check if there is a target candidate
+		String target = it_target.next();
+		//System.out.println("(Learner) What is target?? "+ target +" and the domain "+ input_data.getSchema().getAttrDomain(target));
+		return input_data.getSchema().getAttrDomain(target);
+		
+	}
+	
+	// TODO how are we going to select the target domain if there is more than one candidate
+	private DecisionTree select_target(InstanceList working_instances) {
+		DecisionTree dt = null; 
+		for (String target: input_data.getTargets()) {
+			dt = new DecisionTree(input_data.getSchema(), target);
+				
+			//flog.debug("Num of attributes: "+ dt.getAttrDomains().size());
+			
+			InstDistribution stats_by_class = new InstDistribution(dt.getTargetDomain());
+			stats_by_class.calculateDistribution(working_instances.getInstances());
+			dt.FACTS_READ += working_instances.getSize();
+			
+			TreeNode root = train(dt, stats_by_class);
+			dt.setRoot(root);
+			//flog.debug("Result tree\n" + dt);
+		}
+		return dt;
+	}
+	
+	
+	public void setDataSizePerTree(int num) {
+		this.data_size = num;
+		
+		missclassified_data = new HashSet<Instance>();
+	}
+	
+	public int getDataSize() {
+		return this.data_size;
+	}
+	
+	public DecisionTree getTree() {
+		return best_tree;
+	}
+
+	public DomainAlgo getDomainAlgo() {
+		return this.algorithm;
+	}
+	
+	public void setDomainAlgo(DomainAlgo type) {
+		this.algorithm = type;
+	}
+
+	public void setInputData(InstanceList class_instances) {
+		this.input_data = class_instances;	
+	}
+	
+	public InstanceList getInputData() {
+		return input_data;
+	}
+
+	public void setBestTree(DecisionTree dt) {
+		this.best_tree = dt;
+	}
+
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/Learner.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/SingleTreeBuilder.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/SingleTreeBuilder.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/SingleTreeBuilder.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,52 @@
+package org.drools.learner.builder;
+
+
+import org.drools.learner.DecisionTree;
+import org.drools.learner.InstanceList;
+import org.drools.learner.Memory;
+import org.drools.learner.tools.LoggerFactory;
+import org.drools.learner.tools.SimpleLogger;
+
+public class SingleTreeBuilder implements DecisionTreeBuilder{
+	
+	private static SimpleLogger flog = LoggerFactory.getUniqueFileLogger(SingleTreeBuilder.class, SimpleLogger.DEFAULT_LEVEL);
+	private static SimpleLogger slog = LoggerFactory.getSysOutLogger(SingleTreeBuilder.class, SimpleLogger.DEFAULT_LEVEL);
+
+	private TreeAlgo algorithm = TreeAlgo.SINGLE; // default bagging, TODO boosting
+	
+	private DecisionTree one_tree;
+	//private Learner trainer;
+	
+	public SingleTreeBuilder() {//Learner _trainer) {
+		//this.trainer = _trainer;
+		//dom_type = trainer.getDomainType();
+	}
+	
+	/* 
+	 * the memory has the information 
+	 * the instances: the objects which the decision tree will work on
+	 * the schema: the definition of the object instance 
+	 * 			(Class<?>) klass, String targetField, List<String> workingAttributes
+	 */
+	public void build(Memory mem, Learner _trainer) {
+		final InstanceList class_instances = mem.getClassInstances();
+		_trainer.setInputData(class_instances);
+		if (class_instances.getTargets().size()>1) {
+			//throw new FeatureNotSupported("There is more than 1 target candidates");
+			if (flog.error() !=null)
+				flog.error().log("There is more than 1 target candidates");
+			
+			System.exit(0);
+			// TODO put the feature not supported exception || implement it
+		}
+		
+		_trainer.setDataSizePerTree(class_instances.getSize());
+		one_tree = _trainer.train_tree(class_instances);
+		_trainer.setBestTree(one_tree);
+	}
+	
+	public TreeAlgo getTreeAlgo() {
+		return this.algorithm; // default
+	}
+
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/SingleTreeBuilder.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/SingleTreeTester.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/SingleTreeTester.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/SingleTreeTester.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,47 @@
+package org.drools.learner.builder;
+
+import org.drools.learner.DecisionTree;
+import org.drools.learner.Instance;
+import org.drools.learner.InstanceList;
+import org.drools.learner.Stats;
+
+public class SingleTreeTester extends Tester{
+	
+	private DecisionTree single_tree; 
+	
+	public SingleTreeTester(DecisionTree one_tree) {
+		single_tree = one_tree;
+	}
+	
+	/* test the entire set*/
+	public Stats test(InstanceList data) {
+		
+		//flog.debug(Util.ntimes("\n", 2)+Util.ntimes("$", 5)+" TESTING "+Util.ntimes("\n", 2));
+		
+		Stats evaluation = new Stats(single_tree.getObjClass());
+		int i = 0;
+		for (Instance instance : data.getInstances()) {
+			Object tree_decision = single_tree.vote(instance);
+			Integer result = evaluate(single_tree.getTargetDomain(), instance, tree_decision);
+			
+			//flog.debug(Util.ntimes("#\n", 1)+i+ " <START> TEST: instant="+ instance + " = target "+ result);			
+//			if (i%1000 ==0 && slog.stat() !=null)
+//				slog.stat().stat(".");
+
+			evaluation.change(result, 1);
+			i ++;
+		}
+		return evaluation;
+	}
+	
+	/* test the entire set*/
+	public Integer test(Instance i) {
+		
+		Object tree_decision = single_tree.vote(i);
+		return evaluate(single_tree.getTargetDomain(), i, tree_decision);
+	}
+	
+	public void printStats(final Stats evaluation, String executionSignature) {
+		super.printStats(evaluation, executionSignature);
+	}
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/SingleTreeTester.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/Tester.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/Tester.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/Tester.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,39 @@
+package org.drools.learner.builder;
+
+import org.drools.learner.AttributeValueComparator;
+import org.drools.learner.Domain;
+import org.drools.learner.Instance;
+import org.drools.learner.InstanceList;
+import org.drools.learner.Stats;
+import org.drools.learner.tools.Util;
+
+public abstract class Tester{
+	
+	//private static final Logger log = LoggerFactory.getSysOutLogger(LogLevel.ERROR); 
+	//private static final Logger flog = LoggerFactory.getFileLogger(Tester.class, LogLevel.ERROR, Util.log_file);
+	
+	public abstract Stats test(InstanceList data);// String executionSignature
+	
+	public static Integer evaluate (Domain targetDomain, Instance i, Object tree_decision) {	
+		String targetFName = targetDomain.getFReferenceName();
+		
+		Object tattr_value = i.getAttrValue(targetFName);
+		Object i_category = targetDomain.getCategoryOf(tattr_value);
+		
+		if (AttributeValueComparator.instance.compare(i_category, tree_decision) == 0) {
+			return Integer.valueOf(1); 	//correct
+		} else {
+			return Integer.valueOf(0);	// mistake
+		} 
+	}
+	
+	protected void printStats(final Stats evaluation, String executionSignature) {
+		if (Util.PRINT_STATS) {
+//			if (flog.debug() !=null)
+//				flog.debug().log(evaluation.print2string());
+			
+			evaluation.print2file(executionSignature);
+		}
+	}
+
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/Tester.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/AttributeChooser.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/AttributeChooser.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/AttributeChooser.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,115 @@
+package org.drools.learner.eval;
+
+import java.util.List;
+
+import org.drools.learner.Domain;
+import org.drools.learner.tools.LoggerFactory;
+import org.drools.learner.tools.SimpleLogger;
+
+public class AttributeChooser {
+	
+	private static SimpleLogger flog = LoggerFactory.getUniqueFileLogger(AttributeChooser.class, SimpleLogger.DEFAULT_LEVEL);
+	private static SimpleLogger slog = LoggerFactory.getSysOutLogger(AttributeChooser.class, SimpleLogger.DEFAULT_LEVEL);
+	
+	
+	private Heuristic function;
+	
+	public AttributeChooser(Heuristic _function) {
+		function = _function;
+	}
+
+	public Domain chooseAttribute(InformationContainer eval, InstDistribution insts_by_target, List<Domain> attr_domains) {
+		// List<Instance> instances
+		
+//		double data_eval = function.calc_info(insts_by_target);
+		function.init(insts_by_target);
+
+		double greatestEval = function.getWorstEval();//-1000;
+//		ArrayList<Instance> sorted_instances = null, best_sorted_instances = null;
+//		Domain best_attr = attr_domains.get(0);
+		
+		InformationContainer container = new InformationContainer(); 
+		InformationContainer best = new InformationContainer(); 
+		for (Domain attr_domain : attr_domains) {
+			/* No need to clone the domain as soon as no need to change the domain
+			 * All domains are categorical so i will use them the way they are
+			 */
+			double attribute_eval = 0.0;
+			if (attr_domain.isCategorical()) {
+				attribute_eval = function.getEval(attr_domain);//data_eval - function.info_attr(insts_by_target, attr_domain);
+				container.attribute_eval = attribute_eval;
+				container.domain = attr_domain;
+				if (slog.debug() != null)
+					slog.debug().log("CatAttribute: " + container.domain + " the gain: " + attribute_eval + " greatest "+ greatestEval+ "\n");
+			
+				
+			} else {
+//				the continuous domain
+				attribute_eval = function.getEval_cont(attr_domain);
+				container.attribute_eval = attribute_eval;
+				container.domain = function.getDomain();
+				container.sorted_data = function.getSortedInstances();
+				if (slog.debug() != null)
+					slog.debug().log("ContAttribute: " + container.domain + " the gain: " + attribute_eval + " greatest "+ greatestEval+ "\n");
+			
+//				attr_domain = function.getDomain();
+//				sorted_instances = visitor.getSortedInstances();
+				
+				
+				
+			}
+			if (slog.warn() != null)
+				slog.warn().log("Attribute: " + container.domain + " the gain: " + attribute_eval + " greatest "+ greatestEval+ "\n");
+			if (attribute_eval > greatestEval) {// TODO implement a comparator
+				greatestEval = attribute_eval;
+				best.domain = container.domain;
+				best.sorted_data = container.sorted_data;
+			}
+		}
+
+//		Clone the best attribute domain cause it is going to be the domain of the treenode
+		eval.domain =  best.domain.cheapClone();
+		eval.sorted_data = best.sorted_data;
+		eval.attribute_eval = greatestEval;
+		return eval.domain;
+	}
+
+//	/* 
+//	* to choose the best attribute
+//	* can process categorical, and quantitative attribute domains
+//	* used by c45Learner, c45Iterator
+//	*/
+//	public static Domain chooseAttribute(InstDistribution insts_by_target, List<Domain> attr_domains) {		
+//	InformationContainer evals = new InformationContainer();
+//	chooseAttribute(evals, insts_by_target, attr_domains);
+//	return evals.domain;
+//	}
+
+	/* 
+	 * to choose the best attribute
+	 * can process only the categorical attribute domains
+	 * used by id3Learner
+	 */
+	public Domain chooseAttributeAsCategorical(InstDistribution insts_by_target, List<Domain> attr_domains) {
+
+		//double dt_info = function.calc_info(insts_by_target);
+		function.init(insts_by_target);
+		double greatestEval = function.getWorstEval(); //-1000;
+		Domain best_attr = attr_domains.get(0);
+		for (Domain attr_domain : attr_domains) {
+			/* No need to clone the domain as soon as no need to change the domain
+			 * All domains are categorical so i will use them the way they are
+			 */
+			//double attribute_eval = dt_info - function.info_attr(insts_by_target, attr_domain);
+			double attribute_eval = function.getEval(attr_domain);
+//			flog.debug("Attribute: " + attr_domain.getFName() + " the gain: " + gain);
+			if (attribute_eval > greatestEval) {
+				greatestEval = attribute_eval;
+				best_attr = attr_domain;
+			}
+		}
+//		Clone the best attribute domain cause it is going to be the domain of the treenode
+		return best_attr.cheapClone();
+	}
+
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/AttributeChooser.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/Categorizer.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/Categorizer.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/Categorizer.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,211 @@
+package org.drools.learner.eval;
+
+import java.util.ArrayList;
+import java.util.Collections;
+
+import org.drools.learner.Domain;
+import org.drools.learner.Instance;
+import org.drools.learner.InstanceComparator;
+import org.drools.learner.QuantitativeDomain;
+import org.drools.learner.eval.Entropy;
+import org.drools.learner.tools.LoggerFactory;
+import org.drools.learner.tools.SimpleLogger;
+import org.drools.learner.tools.Util;
+
+
+public class Categorizer {
+	
+	private static SimpleLogger flog = LoggerFactory.getUniqueFileLogger(Categorizer.class, SimpleLogger.DEFAULT_LEVEL);
+	
+	private ArrayList<Instance> data;
+	private QuantitativeDomain splitDomain;
+	private Domain targetDomain;
+	
+	private InstanceComparator targetComp, attrComp;
+	
+	private ClassDistribution distribution;
+	
+	
+	/* TODO make it singleton */	
+	private static final Object key0 = Integer.valueOf(0);
+	private static final Object key1 = Integer.valueOf(1);
+	private static final Domain binaryDomain = init_binary_domain();
+
+	
+	
+	/* TODO put this into globals file */
+	private int maxDepth = 1;
+	
+	public Categorizer(InstDistribution _data_in_class) {
+		//List<Instance> _instancese
+		this.data = new ArrayList<Instance>((int)_data_in_class.getSum());
+		this.distribution = _data_in_class;
+		this.targetDomain = _data_in_class.getClassDomain();
+		
+		for (int category = 0; category<targetDomain.getCategoryCount(); category++) {
+			Object targetCategory = targetDomain.getCategory(category); 
+			data.addAll(_data_in_class.getSupportersFor(targetCategory));
+		}
+		
+		this.targetComp = new InstanceComparator(targetDomain.getFReferenceName());
+	}
+	
+	public void findSplits(QuantitativeDomain attrDomain) {
+		this.splitDomain = attrDomain;
+		this.attrComp = new InstanceComparator(attrDomain.getFReferenceName());
+		
+		init_binary_domain();
+		
+		// CATEGORIZATION 1. sort the values 
+		Collections.sort(this.data, this.attrComp);
+		
+		int last_index = this.data.size()-1;
+		Object last_value = data.get(last_index).getAttrValue(this.splitDomain.getFReferenceName());
+		this.splitDomain.addSplitPoint(new SplitPoint(last_index, last_value));	
+		
+		find_a_split(0, this.data.size(), this.maxDepth, this.distribution);
+		return;
+	}
+	
+	public static Domain init_binary_domain() {
+		//if (binaryDomain == null) {
+			Domain bD = new Domain(Object.class, "binary", Integer.class); //splitDomain.cheapClone();
+			bD.addCategory(key0);	//addSplitPoint(new SplitPoint(0, key0));
+			bD.addCategory(key1); //addSplitPoint(new SplitPoint(1, key1)); 
+		//}
+		return bD;
+	}
+
+	public ArrayList<Instance> getSortedInstances() {
+		return data;
+	}
+	
+	public QuantitativeDomain getSplitDomain() {
+		return this.splitDomain;
+	}
+	
+	private double find_a_split(int begin_index, int size, int depth, 
+								ClassDistribution facts_in_class) {
+
+		if (flog.debug() !=null)
+			flog.debug().log("./n");
+		if (data.size() <= 1 || (size-begin_index)<2) {
+			if (flog.warn() !=null)
+				flog.warn().log("fact.size <=1 returning 0.0....");
+			return 0.0;
+		}
+//		if (facts_in_class.getSum() == 0) {
+//			return 0.0;	// there is no one in it
+//		}
+		facts_in_class.evaluateMajority();		
+		if (facts_in_class.get_num_ideas()==1) {
+			if (flog.warn() !=null)
+				flog.warn().log("getNum_supported_target_classes=1 returning 0.0....");
+			return 0.0; //?
+		}
+
+		if (depth == 0) {
+			if (flog.warn() !=null)
+				flog.warn().log("depth == 0  returning 0.0....");
+			return 0.0;
+		}
+		
+		/* initialize the distribution */		
+		CondClassDistribution instances_by_attr = new CondClassDistribution(binaryDomain, this.targetDomain);
+		instances_by_attr.setDistForAttrValue(key1, facts_in_class);
+		instances_by_attr.setTotal(facts_in_class.getSum());
+		
+		double best_sum = 100000.0;
+
+		int num_split_points = 0, split_index = begin_index+1;	
+		int last_index = size-1;
+		Object last_value = data.get(last_index).getAttrValue(this.splitDomain.getFReferenceName());
+		SplitPoint bestPoint = new SplitPoint(last_index, last_value);	
+		CondClassDistribution best_distribution = null;//instances_by_attr;
+		Instance i1 = data.get(begin_index), i2; 
+		
+		if (flog.debug() !=null)
+			flog.debug().log("\nentropy.info_cont() SEARCHING: "+begin_index+ " until "+size+" attr "+this.splitDomain.getFName()+ " "+ i1);
+		for(int index =begin_index+1; index < size; index ++) {
+			i2= data.get(index);
+			
+			/* every time i read a new instance and change the place in the distribution */
+			instances_by_attr.change(key0, i1.getAttrValue(this.targetDomain.getFReferenceName()), +1.0d * i1.getWeight());	//+1
+			instances_by_attr.change(key1, i1.getAttrValue(this.targetDomain.getFReferenceName()), -1.0d * i1.getWeight());	//-1
+		
+			if (flog.debug() !=null)
+				flog.debug().log("Instances " +i1+" vs "+i2);
+			/*
+			 * CATEGORIZATION 2.1. Cut points are points in the sorted list above where the class labels change. 
+			 * Eg. if I had five instances with values for the attribute of interest and labels 
+			 * (1.0,A), (1.4,A), (1.7, A), (2.0,B), (3.0, B), (7.0, A), then there are only
+			 * two cutpoints of interest: 1.85 and 5 (mid-way between the points
+			 * where the classes change from A to B or vice versa).
+			 */
+			if ( targetComp.compare(i1, i2)!=0 && attrComp.compare(i1, i2)!=0) {
+				num_split_points++;
+				
+				if (flog.debug() !=null)
+					flog.debug().log("entropy.info_cont() SEARCHING: "+(index)+" attr "+this.splitDomain.getFName()+ " "+ i2);
+				// the cut point
+				Object cp_i = i1.getAttrValue(this.splitDomain.getFReferenceName());
+				Object cp_i_next = i2.getAttrValue(this.splitDomain.getFReferenceName());
+
+				Class<?> fClass = this.splitDomain.getFType();
+				
+				Object cut_point = Util.calculateMidPoint(fClass, cp_i, cp_i_next);
+							
+				/*
+				 * CATEGORIZATION 3. Evaluate your favourite disparity measure 
+				 * (info gain, gain ratio, gini coefficient, chi-squared test) on the cut point
+				 * and calculate its gain 
+				 */
+				double sum = Entropy.calc_info_attr(instances_by_attr);
+				if (sum < best_sum) {
+					best_sum = sum;
+					split_index = index;
+				
+					if (flog.debug() !=null)
+						flog.debug().log(Util.ntimes("?", 10)+"** FOUND: @"+(index)+" target ("+ i1.getAttrValue(this.targetDomain.getFName()) 
+								+"-|T|-"+ i2.getAttrValue(this.targetDomain.getFName())+")");
+					bestPoint = new SplitPoint(index-1, cut_point);
+					bestPoint.setInformationValue(best_sum);
+					
+//					if (best_distribution != null)
+//						best_distribution.clear();
+					best_distribution = new CondClassDistribution(instances_by_attr);
+				}
+			}
+			i1 = i2;
+
+		}
+		if (best_distribution != null) {
+			if (flog.debug() !=null)
+				flog.debug().log("bp:"+ bestPoint);
+		
+			this.splitDomain.addSplitPoint(bestPoint);
+		
+			/* 
+			 * TODO : can we put the conditional class distribution to its correct place instead of the split
+			 */
+
+			if (flog.debug() !=null)
+				flog.debug().log("bd:"+ best_distribution.getNumCondClasses());
+			double sum1 = find_a_split(begin_index, split_index, depth-1, best_distribution.getDistributionOf(key0));
+
+			double sum2 = find_a_split(split_index, size, depth-1, best_distribution.getDistributionOf(key1));
+		
+			return sum1 + sum2; 
+		} else
+			return 0.0;
+		
+		/* return best_sum;
+		 * TODO find the correct formula of the sumi's for the return
+		 */
+		
+		
+		
+	}
+
+
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/Categorizer.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/ClassDistribution.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/ClassDistribution.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/ClassDistribution.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,133 @@
+package org.drools.learner.eval;
+
+import java.util.Hashtable;
+
+import org.drools.learner.Domain;
+import org.drools.learner.tools.Util;
+
+
+/* simple histogram keeps the number of instances in each class 
+ * class: categories of the target attribute*/
+public class ClassDistribution {
+	
+	//private static final Logger log = LoggerFactory.getSysOutLogger(LogLevel.ERROR);
+	//protected static final Logger flog = LoggerFactory.getFileLogger(ClassDistribution.class, LogLevel.ERROR, Util.log_file); 
+	
+	
+	protected Domain target_attr;
+	private Hashtable<Object, Double> quantity_by_class;
+	
+	private String sum_key = Util.sum();
+	private int num_category_ideas;
+	private Object winner_category;
+	
+	public ClassDistribution(Domain targetDomain) {
+		this.target_attr = targetDomain;
+		//System.out.println("(ClassDistribution)target_attr "+ target_attr);
+		this.quantity_by_class =  new Hashtable<Object, Double>(this.target_attr.getCategoryCount() + 1);		
+		for (int c=0; c<this.target_attr.getCategoryCount(); c++) {
+			Object category = this.target_attr.getCategory(c);
+			quantity_by_class.put(category, 0.0d);			
+		}
+		
+		quantity_by_class.put(sum_key, 0.0d);
+		
+		num_category_ideas = 0;
+	}
+	
+	public ClassDistribution(ClassDistribution copy_dist) {
+		this.target_attr = copy_dist.getClassDomain();
+		this.quantity_by_class =  new Hashtable<Object, Double>(this.target_attr.getCategoryCount() + 1);		
+		this.setDistribution(copy_dist);
+		
+		this.num_category_ideas = copy_dist.get_num_ideas();
+		this.winner_category = copy_dist.get_winner_class();
+		
+	}
+	
+	public void setSum(double sum) {
+		quantity_by_class.put(sum_key, sum);
+	}
+	
+	public double getSum() {
+		return quantity_by_class.get(sum_key);
+	}
+	
+	public Domain getClassDomain() {
+		return target_attr;
+	}
+	
+	public void change(Object target_category, double i) {
+		/* TODO ????
+		 * if (target_category == sum_key) return;
+		 */
+		double num_1 = quantity_by_class.get(target_category);
+		num_1 += i;
+		quantity_by_class.put(target_category, num_1);
+		
+		//quantity_by_class.put(target_category, quantity_by_class.get(target_category)+i);
+	}
+
+	public double getVoteFor(Object targetCategory) {
+		return quantity_by_class.get(targetCategory);
+	}
+	
+	public void evaluateMajority() {
+		double winner_vote = 0.0d;
+		int num_ideas = 0;	// the number of target categories that the instances belong to
+		
+		Object winner = null;
+		
+		for (int c=0; c<this.target_attr.getCategoryCount(); c++) {
+			Object category = this.target_attr.getCategory(c);
+			
+			double num_in_class = this.getVoteFor(category);
+			if (num_in_class > 0) {
+				num_ideas++;
+				if (num_in_class > winner_vote) {
+					winner_vote = num_in_class;
+					winner = category;
+				}
+			}
+		}
+
+		this.set_num_ideas(num_ideas);
+		this.set_winner_class(winner);		
+	}
+	
+	public void set_num_ideas(int num_supperted_target_classes) {
+		this.num_category_ideas = num_supperted_target_classes;
+	}
+	
+	public void set_winner_class(Object the_winner_target_class) {
+		this.winner_category = the_winner_target_class;
+	}
+	
+	public int get_num_ideas() {
+		return this.num_category_ideas;
+	}
+	
+	public Object get_winner_class() {
+		return this.winner_category;
+	}
+	
+	public String toString() {
+		StringBuffer sb_out = new StringBuffer("ClassDist: target:"+ this.target_attr.getFName()+ " total: "+ this.getSum() + " & categories:");
+		for (int c=0; c<this.target_attr.getCategoryCount(); c++) {
+			Object category = this.target_attr.getCategory(c);
+			sb_out.append(this.getVoteFor(category) +" @"+category+ ", ");
+		}
+//		out +="\n";
+		return sb_out.toString();
+	}
+
+	public void setDistribution(ClassDistribution targetDist) {
+		for (int c=0; c<this.target_attr.getCategoryCount(); c++) {
+			Object category = this.target_attr.getCategory(c);
+			this.quantity_by_class.put(category, targetDist.getVoteFor(category));			
+		}
+		this.quantity_by_class.put(sum_key, targetDist.getSum());	
+	}
+	
+
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/ClassDistribution.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/CondClassDistribution.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/CondClassDistribution.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/CondClassDistribution.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,101 @@
+package org.drools.learner.eval;
+
+import java.util.Hashtable;
+
+import org.drools.learner.Domain;
+import org.drools.learner.tools.Util;
+
+public class CondClassDistribution {
+	
+	private String sum_key = Util.sum();
+	
+	private Domain cond_attr; // domain of the attr we distribute the instances conditionally
+	private Hashtable<Object, ClassDistribution> cond_quantity_by_class;
+	
+	private double total_num;
+	
+	public CondClassDistribution(Domain attributeDomain, Domain targetDomain) {
+		this.cond_attr = attributeDomain;
+		//List<?> attributeValues = this.domain.getValues();
+		cond_quantity_by_class = new Hashtable<Object, ClassDistribution>(attributeDomain.getCategoryCount());
+		
+		for (int c_idx = 0; c_idx<attributeDomain.getCategoryCount(); c_idx++) {
+			Object attr_category = attributeDomain.getCategory(c_idx);
+			cond_quantity_by_class.put(attr_category, new ClassDistribution(targetDomain));
+		}
+		
+	}
+	
+	public CondClassDistribution(CondClassDistribution copy) {
+		this.cond_attr = copy.getAttrDomain();
+		this.cond_quantity_by_class = new Hashtable<Object, ClassDistribution>(copy.getNumCondClasses());
+		
+		for (int c_idx = 0; c_idx< this.cond_attr.getCategoryCount(); c_idx++) {
+			Object attr_category = this.cond_attr.getCategory(c_idx);
+			this.cond_quantity_by_class.put(attr_category, new ClassDistribution(copy.getDistributionOf(attr_category)));
+		}
+		this.total_num = copy.getTotal();
+		
+	}
+	
+	public double getTotal() {
+		return this.total_num;	
+	}
+	
+	public void setTotal(double size) {
+		this.total_num = size;	
+	}
+	
+	public Domain getAttrDomain() {
+		return cond_attr;
+	}
+//	public String getTargetName() {
+//		return target_attr.getFName();
+//	}
+	
+	public Object getCondClass(int idx) {
+		return cond_attr.getCategory(idx);
+	}
+	
+	public int getNumCondClasses() {
+		return cond_attr.getCategoryCount();
+	}
+	
+	public double getTotal_AttrCategory(Object attr_value) {
+		return cond_quantity_by_class.get(attr_value).getSum();
+	}
+	
+	public void change(Object attr_category, Object target_class, double i) {
+//		System.out.print("The cond_dist: a_cat:"+ attr_category+" t_cat:"+ target_class);
+//		System.out.println(" the nums: "+cond_quantity_by_class.get(attr_category));
+		
+		cond_quantity_by_class.get(attr_category).change(target_class, i);		
+		cond_quantity_by_class.get(attr_category).change(sum_key, i);
+		
+	}
+	
+	public ClassDistribution getDistributionOf(Object attr_value) {
+		return cond_quantity_by_class.get(attr_value);
+	}
+	public void clear() {
+		this.cond_quantity_by_class.clear();
+		// all for each?
+	}
+	
+	public void setDistForAttrValue(Object attr_value, ClassDistribution facts_in_class) {
+		//cond_quantity_by_class.put(attr_value, targetDist);
+		/* TODO should i make a clone */	
+		cond_quantity_by_class.get(attr_value).setDistribution(facts_in_class);
+		
+	}
+	public String toString() {
+		StringBuffer sb_out = new StringBuffer("\nCondClassDist: attr: "+cond_attr.getFName()+" total num: "+ this.getTotal() + "\n") ;
+		for (int c_idx = 0; c_idx<cond_attr.getCategoryCount(); c_idx++) {
+			Object attr_category = cond_attr.getCategory(c_idx);
+			ClassDistribution td = cond_quantity_by_class.get(attr_category);
+			sb_out.append("(ATTR:"+attr_category+ "=> "+ td +")");
+		}
+		return sb_out.toString();
+	}	
+
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/CondClassDistribution.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/CrossValidation.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/CrossValidation.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/CrossValidation.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,209 @@
+package org.drools.learner.eval;
+
+
+import java.util.ArrayList;
+
+import org.drools.learner.DecisionTree;
+import org.drools.learner.InstanceList;
+import org.drools.learner.Stats;
+import org.drools.learner.builder.Learner;
+import org.drools.learner.builder.SingleTreeTester;
+import org.drools.learner.tools.LoggerFactory;
+import org.drools.learner.tools.SimpleLogger;
+import org.drools.learner.tools.Util;
+
+public class CrossValidation implements Estimator{
+
+	private static SimpleLogger flog = LoggerFactory.getUniqueFileLogger(CrossValidation.class, SimpleLogger.DEFAULT_LEVEL);
+	private static SimpleLogger slog = LoggerFactory.getSysOutLogger(CrossValidation.class, SimpleLogger.DEBUG);
+	
+	private int k_fold, num_instances;
+	
+	private final int MIN_NUM_FOLDS = 2;
+	
+	/* estimated values 
+	 * validation_error_estimate is used to estimate the true misclassification rate
+	 * */
+	private double validation_error_estimate, training_error_estimate, num_leaves_estimate, alpha_estimate;
+	private int [] crossed_set;
+	private int [] [] fold_indices;
+	private ArrayList<DecisionTree> forest;
+	private InstanceList class_instances;
+	
+	private int VALID_SET_0 = 0, VALID_SET_1 = 1;
+	
+	private boolean WITH_REP = false;
+	public CrossValidation(int _k, InstanceList _instances) {
+		if (_k <=1) {
+			if (flog.warn() !=null)
+				flog.warn().log("There is 1 or less number of folds specified, i am setting "+MIN_NUM_FOLDS+" folds\n");
+			k_fold = MIN_NUM_FOLDS;
+		} else {
+			k_fold = _k;
+		}
+		forest = new ArrayList<DecisionTree> (k_fold);
+		validation_error_estimate = 0.0d;
+		training_error_estimate = 0.0d;
+		num_leaves_estimate = 0.0d;
+		alpha_estimate = 0.0d;
+		class_instances = _instances;
+		
+		num_instances = class_instances.getSize();
+		fold_indices = new int [k_fold] [2];
+	}
+	public int [] cross_set(int N) {
+
+		if (WITH_REP)
+			return Util.bag_w_rep(N, N);
+		else
+			return Util.bag_wo_rep(N, N);
+	}
+	
+	
+	// for small samples
+	public void validate(Learner _trainer) {		
+		if (class_instances.getTargets().size()>1 ) {
+			//throw new FeatureNotSupported("There is more than 1 target candidates");
+			if (flog.error() !=null)
+				flog.error().log("There is more than 1 target candidates\n");
+			System.exit(0);
+			// TODO put the feature not supported exception || implement it
+		}
+
+		crossed_set = cross_set(num_instances);
+		
+		// N-fold 
+		calc_fold_indices(num_instances);
+		
+		int i = 0;
+//			int[] bag;		
+		while (i++ < k_fold ) {
+			int fold_size = getFoldSize(i);
+			if (slog.debug() !=null)
+				slog.debug().log("i "+(i-1)+"/"+k_fold);
+			ArrayList<InstanceList> sets = getFold(i-1);
+			InstanceList learning_set = sets.get(0);
+			InstanceList validation_set = sets.get(1);
+						
+			DecisionTree dt = _trainer.train_tree(learning_set);
+			dt.setID(i-1);
+			forest.add(dt);
+			
+			int error = 0;
+			SingleTreeTester t= new SingleTreeTester(dt);
+			if (slog.debug() !=null)
+				slog.debug().log("validation fold_size " +fold_size + "\n");
+			for (int index_i = 0; index_i < fold_size; index_i++) {
+				
+				if (slog.warn() !=null)
+					slog.warn().log(" validation index_i " +index_i + (index_i ==fold_size -1?"\n":""));
+				Integer result = t.test(validation_set.getInstance(index_i));
+				if (result == Stats.INCORRECT) {
+					error ++;
+				}
+			}
+			dt.setValidationError(error);
+			dt.calc_num_node_leaves(dt.getRoot());
+			
+			if (slog.error() !=null)
+				slog.error().log("The estimate of : "+(i-1)+" training=" +dt.getTrainingError() +" valid=" + error +" num_leaves=" + dt.getRoot().getNumLeaves()+"\n");
+		
+			validation_error_estimate += (double)error/(double)k_fold;
+			training_error_estimate += (double)dt.getTrainingError()/(double)k_fold;
+			num_leaves_estimate += (double)dt.getRoot().getNumLeaves()/(double)k_fold;
+
+
+//			if (slog.stat() !=null)
+//				slog.stat().stat("."+ (i == k_fold?"\n":""));
+
+		}
+		alpha_estimate = (validation_error_estimate - training_error_estimate) /num_leaves_estimate;
+		if (slog.stat() !=null)
+			slog.stat().log(" The estimates: training=" +training_error_estimate +" valid=" + validation_error_estimate +" num_leaves=" + num_leaves_estimate+ " the alpha"+ alpha_estimate+"\n");
+		// TODO how to compute a best tree from the forest
+	}
+	
+	private void calc_fold_indices(int num_instances2) {
+		// TODO Auto-generated method stub
+		System.out.println(num_instances2 + " by "+ k_fold);
+		int excess = num_instances2 % k_fold;
+		int fold_index = 0, divide_index = 0;
+		while (fold_index < k_fold) {
+			
+			fold_indices[fold_index][VALID_SET_0] = divide_index;
+			int fold_size = getFoldSize(fold_index); 
+			fold_indices[fold_index][VALID_SET_1] = fold_indices[fold_index][VALID_SET_0] +  fold_size -1;
+			
+			System.out.println(fold_indices[fold_index][VALID_SET_0] +" - "+ fold_indices[fold_index][VALID_SET_1]);
+			divide_index+= fold_size; 
+			fold_index++;
+		}
+		
+	}
+	public ArrayList<InstanceList> getFold(int i) {
+//		// first part divide = 0; divide < fold_size*i
+//		// the validation set divide = fold_size*i; divide < fold_size*(i+1)-1
+//		// last part divide = fold_size*(i+1); divide < N
+		int valid_fold_size = getFoldSize(i);
+		InstanceList learning_set = new InstanceList(class_instances.getSchema(), num_instances - valid_fold_size +1);
+		InstanceList validation_set = new InstanceList(class_instances.getSchema(), valid_fold_size);
+		for (int divide_index = 0; divide_index < num_instances; divide_index++){
+			
+			if (slog.info() !=null)
+				slog.info().log("index " +divide_index+ " fold_size" + valid_fold_size + " i "+i+" = from "+fold_indices[i][VALID_SET_0]+" to "+fold_indices[i][VALID_SET_1]+" num_instances "+num_instances+ "\n");
+			if (divide_index >= fold_indices[i][VALID_SET_0] && divide_index <= fold_indices[i][VALID_SET_1]) { // validation
+				// validation [fold_size*i, fold_size*(i+1))
+				if (slog.info() !=null)
+					slog.info().log("validation one " +divide_index+ "\n");
+				validation_set.addAsInstance(class_instances.getInstance(crossed_set[divide_index]));
+			} else { // learninf part 
+				learning_set.addAsInstance(class_instances.getInstance(crossed_set[divide_index]));
+			}
+		}
+		
+		ArrayList<InstanceList> lists = new ArrayList<InstanceList>(2);
+		lists.add(learning_set);
+		lists.add(validation_set);
+		return lists;
+		
+	}
+	
+//	public ArrayList<InstanceList> getFolds() {
+////		// first part divide = 0; divide < fold_size*i
+////		// the validation set divide = fold_size*i; divide < fold_size*(i+1)-1
+////		// last part divide = fold_size*(i+1); divide < N
+//		int fold_size = getFoldSize();
+//		InstanceList learning_set = new InstanceList(class_instances.getSchema(), num_instances - fold_size +1);
+//		InstanceList validation_set = new InstanceList(class_instances.getSchema(), fold_size);
+//		for (int divide_index = 0; divide_index < num_instances; divide_index++){
+//			if (divide_index >= fold_size*i && divide_index < fold_size*(i+1)-1) { // validation
+//				validation_set.addAsInstance(class_instances.getInstance(crossed_set[divide_index]));
+//			} else { // learninf part 
+//				learning_set.addAsInstance(class_instances.getInstance(crossed_set[divide_index]));
+//			}
+//		}
+//		
+//		ArrayList<InstanceList> lists = new ArrayList<InstanceList>(2);
+//		lists.add(learning_set);
+//		lists.add(validation_set);
+//		return lists;
+//		
+//	}
+	
+	
+	private int getFoldSize(int i) {
+		int excess = num_instances % k_fold;
+		return (int) num_instances/k_fold + (i < excess? 1:0);
+	}
+	public double getValidationErrorEstimate() {
+		return validation_error_estimate;
+	}
+	
+	public ArrayList<DecisionTree> getEstimators() {
+		return forest;
+	}
+	
+	public int getEstimatorSize() {
+		return k_fold;
+	}
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/CrossValidation.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/Entropy.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/Entropy.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/Entropy.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,205 @@
+package org.drools.learner.eval;
+
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.drools.learner.Domain;
+import org.drools.learner.Instance;
+import org.drools.learner.QuantitativeDomain;
+import org.drools.learner.tools.LoggerFactory;
+import org.drools.learner.tools.SimpleLogger;
+import org.drools.learner.tools.Util;
+
+public class Entropy implements Heuristic{
+	
+	private static SimpleLogger flog = LoggerFactory.getUniqueFileLogger(Entropy.class, SimpleLogger.DEFAULT_LEVEL);
+	//public Entropy
+	/* 
+	 * - chooses the best attribute,
+	 * - return the choosen attributes evaluation results (information gain and/or gain ratio)
+	 * can process categorical, and quantitative attribute domains
+	 * 
+	 * used by:
+	 * c45Alternator, c45Learner, c45Iterator
+	 */
+	protected double data_eval; 
+	protected InstDistribution insts_by_target;
+	protected ArrayList<Instance> sorted_instances;
+	protected Domain domain;
+
+	public Entropy() {
+		//
+	}
+	
+	public void init(InstDistribution _insts_by_target) {
+		insts_by_target = _insts_by_target;
+		data_eval = calc_info(insts_by_target);
+		sorted_instances = null;
+		domain = null;
+	}
+	
+	
+	public double getEval(Domain attr_domain) {
+		CondClassDistribution insts_by_attr = info_attr(attr_domain);	
+		return data_eval - Entropy.calc_info_attr(insts_by_attr);
+	}
+	
+	public double getEval_cont(Domain attr_domain) {
+		
+		double attribute_eval= 0.0d;
+		QuantitativeDomain trialDomain = QuantitativeDomain.createFromDomain(attr_domain);
+
+		Categorizer visitor = new Categorizer(insts_by_target);
+		visitor.findSplits(trialDomain);
+
+		//	trial domain is modified				
+		if (trialDomain.getNumIndices() > 1) {
+			CondClassDistribution insts_by_attr = info_contattr(visitor); //.getSortedInstances(), trialDomain);
+			attribute_eval = data_eval - Entropy.calc_info_attr(insts_by_attr);
+		}
+		domain = trialDomain;
+		sorted_instances = visitor.getSortedInstances();
+		return attribute_eval;
+	}
+	
+	public double getDataEval() {
+		return data_eval;
+	}
+	
+	public Domain getDomain() {
+		return domain;
+	}
+	
+	public ArrayList<Instance> getSortedInstances() {
+		return sorted_instances;
+	}
+
+	public double getWorstEval() {
+		return -1000;
+	}
+	
+	public CondClassDistribution info_attr(Domain attr_domain) {
+		
+		Domain target_domain = insts_by_target.getClassDomain();
+		
+		//flog.debug("What is the attributeToSplit? " + attr_domain);
+
+		/* initialize the hashtable */
+		CondClassDistribution insts_by_attr = new CondClassDistribution(attr_domain, target_domain);
+		insts_by_attr.setTotal(insts_by_target.getSum());
+		
+		//flog.debug("Cond distribution for "+ attr_domain + " \n"+ insts_by_attr);
+		
+		for (int category = 0; category<target_domain.getCategoryCount(); category++) {
+			Object targetCategory = target_domain.getCategory(category); 
+			
+			for (Instance inst: insts_by_target.getSupportersFor(targetCategory)) {
+				Object inst_attr_category = inst.getAttrValue(attr_domain.getFReferenceName());
+				
+				Object inst_class = inst.getAttrValue(target_domain.getFReferenceName());
+				
+				if (!targetCategory.equals(inst_class)) {
+					if (flog.error() != null)
+						flog.error().log("How the fuck they are not the same ? "+ targetCategory + " " + inst_class);
+					System.exit(0);
+				}
+				insts_by_attr.change(inst_attr_category, targetCategory, inst.getWeight()); //+1
+				
+			}
+		}
+		
+		return insts_by_attr;
+	}
+	
+	
+	/* calculates the information of a quantitative domain given the split indexes of instances 
+	 * a wrapper for the quantitative domain to be able to calculate the stats
+	 * */
+	//public static double info_contattr(InstanceList data, Domain targetDomain, QuantitativeDomain splitDomain) {
+	public CondClassDistribution info_contattr(Categorizer visitor) {
+		
+		List<Instance> data = visitor.getSortedInstances();
+		QuantitativeDomain splitDomain = visitor.getSplitDomain();
+		Domain targetDomain = insts_by_target.getClassDomain();
+		String targetAttr = targetDomain.getFReferenceName();
+		
+		CondClassDistribution instances_by_attr = new CondClassDistribution(splitDomain, targetDomain);
+		instances_by_attr.setTotal(data.size());
+		
+		int index = 0;
+		int split_index = 0;
+		Object attr_key = splitDomain.getCategory(split_index);
+		for (Instance i : data) {
+			
+			if (index == splitDomain.getSplit(split_index).getIndex()+1 ) {
+				attr_key = splitDomain.getCategory(split_index+1);
+				split_index++;	
+			}
+			Object targetKey = i.getAttrValue(targetAttr);
+			instances_by_attr.change(attr_key, targetKey, i.getWeight());	//+1
+			
+			index++;
+		}
+		
+		return instances_by_attr;
+//		double sum = calc_info_attr(instances_by_attr);
+//		return sum;
+		
+	}
+	
+	/*
+	 * for both 
+	 */
+	public static double calc_info_attr( CondClassDistribution instances_by_attr) {
+		//Collection<Object> attributeValues = instances_by_attr.getAttributes();
+		double data_size = instances_by_attr.getTotal();
+		double sum = 0.0;
+		if (data_size>0)
+			for (int attr_idx=0; attr_idx<instances_by_attr.getNumCondClasses(); attr_idx++) {
+				Object attr_category = instances_by_attr.getCondClass(attr_idx);
+				double total_num_attr = instances_by_attr.getTotal_AttrCategory(attr_category);
+
+				if (total_num_attr > 0) {
+					double prob = total_num_attr / data_size;
+					//flog.debug("{("+total_num_attr +"/"+data_size +":"+prob +")* [");
+					double info =  calc_info(instances_by_attr.getDistributionOf(attr_category));
+
+					sum += prob * info;
+					//flog.debug("]} ");
+				}
+			}
+		//flog.debug("\n == "+sum);
+		return sum;
+	}
+	
+	/* you can calculate this before */
+	/**
+	 * it returns the information value of facts entropy that characterizes the
+	 * (im)purity of an arbitrary collection of examples
+	 * 
+	 * @param quantity_by_class the distribution of the instances by the class attribute (target)
+	 */
+	public static double calc_info(ClassDistribution quantity_by_class) {
+		
+		double data_size = quantity_by_class.getSum();
+		
+		double prob, sum = 0;
+		Domain target_domain = quantity_by_class.getClassDomain();
+		if (data_size > 0)
+		for (int category = 0; category<target_domain.getCategoryCount(); category++) {
+			
+			Object targetCategory = target_domain.getCategory(category);
+			double num_in_class = quantity_by_class.getVoteFor(targetCategory);
+
+			if (num_in_class > 0) {
+				prob = num_in_class / data_size;
+				/* TODO what if it is a sooo small number ???? */
+				//flog.debug("("+num_in_class+ "/"+data_size+":"+prob+")" +"*"+ Util.log2(prob) + " + ");
+				sum -=  prob * Util.log2(prob);
+			}
+		}
+		//flog.debug("= " +sum);
+		return sum;
+	}
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/Entropy.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/Estimator.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/Estimator.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/Estimator.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,15 @@
+package org.drools.learner.eval;
+
+import java.util.ArrayList;
+
+import org.drools.learner.DecisionTree;
+import org.drools.learner.InstanceList;
+
+public interface Estimator {
+
+	public int getEstimatorSize();
+	public ArrayList<DecisionTree> getEstimators();
+	public ArrayList<InstanceList> getFold(int id);
+	
+	public double getValidationErrorEstimate();
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/Estimator.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/GainRatio.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/GainRatio.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/GainRatio.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,71 @@
+package org.drools.learner.eval;
+
+import org.drools.learner.Domain;
+import org.drools.learner.QuantitativeDomain;
+import org.drools.learner.tools.Util;
+
+public class GainRatio extends Entropy implements Heuristic{
+
+	public GainRatio() {
+		super();
+	}
+
+
+	public double getEval(Domain attr_domain) {
+		CondClassDistribution insts_by_attr = super.info_attr(attr_domain);
+		double info_gain = super.data_eval - Entropy.calc_info_attr(insts_by_attr);
+	
+		double split_info = GainRatio.split_info(insts_by_attr);
+		
+		System.err.println("(GainRatio) info_gain = "+ info_gain + "/"+ split_info);
+		return info_gain /split_info;
+	}
+
+	public double getEval_cont(Domain attr_domain) {
+		
+		double attribute_eval= 0.0d, split_info = 1.0d;
+		QuantitativeDomain trialDomain = QuantitativeDomain.createFromDomain(attr_domain);
+
+		Categorizer visitor = new Categorizer(insts_by_target);
+		visitor.findSplits(trialDomain);
+
+		// trial domain is modified				
+		if (trialDomain.getNumIndices() > 1) {
+			CondClassDistribution insts_by_attr = super.info_contattr(visitor);
+			attribute_eval = super.data_eval - Entropy.calc_info_attr(insts_by_attr);
+			
+			split_info = GainRatio.split_info(insts_by_attr);
+		}
+		domain = trialDomain;
+		sorted_instances = visitor.getSortedInstances();
+		return attribute_eval / split_info;
+	}
+	
+	private static double split_info( CondClassDistribution instances_by_attr) {
+		//Collection<Object> attributeValues = instances_by_attr.getAttributes();
+		double data_size = instances_by_attr.getTotal();
+		double sum = 1.0;
+		if (data_size>0) {
+			for (int attr_idx = 0; attr_idx < instances_by_attr.getNumCondClasses(); attr_idx++) {
+				Object attr_category = instances_by_attr.getCondClass(attr_idx);
+				double num_in_attr = instances_by_attr.getTotal_AttrCategory(attr_category);
+
+				if (num_in_attr > 0.0) {
+					double prob = num_in_attr / data_size;
+					sum -= prob * Util.log2(prob);
+				}
+			}
+		} else {
+			System.err.println("????? data_size = "+ data_size);
+			System.exit(0);
+		}
+			
+		//flog.debug("\n == "+sum);
+		return sum;
+	}
+	
+
+
+
+
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/GainRatio.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/GlobalCategorizer.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/GlobalCategorizer.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/GlobalCategorizer.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,116 @@
+package org.drools.learner.eval;
+
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.List;
+
+import org.drools.learner.DecisionTree;
+import org.drools.learner.Domain;
+import org.drools.learner.Instance;
+import org.drools.learner.InstanceList;
+import org.drools.learner.Memory;
+import org.drools.learner.QuantitativeDomain;
+import org.drools.learner.tools.FeatureNotSupported;
+import org.drools.learner.tools.LoggerFactory;
+import org.drools.learner.tools.SimpleLogger;
+
+public class GlobalCategorizer {
+	
+	private static SimpleLogger flog = LoggerFactory.getUniqueFileLogger(GlobalCategorizer.class, SimpleLogger.DEFAULT_LEVEL);
+	private static SimpleLogger slog = LoggerFactory.getSysOutLogger(GlobalCategorizer.class, SimpleLogger.DEFAULT_LEVEL);
+
+	public GlobalCategorizer(Memory mem) {
+		InstanceList class_instances = mem.getClassInstances();
+
+		if (class_instances.getTargets().size()>1) {
+			//throw new FeatureNotSupported("There is more than 1 target candidates");
+			if (flog.error() !=null)
+				flog.error().log("There is more than 1 target candidates");
+			
+			System.exit(0);
+			// TODO put the feature not supported exception || implement it
+		}
+		build(class_instances);
+		
+	
+	}
+	
+	public void build(InstanceList working_instances) {
+		
+		Iterator<String> it_target= working_instances.getTargets().iterator();
+		String target = it_target.next();
+		
+		DecisionTree dt = new DecisionTree(working_instances.getSchema(), target);
+
+		//flog.debug("Num of attributes: "+ dt.getAttrDomains().size());
+		
+		InstDistribution stats_by_class = new InstDistribution(dt.getTargetDomain());
+		stats_by_class.calculateDistribution(working_instances.getInstances());
+		dt.FACTS_READ += working_instances.getSize();//
+
+		categorize(stats_by_class, dt.getAttrDomains());
+		//flog.debug("Result tree\n" + dt);
+		return;// dt;
+	}
+	
+	public void categorize(InstDistribution insts_by_target, List<Domain> attr_domains) {
+
+		for (int attr_idx = 0 ; attr_idx< attr_domains.size(); attr_idx++) {
+			Domain attr_domain = attr_domains.get(attr_idx);
+			/* No need to clone the domain as soon as no need to change the domain
+			 * All domains are categorical so i will use them the way they are
+			 */
+			if (attr_domain.isCategorical()) {
+				// do nothing
+			} else {
+//				the continuous domain
+
+				QuantitativeDomain trialDomain = QuantitativeDomain.createFromDomain(attr_domain);
+				Categorizer visitor = new Categorizer(insts_by_target);
+				visitor.findSplits(trialDomain);
+
+//				trial domain is modified				
+				if (trialDomain.getNumIndices()==1) {
+				} else {					
+				}
+				
+				InformationContainer categorized_eval = new InformationContainer();
+				categorized_eval.domain =  trialDomain;
+				categorized_eval.sorted_data = visitor.getSortedInstances();
+			
+				
+				Hashtable<Object, InstDistribution> filtered_stats = null;
+				try {
+					filtered_stats = insts_by_target.split(categorized_eval);
+					
+					/* need to create a fake domain from trial domain 
+					 * with possible number of values = trialDomain.trialDomain.getNumIndices();
+					 */
+					trialDomain.setFName(attr_domain.getFReferenceName()+"_fake");	// TODO how do we know whose fake copy is that domain
+					trialDomain.setCategorical(true);
+					
+					for (Object category: filtered_stats.keySet()) {
+						InstDistribution category_dist = filtered_stats.get(category);
+						
+						for (int target_cat = 0; target_cat<insts_by_target.getClassDomain().getCategoryCount(); target_cat++) {
+							Object targetCategory = insts_by_target.getClassDomain().getCategory(target_cat); 
+							for (Instance i : category_dist.getSupportersFor(targetCategory)) {
+								i.setAttr(attr_domain.getFReferenceName()+"_fake", category);
+							}
+						}
+						
+						
+					}
+					attr_domains.add(trialDomain);
+					
+				} catch (FeatureNotSupported e) {
+					// TODO Auto-generated catch block
+					e.printStackTrace();
+				}
+			
+			}
+		}
+		return;
+	}
+
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/GlobalCategorizer.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/Heuristic.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/Heuristic.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/Heuristic.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,31 @@
+package org.drools.learner.eval;
+
+import java.util.ArrayList;
+
+import org.drools.learner.Domain;
+import org.drools.learner.Instance;
+
+
+public interface Heuristic {
+	
+	public void init(InstDistribution _insts_by_target);
+	
+	public double getEval(Domain attr_domain);
+	public double getEval_cont(Domain attr_domain);
+	
+	public Domain getDomain();
+	public ArrayList<Instance> getSortedInstances();
+
+	public double getWorstEval();
+	
+//	public abstract double info_attr(InstDistribution insts_by_target, Domain attr_domain);
+//	public abstract double info_contattr(List<Instance> data, Domain targetDomain, QuantitativeDomain splitDomain);
+//	
+//	public abstract double calc_info_attr( CondClassDistribution instances_by_attr);
+//	public abstract double calc_info(ClassDistribution quantity_by_class);
+
+	
+	
+
+
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/Heuristic.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/InformationContainer.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/InformationContainer.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/InformationContainer.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,28 @@
+package org.drools.learner.eval;
+
+import java.util.ArrayList;
+
+import org.drools.learner.Domain;
+import org.drools.learner.Instance;
+
+public class InformationContainer {
+	
+	public Domain domain;
+	public double attribute_eval;
+	//public double gain_ratio;
+	public ArrayList<Instance> sorted_data;
+	
+	public InformationContainer() {
+		domain = null;
+		attribute_eval = 0.0;
+		sorted_data = null;
+
+	}
+	
+//	public InformationContainer(Domain _domain, double _attribute_eval, double _gain_ratio) {
+//		this.domain = _domain;
+//		this.attribute_eval = _attribute_eval;
+//		this.gain_ratio = _gain_ratio;
+//	}
+
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/InformationContainer.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/InstDistribution.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/InstDistribution.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/InstDistribution.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,189 @@
+package org.drools.learner.eval;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Hashtable;
+import java.util.List;
+
+import org.drools.learner.Domain;
+import org.drools.learner.Instance;
+import org.drools.learner.QuantitativeDomain;
+import org.drools.learner.tools.FeatureNotSupported;
+import org.drools.learner.tools.LoggerFactory;
+import org.drools.learner.tools.SimpleLogger;
+import org.drools.learner.tools.Util;
+
+/* addition to the ClassDistribution 
+ * it keeps the instances themselves by their target value in an hashmap */
+public class InstDistribution extends ClassDistribution{
+	
+	private static SimpleLogger flog = LoggerFactory.getUniqueFileLogger(InstDistribution.class, SimpleLogger.DEFAULT_LEVEL);
+	private static SimpleLogger slog = LoggerFactory.getSysOutLogger(InstDistribution.class, SimpleLogger.DEFAULT_LEVEL);
+
+	private String attr_sum = Util.sum();
+	private Hashtable<Object, List<Instance>> instance_by_class;
+	
+	//private Hashtable<Object, List<Instance>>
+	
+	public InstDistribution(Domain targetDomain) {
+		super(targetDomain);
+		
+		instance_by_class = new Hashtable<Object, List<Instance>>(targetDomain.getCategoryCount());
+		for (int t=0; t<targetDomain.getCategoryCount(); t++) {
+			Object obj_t = targetDomain.getCategory(t);
+			instance_by_class.put(obj_t, new ArrayList<Instance>());
+		}
+	}
+	
+	public void calculateDistribution(List<Instance> instances){
+		double data_size = 0.0;
+		String tName = super.getClassDomain().getFReferenceName();
+		if (slog.debug() != null)
+			slog.debug().log("tName : " +tName + "\n");
+		for (Instance inst : instances) {
+			if (slog.debug() != null)
+				slog.debug().log("inst : " +inst + "\n");
+			data_size += inst.getWeight();
+			
+			Object target_key = inst.getAttrValue(tName);
+			super.change(target_key, inst.getWeight());		// add inst.getWeight() vote for the target value of the instance : target_key
+			//super.change(attr_sum, inst.getWeight());		// ?????
+			
+			this.addSupporter(target_key, inst);
+		}
+		//super.change(attr_sum, data_size);	// TODO should i write special function for changing the sum 
+		super.setSum(data_size);
+	}
+
+	public List<Instance> getSupportersFor(Object category) {
+		return instance_by_class.get(category);
+	}
+	
+	private void addSupporter(Object target_category, Instance inst) {
+		this.instance_by_class.get(target_category).add(inst);
+	}
+	
+	
+	private Hashtable<Object, InstDistribution> instantiateLists(Domain splitDomain) {		
+		Domain target_domain = super.getClassDomain();
+		Hashtable<Object, InstDistribution> instLists = new Hashtable<Object, InstDistribution>(splitDomain.getCategoryCount());
+		for (int c=0; c<splitDomain.getCategoryCount(); c++) {
+			Object category = splitDomain.getCategory(c);
+			instLists.put(category, new InstDistribution(target_domain));
+		}
+		return instLists;
+	}
+	
+	/* spliting during the training for C45TreeIterator */
+	public Hashtable<Object, InstDistribution> split(InformationContainer splitDomainEval) throws FeatureNotSupported {
+		Domain splitDomain = splitDomainEval.domain;
+		Hashtable<Object, InstDistribution> instLists = this.instantiateLists(splitDomain);
+		
+		if (splitDomain.isCategorical()) {	
+			this.splitFromCategorical(splitDomain, instLists);
+		} else {
+			if (splitDomain instanceof QuantitativeDomain && splitDomainEval.sorted_data != null) {
+				QuantitativeDomain q_splitDomain = (QuantitativeDomain) splitDomain;
+				
+				
+				//Collections.sort(facts, choosenDomain.factComparator()); /* hack*/
+				this.splitFromQuantitative(splitDomainEval.sorted_data, q_splitDomain, instLists);
+			}
+			else {
+				throw new FeatureNotSupported("Can not split a quatitative domain if it's object type is not QuantitativeDomain "+splitDomain);
+			}
+			
+		}
+		
+		return instLists;
+	}
+
+	
+	public Hashtable<Object, InstDistribution> splitFromCategorical(
+			Domain splitDomain, Hashtable<Object, InstDistribution> instLists) {
+		if (instLists == null)
+			instLists = this.instantiateLists(splitDomain);
+		
+		Domain target_domain = super.getClassDomain();
+		String attrName = splitDomain.getFReferenceName();
+		for (int category = 0; category<target_domain.getCategoryCount() ; category++) {
+			Object targetCategory = target_domain.getCategory(category); 
+			//this.calculateDistribution(this.getSupportersFor(targetCategory));
+			
+			for (Instance inst: this.getSupportersFor(targetCategory)) {
+				Object inst_attr_category = inst.getAttrValue(attrName);
+				
+				instLists.get(inst_attr_category).change(targetCategory, inst.getWeight());	// add one for vote for the target value : target_key
+				instLists.get(inst_attr_category).change(attr_sum, inst.getWeight());
+				instLists.get(inst_attr_category).addSupporter(targetCategory, inst);
+				
+			}
+		}
+		return instLists;
+	}
+	
+	private void splitFromQuantitative(ArrayList<Instance> data, 
+				QuantitativeDomain attributeDomain, Hashtable<Object, InstDistribution> instLists) {
+		
+		String attributeName = attributeDomain.getFName();
+		String targetName = super.getClassDomain().getFReferenceName();
+		
+		//flog.debug("FactProcessor.splitFacts_cont() attr_split "+ attributeName);
+
+		
+		int start_point = 0;
+		for (int index = 0; index < attributeDomain.getNumIndices(); index ++) {
+			int integer_index = attributeDomain.getSplit(index).getIndex(); //splits_it.next().intValue();
+			
+			Object inst_attr_category = attributeDomain.getSplit(index).getValue(); //splitValues.get(index);
+			//System.out.println("FactProcessor.splitFacts_cont() new category: "+ category);
+
+			try {
+
+				//flog.debug("FactProcessor.splitFacts_cont() new category: "+ inst_attr_category+
+				//		" ("+start_point+","+integer_index+")");
+				
+				List<Instance> data_at_category = data.subList(start_point, integer_index+1);
+				for (Instance inst: data_at_category) {
+					
+					Object targetCategory = inst.getAttrValue(targetName);
+					
+					instLists.get(inst_attr_category).change(targetCategory, inst.getWeight());	// add one for vote for the target value : target_key
+					instLists.get(inst_attr_category).change(attr_sum, inst.getWeight());
+					instLists.get(inst_attr_category).addSupporter(targetCategory, inst);
+				}
+				start_point = integer_index+1;
+
+			} catch (Exception e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+		}
+	}
+
+	public void missClassifiedInstances(HashSet<Instance> missclassification) {
+		Object winner = super.get_winner_class();
+		
+		for (int idx = 0; idx < super.target_attr.getCategoryCount(); idx++) {
+			Object looser = super.target_attr.getCategory(idx);
+			double num_supp = this.getVoteFor(looser);
+			
+			if ((num_supp > 0) && !winner.equals(looser)) {
+				
+				//System.out.println(Util.ntimes("DANIEL", 2)+ " one looser ? "+looser + " num of sup="+num_supp);
+				//System.out.println(" the num of supporters = "+ stats.getVoteFor(looser));
+				//System.out.println(" but the guys "+ stats.getSupportersFor(looser));
+				//System.out.println("How many bok: "+stats.getSupportersFor(looser).size());
+				missclassification.addAll(getSupportersFor(looser));
+			} else {
+				//System.out.println(Util.ntimes("DANIEL", 5)+ "how many times matching?? not a looser "+ looser );
+			}
+		}
+		
+	}
+	
+	
+	
+}
+
+


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/InstDistribution.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/SplitPoint.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/SplitPoint.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/SplitPoint.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,26 @@
+package org.drools.learner.eval;
+
+public class SplitPoint {
+	
+	private int index;
+	private Object cut_point;
+	private double info_value;
+	
+	public SplitPoint(int _index, Object _point) {
+		this.index = _index;
+		this.cut_point = _point;
+	}
+	
+	public Object getValue() {
+		return cut_point;
+	}
+	
+	public int getIndex() {
+		return index;
+	}
+	
+	public void setInformationValue(double info_sum) {
+		this.info_value = info_sum;
+	}
+
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/SplitPoint.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/ClassAnnotation.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/ClassAnnotation.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/ClassAnnotation.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,8 @@
+package org.drools.learner.tools;
+import java.lang.annotation.*;
+
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target({ElementType.TYPE})
+public @interface ClassAnnotation {
+	String label_element() default "";
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/ClassAnnotation.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/ClassLogger.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/ClassLogger.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/ClassLogger.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,92 @@
+package org.drools.learner.tools;
+
+import java.io.Writer;
+
+public class ClassLogger {
+
+	public static enum LogLevel { NO , STAT, ERROR, WARN, DEBUG, INF0}
+	private static final LogLevel DEFAULT_LEVEL = LogLevel.ERROR;
+	
+	/*
+	4 - info
+	3 - debug
+	2 - warning
+	1 - error
+	0 - nothing
+	*/
+	public LogLevel level = DEFAULT_LEVEL;
+
+	private Class<?> klass;
+	private  Writer w;
+
+	public ClassLogger(Class<?> _class,  Writer _w) {
+		klass =_class;
+		w= _w;
+	}
+	
+	public ClassLogger(Class<?> _class, Writer _w, LogLevel _level) {
+		klass = _class;
+		level = _level;
+		w = _w;
+	}
+	
+	
+	public void stat(String s) {
+		//if (level.compareTo(LogLevel.STAT) >= 0) {
+		if (level.ordinal() >= LogLevel.STAT.ordinal()) {
+			try {
+				w.write(s);
+				//w.flush();
+			} catch (Exception e) {
+				e.printStackTrace();
+			}
+		}
+	}
+	public void info(String s) {
+		//if (level.compareTo(LogLevel.INF0) >= 0) {
+		if (level.ordinal() >= LogLevel.INF0.ordinal()) {	
+			try {
+				w.write(("[info](" + klass.getSimpleName()  + ") " +s));
+				//w.flush();
+			} catch (Exception e) {
+				e.printStackTrace();
+			}
+		}
+	}
+	
+	public void debug(String s) {
+		//if (level.compareTo(LogLevel.DEBUG) >= 0) {
+		if (level.ordinal() >= LogLevel.DEBUG.ordinal()) {
+			try {
+				w.write(("[debug](" + klass.getSimpleName()  + ") " +s));
+				//w.flush();
+			} catch (Exception e) {
+				e.printStackTrace();
+			}
+		}
+	}
+
+	public void warn(String s) {
+		//if (level.compareTo(LogLevel.WARN) >= 0) {
+		if (level.ordinal() >= LogLevel.WARN.ordinal()) {
+			try {
+				w.write(("[warn](" + klass.getSimpleName()  + ") " +s));
+				//w.flush();
+			} catch (Exception e) {
+				e.printStackTrace();
+			}
+		}
+	}
+	
+	public void error(String s) {
+		//if (level.compareTo(LogLevel.ERROR) >= 0) {
+		if (level.ordinal() >= LogLevel.ERROR.ordinal()) {
+			try {
+				w.write(("[error](" + klass.getSimpleName()  + ") " +s));
+				//w.flush();
+			} catch (Exception e) {
+				e.printStackTrace();
+			}
+		}
+	}
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/ClassLogger.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/ClassStructure.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/ClassStructure.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/ClassStructure.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,76 @@
+package org.drools.learner.tools;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+
+import org.drools.learner.builder.Learner.DataType;
+
+public class ClassStructure {
+	private Class<?> klass, parent_klass;
+	
+	private ArrayList<Method> methods;
+	
+//	private ArrayList<Field> fields;
+//	private ArrayList<DataType> field_types;
+	private HashMap<Field, DataType> field_structure;
+	
+	private boolean done;
+	
+	public ClassStructure(Class<?> _klass) {
+		klass = _klass;
+		done = false;
+		field_structure = new HashMap<Field, DataType>();
+		methods = new ArrayList<Method>();
+	}
+	
+	
+	public void setDone() {
+		done = true;
+	}
+	public boolean isDone() {
+		return done;
+	}
+
+
+	public void addField(Field f, DataType type) {
+//		fields.add(f);
+//		field_types.add(type);
+		field_structure.put(f, type);
+	}
+
+	public Collection<Field> getFields() {
+		//return fields.iterator();
+		return field_structure.keySet();
+	}
+	
+	public DataType getFieldType(Field f) {
+		return field_structure.get(f);
+	}
+	public boolean hasLabel() {
+		return methods.size()>0;
+	}
+	public Collection<Method> getMethods() {
+		return methods;
+	}
+	public void addMethod(Method m) {
+		methods.add(m);
+	}
+	public Class<?> getOwnerClass() {
+		return klass;
+	}
+	
+	public Class<?> getParent() {
+		return parent_klass;
+	}
+	
+	public void setParent(Class<?> parent) {
+		parent_klass = parent;
+	}
+
+
+	
+	
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/ClassStructure.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/ClassVisitor.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/ClassVisitor.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/ClassVisitor.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,248 @@
+package org.drools.learner.tools;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.Stack;
+
+import org.drools.RuntimeDroolsException;
+import org.drools.base.ClassFieldAccessorCache;
+import org.drools.learner.Domain;
+import org.drools.learner.Schema;
+import org.drools.learner.builder.Learner;
+import org.drools.learner.builder.Learner.DataType;
+import org.drools.learner.builder.Learner.DomainAlgo;
+//import org.drools.spi.Extractor;ReadAccessor
+import org.drools.spi.ReadAccessor;
+
+public class ClassVisitor {
+	
+	private static SimpleLogger flog = LoggerFactory.getUniqueFileLogger(ClassVisitor.class, SimpleLogger.WARN);
+	private static SimpleLogger slog = LoggerFactory.getSysOutLogger(ClassVisitor.class, SimpleLogger.WARN);
+	
+	
+	//private static ClassFieldExtractorCache cache = ClassFieldExtractorCache.getInstance();
+	private static ClassFieldAccessorCache cache = ClassFieldAccessorCache.getInstance();
+	
+	private DomainAlgo domain_type = Learner.DEFAULT_DOMAIN;
+	private DataType data_type = Learner.DEFAULT_DATA;
+
+	private Schema class_schema;
+	private Stack<Field> class_relation;
+
+	private boolean TARGET_FOUND;
+	private boolean MULTIPLE_TARGETS = false;
+	
+	
+	public ClassVisitor (DomainAlgo _domain_type, DataType _data_type) {
+		domain_type = _domain_type;
+		data_type = _data_type;
+		
+	}
+	
+	public ClassVisitor (Schema _class_schema, DomainAlgo _domain_type, DataType _data_type) {
+		domain_type = _domain_type;
+		data_type = _data_type;
+
+		this.class_schema = _class_schema;
+	}
+	
+	public void visit() throws FeatureNotSupported {
+//		this.all_klasses = new HashMap<Class<?>,ClassStructure>();
+		TARGET_FOUND = false;
+		class_relation =  new Stack<Field>();
+		getStructuredSuperFields(class_schema.getObjectClass()/*, null*/);		 
+			
+		return;
+	}
+	
+	public HashMap<Class<?>,ClassStructure> getStructure() {
+		return class_schema.getClassStructure();
+	}
+	
+	public void getStructuredSuperFields(Class<?> clazz/*, Class<?> owner_clazz*/){
+		if (slog.debug() != null)
+			slog.debug().log("On the class "+ clazz+  " the structure exists "+ class_schema.getClassStructure().containsKey(clazz));
+		if (class_schema.getClassStructure().containsKey(clazz) && class_schema.getClassStructure().get(clazz).isDone())
+			return;
+		// process if the parent_klass.equals(Object.class) ?????
+		ClassStructure structure = new ClassStructure(clazz);
+		if (MULTIPLE_TARGETS || !TARGET_FOUND)
+			processClassLabel(structure);
+		class_schema.putStructure(clazz, structure);
+		
+		// get the fields declared in the class
+		Field [] element_fields = clazz.getDeclaredFields(); //clazz.getFields();
+		for (Field f: element_fields) {
+			try {
+				decomposeField(structure, f /*, owner_clazz*/);
+			} catch (FeatureNotSupported e) {
+				if (slog.error() != null)
+					slog.error().log("FeatureNotSupported "+e+")\n");
+				
+			}
+		}	
+		structure.setDone();
+		Class<?> parent_klass = clazz.getSuperclass();
+		structure.setParent(parent_klass);
+		if (parent_klass.equals(Object.class))
+			return;
+		getStructuredSuperFields(parent_klass);
+		
+		return;
+	}
+	
+	public void decomposeField(ClassStructure structure, Field f/*, Class<?> owner_clazz*/) throws FeatureNotSupported {
+		
+//		if (slog.warn() != null)
+//			slog.warn().log("!!!!!!!!!The field "+f+"  " +f.getName()+ "\n");
+		// can get the field annotation
+		// if it is ignored do not do anything
+		FieldAnnotation f_spec = Util.getFieldAnnotations(f);
+		boolean skip_by_annotation = false;
+		if (f_spec != null) {
+			// the type of the fields that cannot be processed
+			if (!f_spec.ignore() && f.getType() == String.class && !f_spec.discrete()) {
+				throw new FeatureNotSupported("String categorization not supported");
+			}
+			switch (domain_type) {
+			case CATEGORICAL:	//ID3 can work only with categorical types
+				if (f_spec.ignore() || !f_spec.discrete())
+					skip_by_annotation = true;
+				break;
+			case QUANTITATIVE: // C45 can work with categorical || quantitative domain
+				if (f_spec.ignore())
+					skip_by_annotation = true;
+				break;
+			default:
+				if (f_spec.ignore())
+					skip_by_annotation = true;
+			}
+			// only if the annotations are given and the flag to ignore is set true 
+			// then continue to next field	
+			
+		}
+		// if there is a getter?
+		//if (Util.isGetter(m_name) & Util.isSimpleType(returns)) {
+		
+		if (!skip_by_annotation) {
+			String f_name= f.getName();		
+			Class<?> _obj_klass = structure.getOwnerClass();
+			String f_refName = Util.getFReference(_obj_klass, f_name);
+			DataType d_type = Util.getDataType(f.getType());	
+			
+			///////////
+			if (d_type != DataType.COLLECTION) { // TODO 
+				if (slog.warn() != null)
+					slog.warn().log("The field "+f_name+" of the obj klass:"+_obj_klass + " and the loader:" + _obj_klass.getClassLoader()+ "\n");
+				try {
+					ReadAccessor f_extractor;
+//					if (f_name.startsWith("get")) {//TODO check
+//						System.out.println(f_name.substring(3));
+//						f_extractor = cache.getAccessor( _obj_klass, f_name.substring(3) , _obj_klass.getClassLoader() );
+//					} else
+						f_extractor = cache.getAccessor( _obj_klass, f_name , _obj_klass.getClassLoader() );
+					
+					class_schema.putExtractor(f_refName, f_extractor);
+				
+					
+					structure.addField(f, d_type);	
+					switch (d_type) {    
+					case PRIMITIVE:		// domain will be created only for primitive types
+						Domain fieldDomain = new Domain(_obj_klass, f_name, f.getType());
+						//fieldDomain.setOwner(owner_clazz);
+						if (f_spec != null) {
+							fieldDomain.setCategorical(f_spec.discrete());	
+							if ((MULTIPLE_TARGETS || !TARGET_FOUND) && f_spec.target()) {	
+								class_schema.addTarget(f_refName);	
+								TARGET_FOUND = true;
+							}
+						}
+						Util.processDomain(fieldDomain, f.getType());
+						class_schema.putDomain(f_refName, fieldDomain);
+						for (Field parent_klass: class_relation)
+							class_schema.addParentField(f_refName, parent_klass);
+						break;
+					case STRUCTURED:	// the extractor is necessary for both types of data.	
+						class_relation.push(f);
+						getStructuredSuperFields(f.getType());//recurse on the structured 
+						class_relation.pop();
+						break;
+					default:
+						//throw new Exception("What type of data is this");	
+					}
+				} catch (RuntimeDroolsException  e) {
+					if (slog.warn() != null)
+						slog.warn().log("Exception e:"+ e +" skip\n");
+					if (flog.warn() != null)
+						flog.warn().log("Exception e:"+ e +" skip");
+				}
+			} else {	//case COLLECTION:
+				if (slog.warn() != null)
+					slog.warn().log("Case Collection(f_name "+f_name+" What is the obj klass:"+_obj_klass + ")\n");
+				throw new FeatureNotSupported("Can not deal with collections as an attribute");
+			}
+		}
+		return;
+	}
+
+	public void processClassLabel(ClassStructure clazz_structure) {
+
+		Class<?> clazz = clazz_structure.getOwnerClass();
+		/* Apperantly the getAnnotation function recurse on the superclasses
+		 * so use the getDeclaredAnnotations() not to recurse
+		*/
+		ClassAnnotation class_label = Util.getDecClassAnnotations(clazz);	
+		if (class_label != null && class_label.label_element() != "") {
+			// the targetting label is set, put the function that gets that value somewhere
+
+			try {
+				/* Apperantly the java function "getMethod()" recurses on the superclasses
+				 * i dont need to recurse myself
+					Method m =c.getDeclaredMethod(lab.label_element(), null);
+				 */
+				Method m = clazz.getMethod(class_label.label_element(), null);	
+				if (Util.isSimpleType(m.getReturnType())) {
+					String mName = class_label.label_element();
+//					if (mName.startsWith("get")) {//TODO check??
+//						mName = mName..toLowerCase();
+//					}
+					System.out.println(mName);
+					String f_refName = Util.getFReference(clazz, mName); // class.name + "@" + label
+					Domain fieldDomain = new Domain(clazz, mName, m.getReturnType());
+					fieldDomain.setArtificial(true);
+					Class<?> method_class = m.getReturnType();	
+					
+					Util.processDomain(fieldDomain, method_class);
+					clazz_structure.addMethod(m);
+					class_schema.putDomain(f_refName, fieldDomain);
+
+					ReadAccessor m_extractor = new PseudoFieldExtractor(clazz, m);
+					//cache.getExtractor( clazz, lab.label_element(), clazz.getClassLoader() );
+					class_schema.putExtractor(f_refName, m_extractor);
+					if (!MULTIPLE_TARGETS)
+						class_schema.clearTargets();
+					class_schema.addTarget(f_refName);
+					TARGET_FOUND = true;
+					if (slog.warn() != null)
+						slog.warn().log("!!!!!:processClassLabel: TARGET FOUND "+f_refName+" "+class_label.label_element() + ")\n");
+					
+					//break; // if the ClassAnnotation is found then stop
+				}
+
+			} catch (SecurityException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			} catch (NoSuchMethodException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+		}
+	}
+
+	public boolean isTargetFound() {
+		// TODO Auto-generated method stub
+		return TARGET_FOUND;
+	}	
+
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/ClassVisitor.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/FeatureNotSupported.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/FeatureNotSupported.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/FeatureNotSupported.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,14 @@
+package org.drools.learner.tools;
+
+public class FeatureNotSupported extends Exception {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public FeatureNotSupported(String string) {
+		super(string);
+	}
+
+}
\ No newline at end of file


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/FeatureNotSupported.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/FieldAnnotation.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/FieldAnnotation.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/FieldAnnotation.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,13 @@
+package org.drools.learner.tools;
+
+import java.lang.annotation.*;
+
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target({ElementType.METHOD, ElementType.FIELD})
+public @interface FieldAnnotation {
+	    int readingSeq() default 0;
+	    boolean ignore() default false;
+	    boolean target() default false;
+	    boolean discrete() default true;
+	    String[] values() default {"bok"};
+}
\ No newline at end of file


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/FieldAnnotation.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/LogMethod.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/LogMethod.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/LogMethod.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,7 @@
+package org.drools.learner.tools;
+
+import java.io.Writer;
+
+public interface LogMethod {
+    void log(Object o, Writer w);
+}
\ No newline at end of file


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/LogMethod.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/Logger.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/Logger.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/Logger.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,71 @@
+package org.drools.learner.tools;
+
+import java.io.Writer;
+
+
+public class Logger {
+	public static enum LogLevel_ { NULL, STAT, ERROR, WARN, DEBUG, INFO; }
+
+	private static NullLogMethod null_log = new NullLogMethod();
+
+	private Writer writer;
+	private Class<?> klass;
+	private LogMethod stat_m = null_log, error_m = null_log, warn_m = null_log, 
+										debug_m = null_log, info_m  = null_log ;
+
+	public Logger(Class<?> _class, Writer w) {
+		klass = _class;
+		writer = w;
+	}
+	public void setVerbosity(LogLevel_ lvl) {
+//		switch (lvl) {
+//		case INFO:
+//			info_m = new SimpleLogMethod();;
+//		case DEBUG:
+//			debug_m = new SimpleLogMethod();
+//		case WARN:
+//			warn_m = new SimpleLogMethod();
+//		case ERROR:
+//			error_m = new SimpleLogMethod();
+//		case STAT:
+//			stat_m = new SimpleLogMethod();
+//		case NULL:
+//		}
+	}
+	
+	public void stat(Object o) {
+		stat_m.log(o, writer);//"[stat](" + klass.getSimpleName() + ") " + 
+	}
+	
+	public void error(Object o) {
+		error_m.log("[error](" + klass.getSimpleName() + ") " + o, writer);
+	}
+
+	public void warn(Object o) {
+		warn_m.log("[warn](" + klass.getSimpleName() + ") " + o, writer);
+	}
+
+	public void debug(Object o) {
+		debug_m.log("[debug](" + klass.getSimpleName() + ") " + o, writer);
+	}
+
+	public void info(Object o) {
+		info_m.log("[info](" + klass.getSimpleName() + ") " + o, writer);
+	}
+}
+
+
+class NullLogMethod implements LogMethod {
+	public void log(Object o, Writer w) {}
+}
+
+//class SimpleLogMethod implements LogMethod {
+//	public void log(Object o, Writer w) {
+//		try {
+//			w.write(o.toString());
+//			w.flush();
+//		} catch (Exception e) {
+//			e.printStackTrace();
+//		}
+//	}
+//}
\ No newline at end of file


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/Logger.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/LoggerFactory.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/LoggerFactory.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/LoggerFactory.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,129 @@
+package org.drools.learner.tools;
+
+import java.io.BufferedWriter;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.io.Writer;
+import java.util.HashMap;
+
+public class LoggerFactory {
+
+	private static StringWriter str_writer = new StringWriter();
+	private static BufferedWriter buffer = new BufferedWriter(str_writer);
+	private static HashMap<Class<?>, SimpleLogger> fileLoggers = new HashMap<Class<?>, SimpleLogger>();
+	
+	public static SimpleLogger getUniqueFileLogger(Class<?> klass, int level) {
+		SimpleLogger sl = fileLoggers.get(klass);
+		if (sl == null) {
+			sl = new SimpleLogger(level, new WriterLogger(klass, buffer));
+			fileLoggers.put(klass, sl);
+		}
+		return sl;
+	}
+
+	public static SimpleLogger getSysOutLogger(Class<?> klass, int level) {
+		return new SimpleLogger(level, new SysOutLogger(klass));
+	}
+	
+	public static SimpleLogger getFileLogger(Class<?> klass, int level, String fname) {
+		FileWriter file;
+		try {
+			file = new FileWriter("log/"+fname);
+			return new SimpleLogger(level, new WriterLogger(klass, file));
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		return null;
+	}
+
+	public static void dump_buffer(String file_sign, String directory) {
+		// TODO Auto-generated method stub
+		
+		int last_slash = file_sign.lastIndexOf('/');
+		String file_name = file_sign.substring(0, last_slash+1) + directory+file_sign.substring(last_slash)+"."+directory;
+		System.out.println("file "+ file_name+ " logged ");
+		
+		
+		PrintWriter writer;
+		try {
+			writer = new PrintWriter (new BufferedWriter (new FileWriter (file_name)));
+			buffer.flush();
+//			System.out.println("LOG1: "+ str_writer.getBuffer());	
+//			System.out.println("LOG2: "+ str_writer.getBuffer().toString());
+
+			writer.write(str_writer.getBuffer().toString()); //str_buffer.getBuffer());
+			str_writer.close();
+			buffer.close();
+			writer.flush();
+			// Close the BufferedWriter object and the underlying
+            // StringWriter object.
+			writer.close();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	
+	}
+
+}	
+
+class SysOutLogger implements LoggerInterface {
+	private Class<?> klass;
+	private String msg;
+	public SysOutLogger(Class<?> _klass) {
+		klass = _klass;
+	}
+	
+	public void setMsg(String _msg) {
+		msg = _msg;
+	}
+	public void stat(String s) {
+		System.out.print(s);
+	}
+	public void log(String s) {
+		System.out.print("["+msg + "] ("+klass.getSimpleName()+ ") "+ s);
+	}
+	public SysOutLogger clone() {
+		// TODO Auto-generated method stub
+		return new SysOutLogger(klass);
+	}
+}
+
+class WriterLogger implements LoggerInterface {
+	private Writer writer;
+	private Class<?> klass;
+	private String msg;
+	public WriterLogger(Class<?> _klass, Writer w) {
+		writer = w;
+		klass = _klass;
+	}
+	public void stat(String s) {
+		try {
+			writer.write(s);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	public void log(String s) {
+		try {
+			writer.write("["+msg + "] ("+klass.getSimpleName()+ ") "+ s);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	public void setMsg(String s) {
+		msg = s;
+		
+	}
+	@Override
+	public WriterLogger clone() {
+		// TODO Auto-generated method stub
+		return new WriterLogger(klass, writer);
+	}
+
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/LoggerFactory.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/LoggerInterface.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/LoggerInterface.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/LoggerInterface.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,10 @@
+package org.drools.learner.tools;
+
+public interface LoggerInterface {
+	void log(String s);
+	void stat(String s);
+	
+	void setMsg(String s) ;
+	
+	LoggerInterface clone();
+}
\ No newline at end of file


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/LoggerInterface.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/NumberComparator.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/NumberComparator.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/NumberComparator.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,17 @@
+package org.drools.learner.tools;
+
+import java.util.Comparator;
+
+public class NumberComparator  implements Comparator<Number> {
+	public NumberComparator() {
+	}
+
+	public int compare(Number n0, Number n1) {
+		if (n0.doubleValue() < n1.doubleValue())
+			return -1;
+		else if (n0.doubleValue() > n1.doubleValue())
+			return 1;
+		else
+			return 0;
+	}
+}
\ No newline at end of file


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/NumberComparator.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/ObjectFactory.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/ObjectFactory.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/ObjectFactory.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,258 @@
+package org.drools.learner.tools;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+
+
+public class ObjectFactory {
+	
+//	public static List<Object> getObjectsFromFile(Class<?> clazz, String filename, String separator) {
+//		
+//		ObjectFactory class_factory = new ObjectFactory(clazz);
+//		List<Object> new_objects = fromFileAsObject(filename, separator);
+//		
+//	}
+	public static List<Object> getObjects(Class<?> obj_class, String filename) {
+		ObjectFactory class_factory = new ObjectFactory(obj_class);
+		try {
+			//return class_factory.fromFileAsObject("src/main/java/org/drools"+filename, ",");
+			return class_factory.fromFileAsObject(filename, ",");
+		} catch (Exception e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		return null;
+	}
+	
+	private Class<?> obj_clazz;
+	private ArrayList<Field> clazz_fields;
+	private HashMap<String,Integer> field_sequences;
+	
+	private ObjectFactory (Class<?> clazz) {
+		this.obj_clazz = clazz;
+		this.clazz_fields = new ArrayList<Field>();
+		Util.getSuperFields(clazz, clazz_fields); 
+		
+		this.field_sequences = getFieldReadingSeqs(clazz, clazz_fields);
+	}
+	
+	public List<Object> fromFileAsObject(String filename, String separator) 
+				throws Exception
+	{
+		
+		List<Object> obj_read = new ArrayList<Object>();
+
+		/**/
+		File file =new File(filename);
+		if(!file.exists()){
+			System.out.println("where is the file ? "+ filename);
+			//System.exit(0);
+			
+			file =new File("src/main/java/org/drools/examples/learner/"+filename);
+			if(!file.exists()){
+				file =new File("drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/"+filename);
+				
+				System.out.println("where is still the file ? "+ file);
+				if(!file.exists()){
+					System.out.println("where is still still the file ? "+ file);
+					System.exit(0);
+				}
+			}
+		}
+		
+		BufferedReader reader = new BufferedReader(new FileReader(file));	
+		/**/
+		
+//		BufferedReader reader = new BufferedReader(new InputStreamReader(
+//				this.obj_clazz.getResourceAsStream(filename)));// "../data/"
+		String line;
+		while ((line = reader.readLine()) != null) {
+			line = line.trim();
+			if (line.length() == 0)
+				break;
+			Object element = this.read(line, separator);
+			//System.out.println("New object "+ element);
+			obj_read.add(element);
+
+		}
+		return obj_read;
+	}
+	
+	private Object read(String data, String separator) throws Exception {
+		Object element = null;
+		
+		try {
+			element = this.obj_clazz.newInstance();
+			
+			
+			if (data.endsWith("."))
+				data = data.substring(0, data.length() - 1);
+			List<String> fieldValues = Arrays.asList(data.split(separator));
+			
+			
+			Method[] element_methods = this.obj_clazz.getDeclaredMethods();
+			
+			for (Method m : element_methods) {
+				String m_name = m.getName();
+				Class<?>[] param_type_name = m.getParameterTypes();
+				if (Util.isSetter(m_name) & Util.isSimpleMethod(param_type_name)) {
+					String basicFieldName = Util.getFieldName(m_name);
+					
+					/* TODO dont use the basic field name as the real field name, there can be a capital/miniscul 
+					 * letter problem
+					 */
+					Field f = null;
+					for (Field _f: this.clazz_fields) {
+						if (_f.getName().equalsIgnoreCase(basicFieldName)) {
+							f = _f;
+							break;
+						}			
+					}
+					if (f == null) {
+						throw new Exception("Field("+basicFieldName+") could not be found for the class("+this.obj_clazz+")");
+					}
+					else {
+						String fieldString = fieldValues.get(this.field_sequences.get(f.getName()));
+						Object fieldValue = readString(f, fieldString.trim());						
+						try {
+							m.invoke(element, fieldValue);
+						} catch (IllegalArgumentException e) {
+							// TODO Auto-generated catch block
+							e.printStackTrace();
+						} catch (InvocationTargetException e) {
+							System.out.println("invoking the method of the element e:"+element + " v:"+ fieldValue);
+							
+							e.printStackTrace();
+						}
+						
+						
+					}
+				}
+			}
+			
+			/*
+			for (Field f: element_fields) {
+				String f_name = f.getName();
+				
+				String fieldString = fieldValues.get(fieldSequences.get(f_name));
+				Object fieldValue = readString(f, fieldString);
+				
+				ClassFieldExtractor f_extractor = cache.getExtractor( clazz, f_name, clazz.getClassLoader() );
+//				f_extractor.
+				
+			}*/
+		} catch (InstantiationException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		} catch (IllegalAccessException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		return element;
+	}
+	
+	
+	private static HashMap<String,Integer> getFieldReadingSeqs(Class<? extends Object> classObj, ArrayList<Field> element_fields) {
+
+		HashMap<String,Integer> readingSeqs = new HashMap<String,Integer>(element_fields.size()) ;
+		for( Field f: element_fields) {
+			String f_name = f.getName();
+			
+			Annotation[] annotations = f.getAnnotations();
+			FieldAnnotation spec = null;
+			for (Annotation a : annotations) {
+				if (a instanceof FieldAnnotation) {
+					spec = (FieldAnnotation)a; // here it is !!!
+					readingSeqs.put(f_name, spec.readingSeq());
+					break;
+				}
+			}
+		}
+		return readingSeqs;
+	}
+	
+	private static Object readString(Field f, String text) {
+		
+		Class<?> type_name = f.getType();
+		if (type_name.isPrimitive()) { //boolean, byte, char, short, int, long, float, and double.
+			if (type_name == Boolean.TYPE) {
+				return readBooleanFromString(text);
+			} else if (type_name == Integer.TYPE) {
+				return readIntegerFromString(text);
+			} else if (type_name == Short.TYPE) {
+				return readShortFromString(text);
+			} else if (type_name == Long.TYPE) {
+				return readLongFromString(text);
+			} else if (type_name == Double.TYPE) {
+				return readDoubleFromString(text);
+			} else if (type_name == Float.TYPE) {
+				return readFloatFromString(text);
+			} else {
+				System.out.print("ObjectFactory.readString(field, text) primitive type "+type_name);
+				return null;
+			}
+		} else if (type_name.isAssignableFrom(String.class)) {
+			return text.trim();
+		} else if (type_name.isAssignableFrom(Boolean.class)) {
+			return readBooleanFromString(text);
+		} else if (type_name.isAssignableFrom(Integer.class)) {
+			return readIntegerFromString(text);	
+		} else if (type_name.isAssignableFrom(Short.class)) {
+			return readShortFromString(text);	
+		} else if (type_name.isAssignableFrom(Long.class)) {
+			return readLongFromString(text);	
+		} else if (type_name.isAssignableFrom(Double.class)) {
+			return readDoubleFromString(text);		
+		} else if (type_name.isAssignableFrom(Float.class)) {
+			return readFloatFromString(text);
+		} else {
+			System.out.print("ObjectFactory.readString(field, text) object type "+type_name);
+			return null;
+		}
+
+	}
+	
+	
+	private static Object readBooleanFromString(String data) {
+		//System.out.print("What is the data : "+ data);
+		if (data.trim().equalsIgnoreCase("true"))
+			return Boolean.TRUE;
+		else if ((data.trim().equalsIgnoreCase("false")))
+			return Boolean.FALSE;
+		else if (data.trim().equalsIgnoreCase("1"))
+			return Boolean.TRUE;
+		else if (data.trim().equalsIgnoreCase("0"))
+			return Boolean.FALSE;
+		else
+			return Boolean.parseBoolean(data);
+	}
+	
+	private static Object readIntegerFromString(String data) {
+		return Integer.parseInt(data);
+	}
+	private static Object readShortFromString(String data) {
+		return Short.parseShort(data);
+	}
+	private static Object readLongFromString(String data) {
+		return Long.parseLong(data);
+	}
+	private static Object readFloatFromString(String data) {
+		return Float.parseFloat(data);
+	}
+	
+	private static Object readDoubleFromString(String data) {
+		return Double.parseDouble(data);
+	}
+	
+	
+
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/ObjectFactory.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/PseudoFieldExtractor.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/PseudoFieldExtractor.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/PseudoFieldExtractor.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,126 @@
+package org.drools.learner.tools;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+import org.drools.base.ValueType;
+import org.drools.spi.ReadAccessor;
+
+public class PseudoFieldExtractor implements ReadAccessor{
+	
+	//private String methodName;
+	private Method method;
+    //private Class clazz;
+
+	public PseudoFieldExtractor(Class<?> _clazz, Method m) {
+		super();
+		method = m;
+		//clazz = _clazz;
+	}
+
+	public boolean getBooleanValue(Object object) {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	public byte getByteValue(Object object) {
+		// TODO Auto-generated method stub
+		return 0;
+	}
+
+	public char getCharValue(Object object) {
+		// TODO Auto-generated method stub
+		return 0;
+	}
+
+	public double getDoubleValue(Object object) {
+		// TODO Auto-generated method stub
+		return 0;
+	}
+
+	public Class<?> getExtractToClass() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public String getExtractToClassName() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public float getFloatValue(Object object) {
+		// TODO Auto-generated method stub
+		return 0;
+	}
+
+	public int getHashCode(Object object) {
+		// TODO Auto-generated method stub
+		return 0;
+	}
+
+	public int getIndex() {
+		// TODO Auto-generated method stub
+		return 0;
+	}
+
+	public int getIntValue(Object object) {
+		// TODO Auto-generated method stub
+		return 0;
+	}
+
+	public long getLongValue(Object object) {
+		// TODO Auto-generated method stub
+		return 0;
+	}
+
+	public Method getNativeReadMethod() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public short getShortValue(Object object) {
+		// TODO Auto-generated method stub
+		return 0;
+	}
+
+	/*  DONT FORGET THAT */
+	public Object getValue(Object object) {
+		try {
+			return method.invoke(object, null);
+		} catch (IllegalArgumentException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		} catch (IllegalAccessException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		} catch (InvocationTargetException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		return null;
+	}
+
+	public ValueType getValueType() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public boolean isNullValue(Object object) {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	public void readExternal(ObjectInput in) throws IOException,
+			ClassNotFoundException {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void writeExternal(ObjectOutput out) throws IOException {
+		// TODO Auto-generated method stub
+		
+	}
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/PseudoFieldExtractor.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/RulePrinter.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/RulePrinter.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/RulePrinter.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,641 @@
+package org.drools.learner.tools;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.Reader;
+import java.io.StringReader;
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.Iterator;
+
+import org.drools.learner.DecisionTree;
+import org.drools.learner.DecisionTreeVisitor;
+import org.drools.learner.LeafNode;
+import org.drools.learner.NodeValue;
+import org.drools.learner.Path;
+
+public class RulePrinter {
+	
+	private static SimpleLogger flog = LoggerFactory.getUniqueFileLogger(RulePrinter.class, SimpleLogger.WARN);
+	private static SimpleLogger slog = LoggerFactory.getSysOutLogger(RulePrinter.class, SimpleLogger.WARN);
+	
+	public static Reader readRules(DecisionTree learned_dt) {
+		
+		RulePrinter my_printer = new RulePrinter();	//bocuk.getNum_fact_trained()
+		my_printer.setBoundOnNumRules(Util.MAX_NUM_RULES);
+		my_printer.print(learned_dt, Util.SORT_RULES_BY_RANK);
+		
+		String all_rules = my_printer.write2string();
+		if (Util.PRINT_RULES) {
+			//my_printer.write2file("examples", "src/rules/examples/" + file);
+			my_printer.write2File(all_rules, false, Util.DRL_DIRECTORY+learned_dt.getSignature());
+		}
+		
+		return new StringReader(all_rules);
+	}
+
+	private Class<?> rule_clazz;	
+	
+	private DecisionTreeVisitor visitor;
+	private ArrayList<Rule> rules;
+	
+	private int bound_on_num_rules;
+	private double num_instances;
+
+	private HashMap<String, ArrayList<Field>> attrRelations;
+	private HashMap<String, Class<?>> importList;	// TODO init
+	
+	//private NumberComparator nComparator;
+	
+	public RulePrinter() {
+//		/* most important */
+//		this.nodes = new Stack<NodeValue>();
+		
+		this.visitor = new DecisionTreeVisitor();
+		
+		this.rules = new ArrayList<Rule>();
+		//ruleText = new ArrayList<String>();
+		
+		this.bound_on_num_rules = -1;
+		this.num_instances = -1.0d;
+	}
+	
+	public Class<?> getRuleClass() {
+		return rule_clazz;
+	}
+	
+	public int getBoundOnNumRules() {
+		return bound_on_num_rules;
+	}
+
+	public void setBoundOnNumRules(int max_num_rules) {
+		this.bound_on_num_rules = max_num_rules;
+	}
+	
+	public double getNumInstances() {
+		return this.num_instances;
+	}
+
+	public void setNumInstances(int num) {
+		this.num_instances = num;
+	}
+	
+	public void print(DecisionTree dt, boolean sort) {//, PrintStream object
+		this.rule_clazz = dt.getObjClass();
+		this.attrRelations = dt.getAttrRelationMap();
+		this.importList = new HashMap<String, Class<?>>();
+		this.num_instances = dt.getRoot().getNumMatch();
+		
+		visitor.visit(dt);
+		
+		for (Path p: visitor.getPathList()) {
+			Rule newRule = createRule(p);
+			newRule.setId(rules.size());
+			rules.add(newRule);
+		}
+		
+		if (sort)
+			Collections.sort(rules, Rule.getRankComparator());
+	}
+
+	private Rule createRule(Path p) {
+		//, Stack<NodeValue> leaves // if more than one leaf
+		Rule newRule = new Rule(this.getRuleClass());// (nodes, leaves) //if more than one leaf
+		
+		Iterator<NodeValue> it = p.getConditionIterator();
+		while (it.hasNext()) {
+			NodeValue current = it.next();
+			if (slog.error() != null)
+				slog.error().log("NodeValue " +current + "\n");
+			
+			if (slog.error() != null)
+				slog.error().log("attrRelations [" +attrRelations.size() + "]\n");
+//			if (it.hasNext()) { 
+			ArrayList<Field> nodeRelations = attrRelations.get(current.getFReference());
+
+			if (nodeRelations == null || nodeRelations.isEmpty()) { 
+				// this a direct child add 
+				newRule.addConditionToMain(current);
+			} else {
+				for (Field f:nodeRelations) {	
+					// i need the class that the field belongs to boooook
+					String referenceOfCondition = Util.getDecReference(f);
+					if (slog.error() != null)
+						slog.error().log("[" +referenceOfCondition + "],");
+				}
+				if (slog.error() != null)
+					slog.error().log("\n");
+				newRule.processNodeValue(current, nodeRelations, 0, 1);	//int condition_or_action = condition = 1
+			}
+//			} else {			}
+		}
+		NodeValue action_node = p.getAction();
+		ArrayList<Field> nodeRelations = attrRelations.get(action_node.getFReference());
+		if (nodeRelations == null || nodeRelations.isEmpty()) { 
+			// this a direct child add to reference to the main guy 
+			newRule.addActionToMain(action_node);
+		} else {
+			newRule.processNodeValue(action_node, nodeRelations, 0, 2);	//int condition_or_action = action = 2	
+		}
+		return newRule;	
+	}
+	
+	public void write2File(String toWrite, boolean append, String fileSignature) {//DomainType domain_type, int tree_set  
+	
+		//String drlFileName = 
+		if (!fileSignature.endsWith(".drl"))
+			fileSignature += ".drl";
+		System.out.println("file:"+ fileSignature);
+		File file =new File(fileSignature);
+		if (append)
+		{
+			if(!file.exists())
+				//flog.warn("File doesnot exit, creating...");
+			try {
+				BufferedWriter out = new BufferedWriter(new FileWriter(fileSignature, true));
+				out.write(toWrite);
+				out.close();
+				//System.out.println("I wrote "+ toWrite);
+			} catch (IOException e) {
+				//flog.error("No I couldnot append to the file e:"+ e);
+				/* TODO */
+			}
+
+		} else {
+			if(file.exists()&& (file.length()>0)) {
+				file.delete();
+				//flog.warn("File exits, deleting...");
+			}
+			try {
+				BufferedWriter out = new BufferedWriter(new FileWriter(fileSignature));
+				out.write(toWrite);
+				out.close();
+			} catch (IOException e) {
+				//flog.error("No I couldnot create the file e:"+ e);
+				/* TODO */
+			}
+		}
+	}
+	
+	public String write2string(){//String packageName) {
+		StringBuffer introBuffer = new StringBuffer();
+		StringBuffer bodyBuffer = new StringBuffer();
+		
+		String packageName = this.getRuleClass().getPackage().getName();
+		
+		//log.debug("Package name: "+ packageName);
+		
+		if (packageName != null)
+			introBuffer.append("package " + packageName +";\n\n");	
+		else {
+			//TODO throw exception
+			//flog.error("RulePrinter write2string packageName="+packageName);
+		}
+	
+		int total_num_facts=0;
+		int i = 0, active_i = 0;
+		for( Rule rule: rules) {
+			i++;
+			//flog.debug("Rule: "+ i);
+			if (Util.ONLY_ACTIVE_RULES) {
+				if (rule.getRank() >= 0) {
+					active_i++;
+					bodyBuffer.append(rule.toString());
+					bodyBuffer.append("\n");
+					
+					introBuffer.append(getImports(rule.getDeclarationIt()));
+				}
+
+			} else {
+				if (rule.getRank() >= 0) {
+					active_i++;
+				}
+				bodyBuffer.append(rule.toString());
+				bodyBuffer.append("\n");
+				introBuffer.append(getImports(rule.getDeclarationIt()));
+			}
+			total_num_facts += rule.getNumClassifiedInstances();	
+			if (this.getBoundOnNumRules()>0 && i >= this.getBoundOnNumRules())
+				break;
+		}
+		bodyBuffer.append("//THE END: Total number of facts correctly classified= "+ total_num_facts + " over "+ this.getNumInstances());
+		bodyBuffer.append("\n//with " + active_i + " number of rules over "+i+" total number of rules ");
+		bodyBuffer.append("\n"); // EOF
+		
+		
+		StringBuffer outputBuffer = new StringBuffer();
+		outputBuffer.append(introBuffer);
+		outputBuffer.append("\n");
+		outputBuffer.append(bodyBuffer);
+		return outputBuffer.toString();
+	}
+
+	private StringBuffer getImports(Iterator<Declaration> declarationIt) {
+		StringBuffer importBuffer = new StringBuffer();
+		while (declarationIt.hasNext()) {
+			Declaration dec = declarationIt.next();
+			String name = dec.getDeclaringTypeName();
+			if (!importList.containsKey(name)) {
+				importList.put(name, dec.getDeclaringType());
+				//String import_name = dec.getDeclaringType().getName().replaceAll("$", ".");
+				String import_name = dec.getDeclaringType().getName().replace('$', '.');
+				importBuffer.append("import "+ import_name);
+				importBuffer.append("\n"); 
+			}
+		}
+		return importBuffer;
+	}
+}
+
+class Rule {
+	
+	private Class<?> main_obj;	// object class name
+	private ArrayList<Declaration> rule_decs;
+	private ArrayList<AttrReference>  actions;
+	
+	// key: the reference of the declaration, => id of the declaration
+	private HashMap <String, Integer> declarationMap;
+	
+	private int num_declarations; 
+	
+	private double rank;				 // matching ratio
+	private double num_classified_instances;// number of instances matching that rule
+	
+	private int id;						 // unique id, need a unique name in the drl file
+//	private String referenceToMain = main_obj.getName()+"0";
+	private int main_obj_id = 0;
+	
+	Rule(Class<?> obj) {
+		num_declarations = 0;
+		rule_decs = new ArrayList<Declaration>(1); //new ArrayList<Declaration>(1);
+		declarationMap = new HashMap<String, Integer>(1);
+		main_obj= obj;
+		String obj_ref = getObjectClassName().toLowerCase();
+		declarationMap.put(obj_ref, num_declarations);
+		
+		rule_decs.add(new Declaration(main_obj, obj_ref, num_declarations));
+		actions = new ArrayList<AttrReference>(1);
+	}
+	
+	public Iterator<Declaration> getDeclarationIt() {
+		return rule_decs.iterator();
+	}
+
+	public void addConditionToMain(NodeValue current) {
+		rule_decs.get(main_obj_id).addCondition(current);
+	}
+	
+	public void addActionToMain(NodeValue current) {
+		AttrReference aRef = new AttrReference(current);	//D
+		rule_decs.get(main_obj_id).addActionReference(aRef);						//D
+		addAction(aRef);									//D
+		setRuleStats(current);								//D
+	}
+	
+	public void addCondition(NodeValue current, ArrayList<Field> nodeRelations, int rel_id) {
+		if (rel_id == nodeRelations.size()) {	// it must be primitive
+			Field referenceField = nodeRelations.get(nodeRelations.size()-1);			
+			String referenceOfCondition = Util.getDecReference(referenceField);
+			
+			System.out.println("It is primitive, should add a condition to its father "+referenceOfCondition+ " rel_id "+ rel_id + " size "+ (nodeRelations.size()-1)+ " \n");	
+			Declaration dec = rule_decs.get(declarationMap.get(referenceOfCondition));
+			dec.addCondition(current);					//D
+		} else {
+			Field referenceField = nodeRelations.get(rel_id);			
+			String referenceOfCondition = Util.getDecReference(referenceField);
+			System.out.println("referenceOfCondition " +referenceOfCondition + " rel_id "+ rel_id + " size "+ (nodeRelations.size()-1));
+			Declaration the_place_declared = null;
+			
+			if (rel_id ==0 ) {
+				
+				the_place_declared = rule_decs.get(0);
+				System.out.println("The first guy "+referenceField.getName()+" to main declaration (ref?)"+ " rel_id "+ rel_id + " size "+ (nodeRelations.size()-1)+ " \n");	
+				
+			} else {
+				the_place_declared = rule_decs.get(rel_id-1);//declarationMap.get(referenceOfCondition));
+				System.out.println("Continue"+referenceField.getName()+" in "+the_place_declared+ "??? rel_id "+ rel_id + " size "+ (nodeRelations.size()-1)+ " \n");	
+			}
+			
+			if (!the_place_declared.hasReference(referenceField.getName())) {
+				num_declarations++;
+				Declaration new_dec = new Declaration(referenceField.getType(), referenceField.getName(), num_declarations);
+				System.out.println("Create new dec "+referenceOfCondition+" (Main declaration doesnot have a ref"+ referenceField.getName() + ") rel_id "+ rel_id + " size "+ (nodeRelations.size()-1)+ " \n");	
+				
+				the_place_declared.addReference(new_dec);					//D
+				declarationMap.put(referenceOfCondition, num_declarations);
+				rule_decs.add(new_dec);
+			}
+			
+			addCondition(current, nodeRelations, rel_id+1);
+			
+		}
+	}
+	
+	public void processNodeValue(NodeValue current, ArrayList<Field> nodeRelations, int rel_id, int condition_or_action) {
+		if (rel_id == nodeRelations.size()) {	// it must be primitive
+			Field referenceField = nodeRelations.get(nodeRelations.size()-1);			
+			String referenceOfCondition = Util.getDecReference(referenceField);
+			
+			System.out.println("It is primitive, should add a condition to its father "+referenceOfCondition+ " rel_id "+ rel_id + " size "+ (nodeRelations.size()-1)+ " \n");	
+			Declaration dec = rule_decs.get(declarationMap.get(referenceOfCondition));
+			
+			switch (condition_or_action) {
+			case 1: // condition
+				dec.addCondition(current);					//D
+				break;
+			case 2: // action
+				AttrReference aRef = new AttrReference(current);	//D
+				dec.addActionReference(aRef);						//D
+				addAction(aRef);									//D
+				setRuleStats (current);								//D
+				break;
+			}
+			return;
+
+		} else {
+			Field referenceField = nodeRelations.get(rel_id);			
+			String referenceOfCondition = Util.getDecReference(referenceField);
+			System.out.println("referenceOfCondition " +referenceOfCondition + " rel_id "+ rel_id + " size "+ (nodeRelations.size()-1));
+			Declaration the_place_declared = null;
+			
+			if (rel_id ==0 ) {	
+				the_place_declared = rule_decs.get(0);
+				System.out.println("The first guy "+referenceField.getName()+" to main declaration (ref?)"+ " rel_id "+ rel_id + " size "+ (nodeRelations.size()-1)+ " \n");	
+				
+			} else {
+				the_place_declared = rule_decs.get(rel_id-1);//declarationMap.get(referenceOfCondition));
+				System.out.println("Continue"+referenceField.getName()+" in "+the_place_declared+ "??? rel_id "+ rel_id + " size "+ (nodeRelations.size()-1)+ " \n");	
+			}
+			
+			if (!the_place_declared.hasReference(referenceField.getName())) {
+				num_declarations++;
+				Declaration new_dec = new Declaration(referenceField.getType(), referenceField.getName(), num_declarations);
+				System.out.println("Create new dec "+referenceOfCondition+" (Main declaration doesnot have a ref"+ referenceField.getName() + ") rel_id "+ rel_id + " size "+ (nodeRelations.size()-1)+ " \n");	
+				switch (condition_or_action) {
+				case 1: // condition
+					the_place_declared.addReference(new_dec);			//D
+					break;
+				case 2: // action
+					AttrReference aRef = new AttrReference(current);	//D
+					the_place_declared.addActionReference(aRef);		//D
+					break;
+				}
+				declarationMap.put(referenceOfCondition, num_declarations);
+				rule_decs.add(new_dec);
+			}
+			
+			processNodeValue(current, nodeRelations, rel_id+1, condition_or_action);	
+			
+		}
+	}
+	
+	public void addAction(AttrReference aRef) {
+		actions.add(aRef);	
+	}
+	
+	public void setRuleStats (NodeValue current) {
+		this.setRank(((LeafNode)current.getNode()).getRank());
+		this.setNumClassifiedInstances(((LeafNode)current.getNode()).getNumClassification());
+	}
+	
+	public String getObjectClassName() {
+		return main_obj.getSimpleName();
+	}
+	
+	private int getId() {
+		return id;
+	}
+	
+	public void setId(int id) {
+		this.id= id;
+	}
+	
+	private void setNumClassifiedInstances(double dataSize) {
+		this.num_classified_instances = dataSize;	
+	}
+	public double getNumClassifiedInstances() {
+		return this.num_classified_instances;	
+	}
+
+	public void setRank(double r) {
+		this.rank = r;
+	}
+	public double getRank() {
+		return this.rank;
+	}
+	
+	public String toString() {
+		/*		 
+		rule "Good Bye"
+    		dialect "java"
+			when
+				$m:Message( status == Message.GOODBYE)
+			then
+				System.out.println( "[getLabel()] Expected value (" + $c.getLabel() + "), Classified as (False)"); 
+		end
+		
+		// complex rule
+		rule "Purchase notification"
+    		salience 10
+
+			when
+				$c : Customer( name == "Bla")
+				$p : Purchase( amount == 1, customer == $c)	    
+			then
+	    		System.out.println( "Customer " + $c.name + " just purchased " + $p.product.name );
+		end
+		 */
+		//"rule \"#"+getId()+" "+decision+" rank:"+rank+"\" \n";
+		StringBuffer sb_out = new StringBuffer("");
+		
+		sb_out.append("\t when");
+		for (int dec_i =rule_decs.size()-1; dec_i>=0; dec_i--) {
+			Declaration d = rule_decs.get(dec_i);
+			String obj_ref = d.getSymbol(); //"$"+this.getObjectClassName().substring(0, 1).toLowerCase();
+			sb_out.append("\n\t\t "+obj_ref+" : "+d.getDeclaringTypeName()+"("+ "");
+			Iterator<NodeValue> dec_it = d.getConditionIt();
+			while (dec_it.hasNext()) {
+				NodeValue cond = dec_it.next();
+				sb_out.append(cond.toString() + ", ");
+			}
+			
+			Iterator<Reference> ref_it = d.getReferenceIt();
+			while (ref_it.hasNext()) {
+				Reference ref = ref_it.next();
+				sb_out.append(ref.toString() + ", ");
+			}			
+			sb_out.delete(sb_out.length()-2, sb_out.length()-1);
+			sb_out.append(")");
+		}
+		sb_out.append("\n");
+		StringBuffer sb_action = new StringBuffer("");
+		StringBuffer sb_field = new StringBuffer("");
+		StringBuffer sb_expected_value = new StringBuffer("");
+		for (AttrReference act: actions) {
+			sb_action.append(act.getValue() + " , ");
+			sb_expected_value.append(act.getVariableName()); 
+			sb_field.append(act.getFName() + "");
+			
+		}
+		sb_action.delete(sb_action.length()-3, sb_action.length()-1);
+		
+		sb_out.append("\t then ");
+		sb_out.append("\n\t\t System.out.println(\"["+sb_field.toString()+ "] Expected value (\" + "+  sb_expected_value.toString()+ " + \"), Classified as ("+sb_action.toString()+")\");\n"); 
+		if (getRank() <0)
+			sb_out.append("\n\t\t System.out.println(\"But no matching fact found = DOES not fire on\");\n");
+		
+		sb_out.insert(0, "rule \"#"+getId()+" "+sb_field.toString()+ "= "+sb_action.toString()+" classifying "+this.getNumClassifiedInstances()+" num of facts with rank:"+getRank() +"\" \n");
+		sb_out.append("end\n");
+
+		return sb_out.toString();
+	}
+
+	public static Comparator<Rule> getRankComparator() {
+		return new RuleComparator();
+	}
+	
+	private static class RuleComparator implements Comparator<Rule>{
+		// this will sort from best rank to least rank
+		public int compare(Rule r1, Rule r2) {
+			if (r1.getRank() < r2.getRank())
+				return 1; // normally -1
+			else if (r1.getRank() > r2.getRank())
+				return -1; // normally 1
+			else
+				return 0;
+		}	
+	}
+
+}
+
+class Declaration{
+	private int id; 
+	private String dec_ref; 		
+	private Class<?> declared_obj;	// object class name
+//	private ArrayList<RuleNode> conditions;
+	private ArrayList<NodeValue> conditions;
+	private ArrayList<Reference> references;
+	
+	public Declaration(Class<?> obj_class, String name, int dec_id) {
+		id = dec_id;
+		declared_obj = obj_class;
+		dec_ref = name;
+		references = new ArrayList<Reference>();
+		conditions = new ArrayList<NodeValue>();
+	}
+	
+	public String getDeclaringFName() {
+		return dec_ref;
+	}
+	
+	public Class<?> getDeclaringType() {
+		return declared_obj;
+	}
+	public String getDeclaringTypeName() {
+		return declared_obj.getSimpleName();
+	}
+
+	public void addCondition(NodeValue current) {
+		/* TODO check do u need to copy the node value 
+			NodeValue nv = new NodeValue(current.getNode());
+			nv.setNodeValue(current.getNodeValue());
+			conditions.add(nv);
+		/**/
+		conditions.add(current);
+	}
+	
+	public void addActionReference(AttrReference aRef) {//NodeValue current) {
+		references.add(aRef);
+
+	}
+	
+	public void addReference(Declaration d) {
+		DecReference df = new DecReference(d);
+		references.add(df);
+	}
+	
+	public boolean hasReference(String fName) {
+		for (Reference df : references) {
+			if (df.getFName().equalsIgnoreCase(fName))
+				return true;
+		}
+		return false;
+		
+	}
+	
+	public Iterator<NodeValue> getConditionIt() {
+		return conditions.iterator();
+	}
+	public Iterator<Reference> getReferenceIt() {
+		return references.iterator();
+	}
+	
+	public String getSymbol() {
+		return "$"+dec_ref + "_" + id;
+	}
+	
+}
+
+interface Reference {
+	public String getFName();
+}
+class DecReference implements Reference {
+	
+	private String fName;
+	Declaration toReference;
+	
+	public DecReference (Declaration d) {
+		toReference = d;
+		fName = d.getDeclaringFName();
+	}
+	
+	public String getFName() {
+		return fName;
+	}
+	public void setReference(Declaration _toReference) {
+		toReference = _toReference;
+	}
+	
+	
+	public String toString() {
+		return fName + " == "+ toReference.getSymbol();
+	}
+}
+
+class AttrReference implements Reference {
+	
+	private String fName;
+	private NodeValue real_value;
+	
+	public AttrReference (NodeValue v) {
+		String _fName = v.getFName();
+		if (v.getNode().getDomain().isArtificial()) {
+			_fName = Util.getFieldName(_fName);
+		}
+		fName = _fName;
+		/* TODO is the copying really necessary?
+		real_value = new NodeValue(v.getNode());
+		real_value.setNodeValue(v.getNodeValue());
+		*/
+		real_value = v;
+	}
+	public Object getVariableName() {
+		return "$target_label";
+	}
+	public Object getValue() {
+		return real_value.getValue();
+	}
+	public String getFName() {
+		return fName;
+	}
+	
+	public String toString() {
+		return getVariableName()+" : "+ fName ;
+	}
+}
+


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/RulePrinter.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/SimpleLogger.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/SimpleLogger.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/SimpleLogger.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,62 @@
+package org.drools.learner.tools;
+
+
+public class SimpleLogger {
+
+	public static final int STAT  = 0;
+	public static final int ERROR = 1;
+	public static final int WARN  = 2;
+	public static final int DEBUG = 3;
+	public static final int INFO  = 4;
+	
+	public static final int DEFAULT_LEVEL  = ERROR;
+	
+	public static String[] msgs = {"stat","error", "warn", "debug", "info"};
+
+	public static final int LAST  = INFO;
+
+	public LoggerInterface[] loggers = new LoggerInterface[LAST+1];
+
+	public SimpleLogger() {
+	
+		for (int i = 0; i <= LAST; ++i) {
+			loggers[i] = null;
+		}
+	}
+
+	public SimpleLogger(int _lvl, LoggerInterface _logint) {
+		for (int i = 0; i <= LAST; ++i) {
+			if (i > _lvl)
+				loggers[i] = null;
+			else {
+				loggers[i] = _logint.clone();
+				loggers[i].setMsg(msgs[i]);
+			}
+		}
+	}
+
+	public final LoggerInterface get(int _index) {
+		return loggers[_index];
+	}
+
+	public final LoggerInterface stat() {
+		return loggers[STAT];
+	}
+
+	public final LoggerInterface error() {
+		return loggers[ERROR];
+	}
+
+	public final LoggerInterface warn() {
+		return loggers[WARN];
+	}
+
+	public final LoggerInterface debug() {
+		return loggers[DEBUG];
+	}
+
+	public final LoggerInterface info() {
+		return loggers[INFO];
+	}
+
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/SimpleLogger.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/Util.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/Util.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/Util.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,352 @@
+package org.drools.learner.tools;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Random;
+
+import org.drools.learner.Domain;
+import org.drools.learner.builder.Learner;
+import org.drools.learner.builder.Learner.DataType;
+import org.drools.learner.builder.Learner.DomainAlgo;
+
+public class Util {
+	
+	public static final boolean PRINT_STATS = true;
+	public static final String DRL_DIRECTORY = "src/main/rules/";
+	/*
+	public static final boolean DEBUG = false;
+	public static final boolean DEBUG_TEST = false;
+	public static final boolean DEBUG_RULE_PRINTER = false;
+	public static final boolean DEBUG_LEARNER = false;
+	public static final boolean DEBUG_CATEGORIZER = false;
+	public static final boolean DEBUG_ENTROPY = false;
+	public static final boolean DEBUG_DIST = false;
+	public static final boolean DEBUG_DECISION_TREE = false;
+	*/
+	public static int MAX_NUM_RULES = 10;
+	public static boolean ONLY_ACTIVE_RULES = true;	/* TODO into global settings */
+	
+	public static boolean SORT_RULES_BY_RANK = true;
+	public static boolean PRINT_RULES = true;
+	
+	private static Random BAGGING = new Random(System.currentTimeMillis());
+	//public static String log_file = "testing.log";
+	
+	
+	public static String ntimes(String s,int n){
+		StringBuffer buf = new StringBuffer();
+		for (int i = 0; i < n; i++) {
+			buf.append(s);
+		}
+		return buf.toString();
+	}
+	
+	public static String sum() {
+		return "sum";
+	}
+	
+	public static double log2(double prob) {
+		return Math.log(prob) / Math.log(2);
+	}
+	
+	public static double ln(double prob) {
+		return Math.log(prob);
+	}
+	
+	public static double exp(double prob) {
+		return Math.exp(prob);
+	}
+	
+	/* TODO make this all_fields arraylist as hashmap */
+	public static void getSuperFields(Class<?> clazz, ArrayList<Field> all_fields) {
+		if (clazz == Object.class)
+			return;
+		
+		//Field [] element_fields_ = clazz.getFields();
+		Field [] element_fields = clazz.getDeclaredFields(); //clazz.getFields();
+		for (Field f: element_fields) {
+			all_fields.add(f);
+		}
+		getSuperFields(clazz.getSuperclass(), all_fields);
+		
+		return;
+	}
+	
+	public static void decomposeStructuredFields(ArrayList<Field> element_fields, ArrayList<Field> decomposed_fields) {
+		
+		for (Field f: element_fields) {
+			if (isSimpleType(f.getType()))
+				decomposed_fields.add(f);
+			else {
+				// it is an structured attribute
+				// u need to get its attributes
+				//if the field is a collection of sth => BOK
+				ArrayList<Field> field_structure = new ArrayList<Field>();
+				Util.getSuperFields(f.getType(), field_structure);
+				decomposeStructuredFields(field_structure, decomposed_fields);
+			}
+		}
+		return;
+	}
+	
+	public static boolean getterExits(String m_name) {
+		if (m_name.startsWith("set"))
+			return true;
+		else 
+			return false;
+	}
+	
+	public static boolean isSetter(String m_name) {
+		if (m_name.startsWith("set"))
+			return true;
+		else 
+			return false;
+	}
+	
+	public static String getFReference(Class<?> _obj_klass, String fName) {
+		return _obj_klass.getName()+"@"+fName;
+	}
+	
+	public static String getDecReference(Field f) {
+		Class<?> owner_class = f.getDeclaringClass(); // i need the class that the field belongs to boooook
+		return owner_class.getName() + "_"+f.getType().getName() +"_"+f.getName();
+	}
+
+	public static String getFieldName(String method_name) {
+		if (method_name.startsWith("get") || method_name.startsWith("set"))
+			return method_name.substring(3, method_name.length()).toLowerCase();
+		else if (method_name.startsWith("is"))
+			return method_name.substring(2, method_name.length()).toLowerCase();
+		else 
+			return null;
+	}
+	
+	public static boolean isSimpleMethod(Class<?>[] type_name) {
+		if (type_name.length==1) {
+			return isSimpleType(type_name[0]);
+		}
+		else
+			return false;
+	}
+	
+	public static DataType getDataType(Class<?> type_name) {
+		if (isSimpleType(type_name))
+			return DataType.PRIMITIVE;
+		else {
+			if (isCollectionType(type_name)) {
+				return DataType.COLLECTION;
+			}
+			else 
+				return DataType.STRUCTURED;
+		}
+	}
+	
+	public static boolean isSimpleType(Class<?> type_name) {
+		if (type_name.isPrimitive() || type_name == String.class)
+			return true;
+		else if (type_name == Boolean.class || type_name == Boolean.TYPE ||
+			type_name == Integer.class || type_name == Integer.TYPE ||
+			type_name == Long.class || type_name == Long.TYPE ||
+			type_name == Double.class || type_name == Double.TYPE ||
+			type_name == Float.class || type_name == Float.TYPE ||
+			type_name == String.class)
+			return true;
+		else if (type_name.isEnum()) {
+			return true;
+		} else 
+			return false;
+	}
+	
+	public static boolean isCollectionType(Class<?> type_name) {
+		if (type_name.isArray())
+			return true;
+		else if (type_name.isAssignableFrom(Iterable.class))
+			return true;
+		else 
+			return false;
+	}
+	
+	public static FieldAnnotation getFieldAnnotations(Field f) {
+		Annotation[] annotations = f.getAnnotations();
+		for (Annotation a : annotations) {
+			if (a instanceof FieldAnnotation) {
+				return (FieldAnnotation)a; // here it is !!!
+			}
+		}
+		return null;
+	}
+	
+	public static ClassAnnotation getDecClassAnnotations(Class<?> clazz) {
+		Annotation[] annotations = clazz.getDeclaredAnnotations();	// it should get the inherited annotations 
+		for (Annotation a : annotations) {
+			if (a instanceof ClassAnnotation) {
+				return (ClassAnnotation)a; // here it is !!!
+			}
+		}
+		return null;
+	}
+	public static ClassAnnotation getClassAnnotations(Class<?> clazz) {
+		Annotation[] annotations = clazz.getAnnotations();	// it should get the inherited annotations 
+		for (Annotation a : annotations) {
+			if (a instanceof ClassAnnotation) {
+				return (ClassAnnotation)a; // here it is !!!
+			}
+		}
+		return null;
+	}
+	// to process the type => it must be simple
+	public static void processDomain(Domain fieldDomain, Class<?> clazz_type) {
+		if (clazz_type == Boolean.TYPE || clazz_type == Boolean.class)	{	/* set discrete*/
+//			fieldDomain.setCategorical(true);	// BY DEFAULT it is categorical
+			fieldDomain.addCategory(Boolean.TRUE);
+			fieldDomain.addCategory(Boolean.FALSE);
+			fieldDomain.setFixed(true);
+		} else if (clazz_type.isEnum()) {//f.isEnumConstant()) {
+			Class<?> enum_f = clazz_type;
+			//for (E e:enum_f.getEnumConstants())
+			//fieldDomain.setFixed(true);
+		} else if (clazz_type == String.class) {	
+			/* BY DEFAULT it is categorical*/
+		} 
+		
+	}
+	
+	/* TODO make this all_fields arraylist as hashmap */
+	private static void getAllFields(Class<?> clazz, ArrayList<Field> all_fields, ArrayList<Class<?>> all_classes) {
+		if (clazz == Object.class)
+			return;
+		all_classes.add(clazz);
+		//Field [] element_fields_ = clazz.getFields();
+		Field [] element_fields = clazz.getDeclaredFields(); //clazz.getFields();
+		for (Field f: element_fields) {
+			all_fields.add(f);
+		}
+		getAllFields(clazz.getSuperclass(), all_fields, all_classes);
+		
+		return;
+	}
+
+	public static Object calculateMidPoint(Class<?> fClass, Object cp_i, Object cp_i_next) {
+		if (fClass.isAssignableFrom(Integer.class) || fClass == Integer.TYPE) {
+			return ((Integer)cp_i + (Integer) cp_i_next) / 2;
+		} else if (fClass.isAssignableFrom(Short.class) || fClass == Short.TYPE) {
+			return ((Short)cp_i + (Short) cp_i_next) / 2;
+		} else if (fClass.isAssignableFrom(Long.class) || fClass == Long.TYPE) {
+			return ((Long)cp_i + (Long) cp_i_next) / 2;	
+		} else if (fClass.isAssignableFrom(Double.class) || fClass == Double.TYPE) {
+			return ((Double)cp_i + (Double) cp_i_next) / 2;	
+		} else if (fClass.isAssignableFrom(Float.class) || fClass == Float.TYPE) {
+			return ((Float)cp_i + (Float) cp_i_next) / 2;
+		} else {
+			System.out.print("What should i do then Categorizer.find_a_split() for "+fClass);
+			System.exit(0);
+		}
+		return 0.0;
+	}
+	
+	private static int getType(Class<?>[] type_name) {
+		/*	
+		 * simpletype.contains(type_name)
+		 * how do you get the simple type
+		 */
+		if (type_name.length==1) {
+			if (type_name[0].getName().equalsIgnoreCase("boolean") ||
+				type_name[0].getName().equalsIgnoreCase("int") ||
+				type_name[0].getName().equalsIgnoreCase("double") ||
+				type_name[0].getName().equalsIgnoreCase("float")) 
+				return 1;
+			else if (type_name[0].getName().equalsIgnoreCase("java.lang.String"))
+				return 2;
+			else
+				return -1;
+		} else
+			return 0;
+	}
+	
+	public static int[] bag_w_rep(int k, int N) {
+		int[] bag = new int[k];
+		int i = 0;
+		while (i<k) {
+			bag[i++] = BAGGING.nextInt(N);
+		}
+		return bag;
+	}
+	
+	public static int[] bag_wo_rep(int k, int N) {
+		int[] bag = new int[k];
+		boolean[] selected = new boolean[N];
+		int i = 0;
+		while (i<k) {
+			int new_i = BAGGING.nextInt(N--);
+			//if (Util.DEBUG)	System.out.print("new_i "+ new_i +"\t");
+			int selected_j=0, j=0;
+			while (j<new_i || selected[j]) {
+				if (selected[j]) {
+					new_i++;
+					selected_j = j;
+				}
+				j++;
+			}
+			selected[j] = true;
+			bag[i] = j;
+			i++;
+		}
+		return bag;
+	}
+	
+	private static Object convertPrimitiveType (Object primitiveValue) {
+		Class klass = primitiveValue.getClass();
+		if  (klass.equals(Boolean.TYPE)) {
+			return (Boolean)primitiveValue;
+			
+		}
+		return null; 
+		
+	}
+	
+	public boolean bok = false;
+	
+	public Boolean bokkafa = Boolean.FALSE;
+	public String sbok = "x";
+	
+	public static final void main(final String[] args) throws Exception {
+		System.out.println(Util.convertPrimitiveType(false));
+		
+		Util u = new Util();
+		Field f = u.getClass().getField("bok");
+		System.out.println(Util.convertPrimitiveType(f.get(u)));
+		if (f.getType().isPrimitive())
+			System.out.println("Primitive" + f.get(u));
+		else
+			System.out.println("Not Primitive" + f.get(u));
+		Field fkafa = u.getClass().getField("bokkafa");
+		if (fkafa.getType().isPrimitive())
+			System.out.println("Primitive" + fkafa.get(u));
+		else 
+			System.out.println("Not Primitive kafa" + fkafa.get(u));
+		Field f_s = u.getClass().getField("sbok");
+		if (f_s.getType() == String.class)
+			System.out.println(f_s.get(u));
+		
+		String abd = "abd";
+		String abcm = "abcm";
+		ArrayList<String> x  = new ArrayList<String>(2);
+		x.add(abd);
+		x.add(abcm);
+		x.add("q");
+		x.add("abdm");
+		x.add("abc");
+		System.out.println("the result: "+abd.compareTo(abcm));
+		
+		Collections.sort(x);
+		
+		for (String s:x){
+			System.out.println(s);
+			}
+		
+		
+	}
+}
+


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/Util.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/test/java/org/drools/learner/LoggerTest.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/test/java/org/drools/learner/LoggerTest.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/test/java/org/drools/learner/LoggerTest.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,42 @@
+package org.drools.learner;
+
+import org.drools.learner.tools.Logger;
+import org.drools.learner.tools.LoggerFactory;
+import org.drools.learner.tools.Logger.LogLevel_;
+
+public class LoggerTest {
+	
+//	private static final Logger log = LoggerFactory.getSysOutLogger(LoggerTest.class, LogLevel_.ERROR); 
+//	private static final Logger flog = LoggerFactory.getFileLogger(LoggerTest.class, LogLevel_.ERROR, "log_test.log");
+//	
+//	
+//	private static final Logger deflog = LoggerFactory.getSysOutLogger(LoggerTest.class); 
+//	private static final Logger f_deflog = LoggerFactory.getFileLogger(LoggerTest.class);
+	
+	
+	public static final void main(final String[] args) {
+		
+		
+//		log.debug(new Object() {
+//			public String toString() {
+//				String out = "\nTesting logger->";
+//				return out;
+//	
+//			}
+//		});
+//		
+//		Object o = new String("bok");
+//		log.error(o);
+//		
+//		Object o2 = new String("fbok");
+//		flog.info(o2);
+//		flog.error(o2);
+//		
+//		f_deflog.info(o2);
+//		f_deflog.error(o2);
+//		
+//		deflog.stat(o2);
+//		f_deflog.stat(o2);
+	}
+
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/test/java/org/drools/learner/LoggerTest.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/test/java/org/drools/learner/StructuredTestFactory.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/test/java/org/drools/learner/StructuredTestFactory.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/test/java/org/drools/learner/StructuredTestFactory.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,41 @@
+package org.drools.learner;
+
+import org.drools.WorkingMemory;
+import org.drools.learner.builder.C45Learner;
+import org.drools.learner.builder.Learner;
+import org.drools.learner.builder.SingleTreeBuilder;
+import org.drools.learner.builder.SingleTreeTester;
+import org.drools.learner.builder.Learner.DataType;
+import org.drools.learner.builder.DecisionTreeFactory;
+import org.drools.learner.eval.Entropy;
+import org.drools.learner.tools.FeatureNotSupported;
+
+public class StructuredTestFactory extends DecisionTreeFactory{
+
+	
+	public static DecisionTree testStructuredMemory(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+		
+		DataType data = Learner.DEFAULT_DATA;
+		Entropy heuristic = new Entropy();
+		C45Learner learner = new C45Learner(heuristic);
+		
+		SingleTreeBuilder single_builder = new SingleTreeBuilder();
+		
+		String algo_suffices = DecisionTreeFactory.getAlgoSuffices(learner.getDomainAlgo(), single_builder.getTreeAlgo());
+		String executionSignature = DecisionTreeFactory.getSignature(obj_class, "", algo_suffices);
+		
+		/* create the memory */
+		Memory mem = Memory.createFromWorkingMemory(wm, obj_class, learner.getDomainAlgo(), data);
+		boolean BUILD_TREE = false;
+		if (BUILD_TREE) {
+			single_builder.build(mem, learner);//obj_class, target_attr, working_attr
+
+			SingleTreeTester tester = new SingleTreeTester(learner.getTree());
+			//tester.printStats(tester.test(mem.getClassInstances()), Util.DRL_DIRECTORY + executionSignature);
+			//Tester.test(c45, mem.getClassInstances());
+
+			learner.getTree().setSignature(executionSignature);
+		}
+		return learner.getTree();
+	}
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/test/java/org/drools/learner/StructuredTestFactory.java
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-dataloaders/drools-dataloaders-smooks/.classpath
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-dataloaders/drools-dataloaders-smooks/.classpath	2008-07-16 17:22:56 UTC (rev 21070)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-dataloaders/drools-dataloaders-smooks/.classpath	2008-07-16 17:39:52 UTC (rev 21071)
@@ -1,25 +1,25 @@
-<classpath>
-  <classpathentry kind="src" path="src/main/java"/>
-  <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
-  <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
-  <classpathentry kind="src" path="src/test/resources" output="target/test-classes" excluding="**/*.java"/>
-  <classpathentry kind="output" path="target/classes"/>
-  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-  <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/milyn/milyn-smooks-javabean/1.0.1/milyn-smooks-javabean-1.0.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/commons-lang/commons-lang/2.3/commons-lang-2.3.jar"/>
-  <classpathentry kind="var" path="M2_REPO/commons-logging/commons-logging/1.1/commons-logging-1.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.13/log4j-1.2.13.jar"/>
-  <classpathentry kind="var" path="M2_REPO/milyn/milyn-smooks-core/1.0.1/milyn-smooks-core-1.0.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/milyn/milyn-commons/1.0/milyn-commons-1.0.jar"/>
-  <classpathentry kind="var" path="M2_REPO/hsqldb/hsqldb/1.8.0.2/hsqldb-1.8.0.2.jar"/>
-  <classpathentry kind="var" path="M2_REPO/com/thoughtworks/xstream/xstream/1.2.2/xstream-1.2.2.jar"/>
-  <classpathentry kind="var" path="M2_REPO/xpp3/xpp3_min/1.1.3.4.O/xpp3_min-1.1.3.4.O.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel/2.0-dp4/mvel-2.0-dp4.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/freemarker/freemarker/2.3.9/freemarker-2.3.9.jar"/>
-  <classpathentry kind="src" path="/drools-compiler"/>
-  <classpathentry kind="src" path="/drools-core"/>
-  <classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.0/antlr-runtime-3.0.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.2.3.v_686_R32x/core-3.2.3.v_686_R32x.jar"/>
-  <classpathentry kind="var" path="M2_REPO/janino/janino/2.5.10/janino-2.5.10.jar"/>
+<classpath>
+  <classpathentry kind="src" path="src/main/java"/>
+  <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
+  <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
+  <classpathentry kind="src" path="src/test/resources" output="target/test-classes" excluding="**/*.java"/>
+  <classpathentry kind="output" path="target/classes"/>
+  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+  <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/milyn/milyn-smooks-javabean/1.0.1/milyn-smooks-javabean-1.0.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/commons-lang/commons-lang/2.3/commons-lang-2.3.jar"/>
+  <classpathentry kind="var" path="M2_REPO/commons-logging/commons-logging/1.1/commons-logging-1.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.13/log4j-1.2.13.jar"/>
+  <classpathentry kind="var" path="M2_REPO/milyn/milyn-smooks-core/1.0.1/milyn-smooks-core-1.0.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/milyn/milyn-commons/1.0/milyn-commons-1.0.jar"/>
+  <classpathentry kind="var" path="M2_REPO/hsqldb/hsqldb/1.8.0.2/hsqldb-1.8.0.2.jar"/>
+  <classpathentry kind="var" path="M2_REPO/com/thoughtworks/xstream/xstream/1.2.2/xstream-1.2.2.jar"/>
+  <classpathentry kind="var" path="M2_REPO/xpp3/xpp3_min/1.1.3.4.O/xpp3_min-1.1.3.4.O.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel/2.0-dp4/mvel-2.0-dp4.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/freemarker/freemarker/2.3.9/freemarker-2.3.9.jar"/>
+  <classpathentry kind="src" path="/drools-compiler"/>
+  <classpathentry kind="src" path="/drools-core"/>
+  <classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.0/antlr-runtime-3.0.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.2.3.v_686_R32x/core-3.2.3.v_686_R32x.jar"/>
+  <classpathentry kind="var" path="M2_REPO/janino/janino/2.5.10/janino-2.5.10.jar"/>
 </classpath>
\ No newline at end of file

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-dataloaders/drools-dataloaders-smooks/.project
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-dataloaders/drools-dataloaders-smooks/.project	2008-07-16 17:22:56 UTC (rev 21070)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-dataloaders/drools-dataloaders-smooks/.project	2008-07-16 17:39:52 UTC (rev 21071)
@@ -1,16 +1,16 @@
-<projectDescription>
-  <name>drools-dataloaders-smooks</name>
-  <comment>A rule production system</comment>
-  <projects>
-    <project>drools-compiler</project>
-    <project>drools-core</project>
-  </projects>
-  <buildSpec>
-    <buildCommand>
-      <name>org.eclipse.jdt.core.javabuilder</name>
-    </buildCommand>
-  </buildSpec>
-  <natures>
-    <nature>org.eclipse.jdt.core.javanature</nature>
-  </natures>
+<projectDescription>
+  <name>drools-dataloaders-smooks</name>
+  <comment>A rule production system</comment>
+  <projects>
+    <project>drools-compiler</project>
+    <project>drools-core</project>
+  </projects>
+  <buildSpec>
+    <buildCommand>
+      <name>org.eclipse.jdt.core.javabuilder</name>
+    </buildCommand>
+  </buildSpec>
+  <natures>
+    <nature>org.eclipse.jdt.core.javanature</nature>
+  </natures>
 </projectDescription>
\ No newline at end of file

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/.classpath
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/.classpath	2008-07-16 17:22:56 UTC (rev 21070)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/.classpath	2008-07-16 17:39:52 UTC (rev 21071)
@@ -1,13 +1,16 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src/main/java"/>
-	<classpathentry excluding="**/*.java" kind="src" path="src/main/resources"/>
-	<classpathentry excluding="**/*.java" kind="src" path="src/main/rules"/>
-	<classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
-	<classpathentry excluding="**/*.java" kind="src" output="target/test-classes" path="src/test/resources"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="lib" path="lib/foxtrot-2.0.jar"/>
-	<classpathentry kind="lib" path="lib/jgoodies-forms-1.0.4.jar"/>
-	<classpathentry kind="con" path="DROOLS/Drools"/>
-	<classpathentry kind="output" path="target/classes"/>
-</classpath>
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src/main/java"/>
+	<classpathentry excluding="**/*.java" kind="src" path="src/main/resources"/>
+	<classpathentry excluding="**/*.java" kind="src" path="src/main/rules"/>
+	<classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
+	<classpathentry excluding="**/*.java" kind="src" output="target/test-classes" path="src/test/resources"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="lib" path="lib/foxtrot-2.0.jar"/>
+	<classpathentry kind="lib" path="lib/jgoodies-forms-1.0.4.jar"/>
+	<classpathentry kind="con" path="DROOLS/Drools"/>
+	<classpathentry kind="src" path="/drools-core"/>
+	<classpathentry kind="src" path="/drools-compiler"/>
+	<classpathentry kind="src" path="/drools-decisiontables"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/benchmark/manners/MannersBenchmark.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/benchmark/manners/MannersBenchmark.java	2008-07-16 17:22:56 UTC (rev 21070)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/benchmark/manners/MannersBenchmark.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -15,9 +15,10 @@
 import org.drools.RuleBase;
 import org.drools.RuleBaseFactory;
 import org.drools.StatefulSession;
+import org.drools.rule.Package;
+
 import org.drools.compiler.PackageBuilder;
 import org.drools.compiler.PackageBuilderConfiguration;
-import org.drools.rule.Package;
 
 public class MannersBenchmark {
 	/** Number of guests at the dinner (default: 16). */
@@ -73,7 +74,7 @@
 	 * Convert the facts from the <code>InputStream</code> to a list of
 	 * objects.
 	 */
-	protected static List getInputObjects(InputStream inputStream)
+	public static List getInputObjects(InputStream inputStream)
 			throws IOException {
 		List list = new ArrayList();
 

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/FibonacciExample.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/FibonacciExample.java	2008-07-16 17:22:56 UTC (rev 21070)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/FibonacciExample.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -6,6 +6,7 @@
 import org.drools.RuleBaseFactory;
 import org.drools.StatefulSession;
 import org.drools.audit.WorkingMemoryFileLogger;
+
 import org.drools.compiler.PackageBuilder;
 
 public class FibonacciExample {

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/Car.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/Car.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/Car.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,103 @@
+package org.drools.examples.learner;
+
+import org.drools.learner.tools.ClassAnnotation;
+import org.drools.learner.tools.FieldAnnotation;
+
+//@ClassAnnotation(label_element = "getLabel2")
+public class Car {
+	@FieldAnnotation(readingSeq = 0)
+	private String buying;		//"vhigh", "high", "med", "low"
+	@FieldAnnotation(readingSeq = 1)
+	private String maint;		//"vhigh", "high", "med", "low"
+	@FieldAnnotation(readingSeq = 2)
+	private String doors;		//"2", "3", "4", "5more"
+	@FieldAnnotation(readingSeq = 3)
+	private String persons;		//"2", "4", "more"
+	@FieldAnnotation(readingSeq = 4)
+	private String lug_boot;	//"small", "med", "big"
+	@FieldAnnotation(readingSeq = 5)
+	private String safety; 		//"low", "med", "high"
+	@FieldAnnotation(readingSeq = 6, target = true)
+	private String target; 		//"unacc", "acc", "good", "vgood"
+	
+	public boolean getLabel2() {
+		return (doors.equalsIgnoreCase("5more") && safety.equalsIgnoreCase("med") &&  buying.equalsIgnoreCase("low"));
+	}
+	public Car() {
+
+	}
+	public String getBuying() {
+		return buying;
+	}
+
+	public void setBuying(String buying) {
+		this.buying = buying;
+	}
+
+	public String getMaint() {
+		return maint;
+	}
+
+	public void setMaint(String maint) {
+		this.maint = maint;
+	}
+
+	public String getDoors() {
+		return doors;
+	}
+
+	public void setDoors(String doors) {
+		this.doors = doors;
+	}
+
+	public String getPersons() {
+		return persons;
+	}
+
+	public void setPersons(String persons) {
+		this.persons = persons;
+	}
+
+	public String getLug_boot() {
+		return lug_boot;
+	}
+
+	public void setLug_boot(String lug_boot) {
+		this.lug_boot = lug_boot;
+	}
+
+	public String getSafety() {
+		return safety;
+	}
+
+	public void setSafety(String safety) {
+		this.safety = safety;
+	}
+	
+	public String getTarget() {
+		return target;
+	}
+
+	public void setTarget(String carClass) {
+		this.target = carClass;
+	}
+	
+	
+	public boolean getLabel() {
+		return (doors.equalsIgnoreCase("5more"));
+	}
+	
+	
+	public String toString() {
+		String out = "Car(buy:" +getBuying() + 
+						" doors:"+getDoors()+ 
+						" lug_boot:"+getLug_boot()+ 
+						" maint:"+getMaint()+
+						" persons:"+getPersons()+
+						" safety:"+getSafety()+
+						" target:"+getTarget();
+		return out;
+	}
+
+	
+}
\ No newline at end of file


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/Car.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/CarExample.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/CarExample.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/CarExample.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,101 @@
+package org.drools.examples.learner;
+
+import java.util.List;
+
+import org.drools.RuleBase;
+import org.drools.RuleBaseFactory;
+import org.drools.StatefulSession;
+import org.drools.audit.WorkingMemoryFileLogger;
+import org.drools.compiler.PackageBuilder;
+import org.drools.event.DebugAgendaEventListener;
+import org.drools.event.DebugWorkingMemoryEventListener;
+import org.drools.learner.DecisionTree;
+import org.drools.learner.builder.DecisionTreeBuilder;
+import org.drools.learner.builder.DecisionTreeFactory;
+import org.drools.learner.tools.ObjectFactory;
+
+public class CarExample {
+	
+	
+	public static final void main(final String[] args) throws Exception {
+		// my rule base 
+		final RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+
+		final StatefulSession session = ruleBase.newStatefulSession();	// LearningSession
+
+		//session.addEventListener( new DebugAgendaEventListener() );
+		//session.addEventListener( new DebugWorkingMemoryEventListener() );
+
+		//final WorkingMemoryFileLogger logger = new WorkingMemoryFileLogger( session );
+		//logger.setFileName( "log/car" );   
+		
+		String inputFile = new String("data/car/car.data.txt");
+		Class<?> obj_class = Car.class;
+		List<Object> facts = ObjectFactory.getObjects(obj_class, inputFile);
+		for (Object r : facts) {
+			session.insert(r);
+		}
+
+		// instantiate a learner for a specific object class and pass session to train
+		DecisionTree decision_tree; int ALGO = 400;
+		/* 
+		 * Single	1xx, Bag 	2xx, Boost 3xx
+		 * ID3 		x1x, C45 	x2x
+		 * Entropy	xx1, Gain	xx2
+		 */
+		switch (ALGO) {
+		case 111:
+			decision_tree  = DecisionTreeFactory.createSingleID3E(session, obj_class);
+			break;
+		case 112:
+			decision_tree  = DecisionTreeFactory.createSingleID3G(session, obj_class);
+			break;
+		case 121: 
+			decision_tree  = DecisionTreeFactory.createSingleC45E(session, obj_class);
+			break;
+		case 122: 
+			decision_tree  = DecisionTreeFactory.createSingleC45G(session, obj_class);
+			break;
+		case 221:
+			decision_tree  = DecisionTreeFactory.createBagC45E(session, obj_class);
+			break;		
+		case 222:
+			decision_tree  = DecisionTreeFactory.createBagC45G(session, obj_class);
+			break;	
+		case 321:
+			decision_tree  = DecisionTreeFactory.createBoostedC45E(session, obj_class);
+			break;
+		case 322:
+			decision_tree  = DecisionTreeFactory.createBoostedC45G(session, obj_class);
+			break;
+//			case 3:
+//			decision_tree  = DecisionTreeFactory.createGlobal2(session, obj_class);
+//			break;
+		case 400: 
+			decision_tree = DecisionTreeFactory.createSinglePrunnedC45E(session, obj_class);
+			break;
+		default:
+			decision_tree  = DecisionTreeFactory.createSingleID3E(session, obj_class);
+		
+		}
+		
+		final PackageBuilder builder = new PackageBuilder();
+		//this wil generate the rules, then parse and compile in one step
+		builder.addPackageFromTree( decision_tree );
+//		System.exit(0);
+		ruleBase.addPackage( builder.getPackage() );
+		/* 
+			final Reader source = new InputStreamReader( HelloWorldExample.class.getResourceAsStream( "HelloWorld.drl" ) );
+			//get the compiled package (which is serializable)
+		    final Package pkg = builder.getPackage();
+		    //add the package to a rulebase (deploy the rule package).
+		    ruleBase.addPackage( pkg );
+		 */
+
+		session.fireAllRules();
+
+		//logger.writeToDisk();
+
+		session.dispose();
+	}
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/CarExample.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/CarExampleFromDrl.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/CarExampleFromDrl.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/CarExampleFromDrl.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,64 @@
+package org.drools.examples.learner;
+
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.util.List;
+
+import org.drools.RuleBase;
+import org.drools.RuleBaseFactory;
+import org.drools.StatefulSession;
+import org.drools.audit.WorkingMemoryFileLogger;
+import org.drools.compiler.PackageBuilder;
+import org.drools.event.DebugAgendaEventListener;
+import org.drools.event.DebugWorkingMemoryEventListener;
+import org.drools.learner.tools.ObjectFactory;
+import org.drools.rule.Package;
+
+public class CarExampleFromDrl {
+	
+	public static final void main(final String[] args) throws Exception {
+        //read in the source
+        //final Reader source = new InputStreamReader( HelloWorldExample.class.getResourceAsStream( "HelloWorld.drl" ) );
+    	final Reader source = new InputStreamReader( Car.class.getResourceAsStream( "car_c45_boost2.drl" ) );
+
+        final PackageBuilder builder = new PackageBuilder();
+
+        //this wil parse and compile in one step
+        builder.addPackageFromDrl( source );
+        
+        // Check the builder for errors
+        if ( builder.hasErrors() ) {
+            System.out.println( builder.getErrors().toString() );
+            throw new RuntimeException( "Unable to compile \"car_c45_boost2.drl\".");
+        }
+
+        //get the compiled package (which is serializable)
+        final Package pkg = builder.getPackage();
+
+        //add the package to a rulebase (deploy the rule package).
+        final RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+        ruleBase.addPackage( pkg );
+
+        final StatefulSession session = ruleBase.newStatefulSession();
+        
+        session.addEventListener( new DebugAgendaEventListener() );
+        session.addEventListener( new DebugWorkingMemoryEventListener() );
+        
+        final WorkingMemoryFileLogger logger = new WorkingMemoryFileLogger( session );
+        logger.setFileName( "log/car_c45_boost2" );        
+
+        String inputFile = new String("data/car/car.data.txt");
+		Class<?> obj_class = Car.class;
+		List<Object> facts = ObjectFactory.getObjects(obj_class, inputFile);
+		for (Object r : facts) {
+			session.insert(r);
+		}
+        
+        session.fireAllRules();
+        
+       logger.writeToDisk();
+        
+        session.dispose();
+    }
+
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/CarExampleFromDrl.java
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/troubleticket/TroubleTicketWithDT.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/troubleticket/TroubleTicketWithDT.java	2008-07-16 17:22:56 UTC (rev 21070)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/troubleticket/TroubleTicketWithDT.java	2008-07-16 17:39:52 UTC (rev 21071)
@@ -8,15 +8,12 @@
 import org.drools.RuleBase;
 import org.drools.RuleBaseFactory;
 import org.drools.StatefulSession;
-import org.drools.StatelessSession;
-import org.drools.WorkingMemory;
 import org.drools.audit.WorkingMemoryFileLogger;
+
 import org.drools.compiler.DroolsParserException;
 import org.drools.compiler.PackageBuilder;
 import org.drools.decisiontable.InputType;
 import org.drools.decisiontable.SpreadsheetCompiler;
-import org.drools.examples.decisiontable.Driver;
-import org.drools.examples.decisiontable.Policy;
 
 /**
  * This shows off a decision table.

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/HelloWorld.drl
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/HelloWorld.drl	2008-07-16 17:22:56 UTC (rev 21070)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/HelloWorld.drl	2008-07-16 17:39:52 UTC (rev 21071)
@@ -3,7 +3,7 @@
 import org.drools.examples.HelloWorldExample.Message;
 
 global java.util.List list
- /*
+
 rule "Hello World"
     dialect "mvel"
 	when
@@ -24,13 +24,13 @@
 	System.out.println( message ); 
 	System.out.println( message ); 			
 end
-*/
 
+
 rule "new rule"
 		dialect "mvel"
 	when
 	    m : Message( status == Message.HELLO, message : message )
-		eval( null )
+//		eval( null )
 	then
 		System.out.println( list );
-end
\ No newline at end of file
+end

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/learner/car_c45_one.drl
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/learner/car_c45_one.drl	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/learner/car_c45_one.drl	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,69 @@
+package org.drools.examples.learner;
+
+import org.drools.examples.learner.Car
+
+rule "#0 label2= false  classifying 432.0 num of facts with rank:0.25" 
+	 when
+		 $car_0 : Car(buying == "high", $target_label : label2 )
+	 then 
+		 System.out.println("[label2] Expected value (" + $target_label + "), Classified as (false )");
+end
+
+rule "#4 label2= false  classifying 432.0 num of facts with rank:0.25" 
+	 when
+		 $car_0 : Car(buying == "vhigh", $target_label : label2 )
+	 then 
+		 System.out.println("[label2] Expected value (" + $target_label + "), Classified as (false )");
+end
+
+rule "#6 label2= false  classifying 432.0 num of facts with rank:0.25" 
+	 when
+		 $car_0 : Car(buying == "med", $target_label : label2 )
+	 then 
+		 System.out.println("[label2] Expected value (" + $target_label + "), Classified as (false )");
+end
+
+rule "#5 label2= false  classifying 108.0 num of facts with rank:0.0625" 
+	 when
+		 $car_0 : Car(buying == "low", doors == "4", $target_label : label2 )
+	 then 
+		 System.out.println("[label2] Expected value (" + $target_label + "), Classified as (false )");
+end
+
+rule "#7 label2= false  classifying 108.0 num of facts with rank:0.0625" 
+	 when
+		 $car_0 : Car(buying == "low", doors == "2", $target_label : label2 )
+	 then 
+		 System.out.println("[label2] Expected value (" + $target_label + "), Classified as (false )");
+end
+
+rule "#8 label2= false  classifying 108.0 num of facts with rank:0.0625" 
+	 when
+		 $car_0 : Car(buying == "low", doors == "3", $target_label : label2 )
+	 then 
+		 System.out.println("[label2] Expected value (" + $target_label + "), Classified as (false )");
+end
+
+rule "#1 label2= true  classifying 36.0 num of facts with rank:0.020833333333333332" 
+	 when
+		 $car_0 : Car(buying == "low", doors == "5more", safety == "med", $target_label : label2 )
+	 then 
+		 System.out.println("[label2] Expected value (" + $target_label + "), Classified as (true )");
+end
+
+rule "#2 label2= false  classifying 36.0 num of facts with rank:0.020833333333333332" 
+	 when
+		 $car_0 : Car(buying == "low", doors == "5more", safety == "high", $target_label : label2 )
+	 then 
+		 System.out.println("[label2] Expected value (" + $target_label + "), Classified as (false )");
+end
+
+rule "#3 label2= false  classifying 36.0 num of facts with rank:0.020833333333333332" 
+	 when
+		 $car_0 : Car(buying == "low", doors == "5more", safety == "low", $target_label : label2 )
+	 then 
+		 System.out.println("[label2] Expected value (" + $target_label + "), Classified as (false )");
+end
+
+//THE END: Total number of facts correctly classified= 1728 over 1728.0
+//with 9 number of rules over 9 total number of rules 

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/learner/car_c45_one.stats
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/learner/car_c45_one.stats	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/learner/car_c45_one.stats	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,4 @@
+TESTING results: incorrect 0
+TESTING results: correct 1728
+TESTING results: unknown 0
+TESTING results: Total Number 1728
\ No newline at end of file

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/learner/golf_c45_one.drl
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/learner/golf_c45_one.drl	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/learner/golf_c45_one.drl	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,41 @@
+package org.drools.examples.learner;
+
+import org.drools.examples.learner.Golf
+
+rule "#0 decision= Play  classifying 4.0 num of facts with rank:0.2857142857142857" 
+	 when
+		 $golf_0 : Golf(outlook == "overcast", $target_label : decision )
+	 then 
+		 System.out.println("[decision] Expected value (" + $target_label + "), Classified as (Play )");
+end
+
+rule "#3 decision= Play  classifying 3.0 num of facts with rank:0.21428571428571427" 
+	 when
+		 $golf_0 : Golf(outlook == "rain", windy == false, $target_label : decision )
+	 then 
+		 System.out.println("[decision] Expected value (" + $target_label + "), Classified as (Play )");
+end
+
+rule "#4 decision= Don't Play  classifying 3.0 num of facts with rank:0.21428571428571427" 
+	 when
+		 $golf_0 : Golf(outlook == "sunny", humidity > 77, $target_label : decision )
+	 then 
+		 System.out.println("[decision] Expected value (" + $target_label + "), Classified as (Don't Play )");
+end
+
+rule "#1 decision= Play  classifying 2.0 num of facts with rank:0.14285714285714285" 
+	 when
+		 $golf_0 : Golf(outlook == "sunny", humidity <= 77, $target_label : decision )
+	 then 
+		 System.out.println("[decision] Expected value (" + $target_label + "), Classified as (Play )");
+end
+
+rule "#2 decision= Don't Play  classifying 2.0 num of facts with rank:0.14285714285714285" 
+	 when
+		 $golf_0 : Golf(outlook == "rain", windy == true, $target_label : decision )
+	 then 
+		 System.out.println("[decision] Expected value (" + $target_label + "), Classified as (Don't Play )");
+end
+
+//THE END: Total number of facts correctly classified= 14 over 14.0
+//with 5 number of rules over 5 total number of rules 

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/learner/golf_c45_one.stats
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/learner/golf_c45_one.stats	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/learner/golf_c45_one.stats	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,4 @@
+TESTING results: incorrect 0
+TESTING results: correct 14
+TESTING results: unknown 0
+TESTING results: Total Number 14
\ No newline at end of file

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/learner/log/car_c45_one.log
===================================================================

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/learner/log/golf_c45_one.log
===================================================================

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/learner/log/restaurant_id3_one.log
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/learner/log/restaurant_id3_one.log	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/learner/log/restaurant_id3_one.log	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1 @@
+[stat] (Learner) ******************** 1st best attr: patrons[stat] (Learner) ******************** 1st best attr: hungry[stat] (Learner) ******************** 1st best attr: type[stat] (Learner) ******************** 1st best attr: fri_sat
\ No newline at end of file

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/learner/restaurant_id3_one.drl
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/learner/restaurant_id3_one.drl	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/learner/restaurant_id3_one.drl	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,55 @@
+package org.drools.examples.learner;
+
+import org.drools.examples.learner.Restaurant
+
+rule "#7 will_wait= true  classifying 3.0 num of facts with rank:0.2727272727272727" 
+	 when
+		 $restaurant_0 : Restaurant(patrons == "Some", $target_label : will_wait )
+	 then 
+		 System.out.println("[will_wait] Expected value (" + $target_label + "), Classified as (true )");
+end
+
+rule "#1 will_wait= false  classifying 2.0 num of facts with rank:0.18181818181818182" 
+	 when
+		 $restaurant_0 : Restaurant(patrons == "None", $target_label : will_wait )
+	 then 
+		 System.out.println("[will_wait] Expected value (" + $target_label + "), Classified as (false )");
+end
+
+rule "#4 will_wait= false  classifying 2.0 num of facts with rank:0.18181818181818182" 
+	 when
+		 $restaurant_0 : Restaurant(patrons == "Full", hungry == false, $target_label : will_wait )
+	 then 
+		 System.out.println("[will_wait] Expected value (" + $target_label + "), Classified as (false )");
+end
+
+rule "#2 will_wait= false  classifying 1.0 num of facts with rank:0.09090909090909091" 
+	 when
+		 $restaurant_0 : Restaurant(patrons == "Full", hungry == true, type == "Italian", $target_label : will_wait )
+	 then 
+		 System.out.println("[will_wait] Expected value (" + $target_label + "), Classified as (false )");
+end
+
+rule "#3 will_wait= false  classifying 1.0 num of facts with rank:0.09090909090909091" 
+	 when
+		 $restaurant_0 : Restaurant(patrons == "Full", hungry == true, type == "Thai", fri_sat == false, $target_label : will_wait )
+	 then 
+		 System.out.println("[will_wait] Expected value (" + $target_label + "), Classified as (false )");
+end
+
+rule "#5 will_wait= true  classifying 1.0 num of facts with rank:0.09090909090909091" 
+	 when
+		 $restaurant_0 : Restaurant(patrons == "Full", hungry == true, type == "Thai", fri_sat == true, $target_label : will_wait )
+	 then 
+		 System.out.println("[will_wait] Expected value (" + $target_label + "), Classified as (true )");
+end
+
+rule "#6 will_wait= true  classifying 1.0 num of facts with rank:0.09090909090909091" 
+	 when
+		 $restaurant_0 : Restaurant(patrons == "Full", hungry == true, type == "Burger", $target_label : will_wait )
+	 then 
+		 System.out.println("[will_wait] Expected value (" + $target_label + "), Classified as (true )");
+end
+
+//THE END: Total number of facts correctly classified= 11 over 11.0
+//with 7 number of rules over 8 total number of rules 

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/learner/restaurant_id3_one.stats
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/learner/restaurant_id3_one.stats	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/learner/restaurant_id3_one.stats	2008-07-16 17:39:52 UTC (rev 21071)
@@ -0,0 +1,4 @@
+TESTING results: incorrect 0
+TESTING results: correct 11
+TESTING results: unknown 0
+TESTING results: Total Number 11
\ No newline at end of file

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-guvnor/.classpath
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-guvnor/.classpath	2008-07-16 17:22:56 UTC (rev 21070)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-guvnor/.classpath	2008-07-16 17:39:52 UTC (rev 21071)
@@ -67,7 +67,7 @@
   <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-annotations/3.3.0.ga/hibernate-annotations-3.3.0.ga.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-entitymanager/3.3.1.ga/hibernate-entitymanager-3.3.1.ga.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-commons-annotations/3.0.0.ga/hibernate-commons-annotations-3.0.0.ga.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-validator/3.0.0.ga/hibernate-validator-3.0.0.ga.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-validator/3.0.0.ga/hibernate-validator-3.0.0.GA.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/jboss/security/identity-impl/2.0.2.CR6/identity-impl-2.0.2.CR6.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/jboss/security/jboss-security-acl/2.0.2.Beta4/jboss-security-acl-2.0.2.Beta4.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/jboss/security/acl-spi/2.0.2.CR6/acl-spi-2.0.2.CR6.jar"/>

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-jsr94/.classpath
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-jsr94/.classpath	2008-07-16 17:22:56 UTC (rev 21070)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-jsr94/.classpath	2008-07-16 17:39:52 UTC (rev 21071)
@@ -1,21 +1,21 @@
-<classpath>
-  <classpathentry kind="src" path="src/main/java"/>
-  <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
-  <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
-  <classpathentry kind="src" path="src/test/resources" output="target/test-classes" excluding="**/*.java"/>
-  <classpathentry kind="output" path="target/classes"/>
-  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-  <classpathentry kind="var" path="M2_REPO/jsr94/jsr94/1.1/jsr94-1.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/jsr94/jsr94-sigtest/1.1/jsr94-sigtest-1.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/jsr94/jsr94-tck/1.0.3/jsr94-tck-1.0.3.jar"/>
-  <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
-  <classpathentry kind="src" path="/drools-compiler"/>
-  <classpathentry kind="src" path="/drools-core"/>
-  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel/2.0-dp4/mvel-2.0-dp4.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.0/antlr-runtime-3.0.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.2.3.v_686_R32x/core-3.2.3.v_686_R32x.jar"/>
-  <classpathentry kind="var" path="M2_REPO/janino/janino/2.5.10/janino-2.5.10.jar"/>
-  <classpathentry kind="src" path="/drools-decisiontables"/>
-  <classpathentry kind="src" path="/drools-templates"/>
-  <classpathentry kind="var" path="M2_REPO/jexcelapi/jxl/2.4.2/jxl-2.4.2.jar"/>
+<classpath>
+  <classpathentry kind="src" path="src/main/java"/>
+  <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
+  <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
+  <classpathentry kind="src" path="src/test/resources" output="target/test-classes" excluding="**/*.java"/>
+  <classpathentry kind="output" path="target/classes"/>
+  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+  <classpathentry kind="var" path="M2_REPO/jsr94/jsr94/1.1/jsr94-1.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/jsr94/jsr94-sigtest/1.1/jsr94-sigtest-1.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/jsr94/jsr94-tck/1.0.3/jsr94-tck-1.0.3.jar"/>
+  <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
+  <classpathentry kind="src" path="/drools-compiler"/>
+  <classpathentry kind="src" path="/drools-core"/>
+  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel/2.0-dp4/mvel-2.0-dp4.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.0/antlr-runtime-3.0.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.2.3.v_686_R32x/core-3.2.3.v_686_R32x.jar"/>
+  <classpathentry kind="var" path="M2_REPO/janino/janino/2.5.10/janino-2.5.10.jar"/>
+  <classpathentry kind="src" path="/drools-decisiontables"/>
+  <classpathentry kind="src" path="/drools-templates"/>
+  <classpathentry kind="var" path="M2_REPO/jexcelapi/jxl/2.4.2/jxl-2.4.2.jar"/>
 </classpath>
\ No newline at end of file

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-jsr94/.project
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-jsr94/.project	2008-07-16 17:22:56 UTC (rev 21070)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-jsr94/.project	2008-07-16 17:39:52 UTC (rev 21071)
@@ -1,18 +1,18 @@
-<projectDescription>
-  <name>drools-jsr94</name>
-  <comment>A rule production system</comment>
-  <projects>
-    <project>drools-compiler</project>
-    <project>drools-core</project>
-    <project>drools-decisiontables</project>
-    <project>drools-templates</project>
-  </projects>
-  <buildSpec>
-    <buildCommand>
-      <name>org.eclipse.jdt.core.javabuilder</name>
-    </buildCommand>
-  </buildSpec>
-  <natures>
-    <nature>org.eclipse.jdt.core.javanature</nature>
-  </natures>
+<projectDescription>
+  <name>drools-jsr94</name>
+  <comment>A rule production system</comment>
+  <projects>
+    <project>drools-compiler</project>
+    <project>drools-core</project>
+    <project>drools-decisiontables</project>
+    <project>drools-templates</project>
+  </projects>
+  <buildSpec>
+    <buildCommand>
+      <name>org.eclipse.jdt.core.javabuilder</name>
+    </buildCommand>
+  </buildSpec>
+  <natures>
+    <nature>org.eclipse.jdt.core.javanature</nature>
+  </natures>
 </projectDescription>
\ No newline at end of file

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-repository/.classpath
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-repository/.classpath	2008-07-16 17:22:56 UTC (rev 21070)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-repository/.classpath	2008-07-16 17:39:52 UTC (rev 21071)
@@ -1,59 +1,59 @@
-<classpath>
-  <classpathentry kind="src" path="src/main/java"/>
-  <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
-  <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
-  <classpathentry kind="src" path="src/test/resources" output="target/test-classes" excluding="**/*.java"/>
-  <classpathentry kind="output" path="target/classes"/>
-  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-  <classpathentry kind="var" path="M2_REPO/hsqldb/hsqldb/1.8.0.2/hsqldb-1.8.0.2.jar"/>
-  <classpathentry kind="var" path="M2_REPO/javax/jcr/jcr/1.0/jcr-1.0.jar"/>
-  <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.13/log4j-1.2.13.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/apache/jackrabbit/jackrabbit-core/1.4.1/jackrabbit-core-1.4.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/concurrent/concurrent/1.3.4/concurrent-1.3.4.jar"/>
-  <classpathentry kind="var" path="M2_REPO/commons-collections/commons-collections/3.1/commons-collections-3.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/apache/jackrabbit/jackrabbit-api/1.4/jackrabbit-api-1.4.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/apache/jackrabbit/jackrabbit-jcr-commons/1.4/jackrabbit-jcr-commons-1.4.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-api/1.3.0/slf4j-api-1.3.0.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/apache/jackrabbit/jackrabbit-spi-commons/1.4/jackrabbit-spi-commons-1.4.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/apache/jackrabbit/jackrabbit-spi/1.4/jackrabbit-spi-1.4.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/apache/jackrabbit/jackrabbit-text-extractors/1.4/jackrabbit-text-extractors-1.4.jar"/>
-  <classpathentry kind="var" path="M2_REPO/xerces/xercesImpl/2.8.0/xercesImpl-2.8.0.jar"/>
-  <classpathentry kind="var" path="M2_REPO/xml-apis/xml-apis/2.0.2/xml-apis-2.0.2.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/apache/lucene/lucene-core/2.2.0/lucene-core-2.2.0.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/apache/derby/derby/10.2.1.6/derby-10.2.1.6.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/security/acl-spi/2.0.2.CR6/acl-spi-2.0.2.CR6.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/security/identity-spi/2.0.2.CR6/identity-spi-2.0.2.CR6.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/security/authorization-spi/2.0.2.CR6/authorization-spi-2.0.2.CR6.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/security/jboss-security-acl/2.0.2.Beta4/jboss-security-acl-2.0.2.Beta4.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/jboss-common-core/2.2.1.GA/jboss-common-core-2.2.1.GA.jar"/>
-  <classpathentry kind="var" path="M2_REPO/apache-xerces/xml-apis/2.7.1/xml-apis-2.7.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/apache-httpclient/commons-httpclient/2.0.2/commons-httpclient-2.0.2.jar"/>
-  <classpathentry kind="var" path="M2_REPO/apache-slide/webdavlib/2.0/webdavlib-2.0.jar"/>
-  <classpathentry kind="var" path="M2_REPO/jboss/jboss-common-logging-spi/2.0.4.GA/jboss-common-logging-spi-2.0.4.GA.jar"/>
-  <classpathentry kind="var" path="M2_REPO/jboss/jboss-logging-spi/2.0.2.GA/jboss-logging-spi-2.0.2.GA.jar"/>
-  <classpathentry kind="var" path="M2_REPO/jboss/jboss-logging-log4j/2.0.2.GA/jboss-logging-log4j-2.0.2.GA.jar"/>
-  <classpathentry kind="var" path="M2_REPO/jboss/jboss-common-core/2.0.2.GA/jboss-common-core-2.0.2.GA.jar"/>
-  <classpathentry kind="var" path="M2_REPO/apache-log4j/log4j/1.2.14/log4j-1.2.14.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/security/jboss-security-acl-impl/2.0.2.CR6/jboss-security-acl-impl-2.0.2.CR6.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/security/jboss-security-spi/2.0.2.CR6/jboss-security-spi-2.0.2.CR6.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate/3.2.4.sp1/hibernate-3.2.4.sp1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/net/sf/ehcache/ehcache/1.2.3/ehcache-1.2.3.jar"/>
-  <classpathentry kind="var" path="M2_REPO/commons-logging/commons-logging/1.0.4/commons-logging-1.0.4.jar"/>
-  <classpathentry kind="var" path="M2_REPO/javax/transaction/jta/1.0.1B/jta-1.0.1B.jar"/>
-  <classpathentry kind="var" path="M2_REPO/asm/asm-attrs/1.5.3/asm-attrs-1.5.3.jar"/>
-  <classpathentry kind="var" path="M2_REPO/dom4j/dom4j/1.6.1/dom4j-1.6.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/antlr/antlr/2.7.6/antlr-2.7.6.jar"/>
-  <classpathentry kind="var" path="M2_REPO/cglib/cglib/2.1_3/cglib-2.1_3.jar"/>
-  <classpathentry kind="var" path="M2_REPO/asm/asm/1.5.3/asm-1.5.3.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-annotations/3.3.0.ga/hibernate-annotations-3.3.0.ga.jar"/>
-  <classpathentry kind="var" path="M2_REPO/javax/persistence/persistence-api/1.0/persistence-api-1.0.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-entitymanager/3.3.1.ga/hibernate-entitymanager-3.3.1.ga.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-commons-annotations/3.0.0.ga/hibernate-commons-annotations-3.0.0.ga.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-validator/3.0.0.ga/hibernate-validator-3.0.0.ga.jar"/>
-  <classpathentry kind="var" path="M2_REPO/jboss/javassist/3.3.ga/javassist-3.3.ga.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/security/identity-impl/2.0.2.CR6/identity-impl-2.0.2.CR6.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-log4j12/1.3.0/slf4j-log4j12-1.3.0.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/tmatesoft/svnkit/1.1.2/svnkit-1.1.2.jar"/>
-  <classpathentry kind="var" path="M2_REPO/ch/ethz/ganymed/ganymed-ssh2/build210/ganymed-ssh2-build210.jar"/>
+<classpath>
+  <classpathentry kind="src" path="src/main/java"/>
+  <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
+  <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
+  <classpathentry kind="src" path="src/test/resources" output="target/test-classes" excluding="**/*.java"/>
+  <classpathentry kind="output" path="target/classes"/>
+  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+  <classpathentry kind="var" path="M2_REPO/hsqldb/hsqldb/1.8.0.2/hsqldb-1.8.0.2.jar"/>
+  <classpathentry kind="var" path="M2_REPO/javax/jcr/jcr/1.0/jcr-1.0.jar"/>
+  <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.13/log4j-1.2.13.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/apache/jackrabbit/jackrabbit-core/1.4.1/jackrabbit-core-1.4.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/concurrent/concurrent/1.3.4/concurrent-1.3.4.jar"/>
+  <classpathentry kind="var" path="M2_REPO/commons-collections/commons-collections/3.1/commons-collections-3.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/apache/jackrabbit/jackrabbit-api/1.4/jackrabbit-api-1.4.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/apache/jackrabbit/jackrabbit-jcr-commons/1.4/jackrabbit-jcr-commons-1.4.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-api/1.3.0/slf4j-api-1.3.0.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/apache/jackrabbit/jackrabbit-spi-commons/1.4/jackrabbit-spi-commons-1.4.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/apache/jackrabbit/jackrabbit-spi/1.4/jackrabbit-spi-1.4.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/apache/jackrabbit/jackrabbit-text-extractors/1.4/jackrabbit-text-extractors-1.4.jar"/>
+  <classpathentry kind="var" path="M2_REPO/xerces/xercesImpl/2.8.0/xercesImpl-2.8.0.jar"/>
+  <classpathentry kind="var" path="M2_REPO/xml-apis/xml-apis/2.0.2/xml-apis-2.0.2.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/apache/lucene/lucene-core/2.2.0/lucene-core-2.2.0.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/apache/derby/derby/10.2.1.6/derby-10.2.1.6.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/jboss/security/acl-spi/2.0.2.CR6/acl-spi-2.0.2.CR6.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/jboss/security/identity-spi/2.0.2.CR6/identity-spi-2.0.2.CR6.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/jboss/security/authorization-spi/2.0.2.CR6/authorization-spi-2.0.2.CR6.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/jboss/security/jboss-security-acl/2.0.2.Beta4/jboss-security-acl-2.0.2.Beta4.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/jboss/jboss-common-core/2.2.1.GA/jboss-common-core-2.2.1.GA.jar"/>
+  <classpathentry kind="var" path="M2_REPO/apache-xerces/xml-apis/2.7.1/xml-apis-2.7.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/apache-httpclient/commons-httpclient/2.0.2/commons-httpclient-2.0.2.jar"/>
+  <classpathentry kind="var" path="M2_REPO/apache-slide/webdavlib/2.0/webdavlib-2.0.jar"/>
+  <classpathentry kind="var" path="M2_REPO/jboss/jboss-common-logging-spi/2.0.4.GA/jboss-common-logging-spi-2.0.4.GA.jar"/>
+  <classpathentry kind="var" path="M2_REPO/jboss/jboss-logging-spi/2.0.2.GA/jboss-logging-spi-2.0.2.GA.jar"/>
+  <classpathentry kind="var" path="M2_REPO/jboss/jboss-logging-log4j/2.0.2.GA/jboss-logging-log4j-2.0.2.GA.jar"/>
+  <classpathentry kind="var" path="M2_REPO/jboss/jboss-common-core/2.0.2.GA/jboss-common-core-2.0.2.GA.jar"/>
+  <classpathentry kind="var" path="M2_REPO/apache-log4j/log4j/1.2.14/log4j-1.2.14.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/jboss/security/jboss-security-acl-impl/2.0.2.CR6/jboss-security-acl-impl-2.0.2.CR6.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/jboss/security/jboss-security-spi/2.0.2.CR6/jboss-security-spi-2.0.2.CR6.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate/3.2.4.sp1/hibernate-3.2.4.sp1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/net/sf/ehcache/ehcache/1.2.3/ehcache-1.2.3.jar"/>
+  <classpathentry kind="var" path="M2_REPO/commons-logging/commons-logging/1.0.4/commons-logging-1.0.4.jar"/>
+  <classpathentry kind="var" path="M2_REPO/javax/transaction/jta/1.0.1B/jta-1.0.1B.jar"/>
+  <classpathentry kind="var" path="M2_REPO/asm/asm-attrs/1.5.3/asm-attrs-1.5.3.jar"/>
+  <classpathentry kind="var" path="M2_REPO/dom4j/dom4j/1.6.1/dom4j-1.6.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/antlr/antlr/2.7.6/antlr-2.7.6.jar"/>
+  <classpathentry kind="var" path="M2_REPO/cglib/cglib/2.1_3/cglib-2.1_3.jar"/>
+  <classpathentry kind="var" path="M2_REPO/asm/asm/1.5.3/asm-1.5.3.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-annotations/3.3.0.ga/hibernate-annotations-3.3.0.ga.jar"/>
+  <classpathentry kind="var" path="M2_REPO/javax/persistence/persistence-api/1.0/persistence-api-1.0.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-entitymanager/3.3.1.ga/hibernate-entitymanager-3.3.1.ga.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-commons-annotations/3.0.0.ga/hibernate-commons-annotations-3.0.0.ga.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-validator/3.0.0.ga/hibernate-validator-3.0.0.GA.jar"/>
+  <classpathentry kind="var" path="M2_REPO/jboss/javassist/3.3.ga/javassist-3.3.ga.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/jboss/security/identity-impl/2.0.2.CR6/identity-impl-2.0.2.CR6.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-log4j12/1.3.0/slf4j-log4j12-1.3.0.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/tmatesoft/svnkit/1.1.2/svnkit-1.1.2.jar"/>
+  <classpathentry kind="var" path="M2_REPO/ch/ethz/ganymed/ganymed-ssh2/build210/ganymed-ssh2-build210.jar"/>
 </classpath>
\ No newline at end of file

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-repository/.project
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-repository/.project	2008-07-16 17:22:56 UTC (rev 21070)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-repository/.project	2008-07-16 17:39:52 UTC (rev 21071)
@@ -1,13 +1,13 @@
-<projectDescription>
-  <name>drools-repository</name>
-  <comment>A rule production system</comment>
-  <projects/>
-  <buildSpec>
-    <buildCommand>
-      <name>org.eclipse.jdt.core.javabuilder</name>
-    </buildCommand>
-  </buildSpec>
-  <natures>
-    <nature>org.eclipse.jdt.core.javanature</nature>
-  </natures>
+<projectDescription>
+  <name>drools-repository</name>
+  <comment>A rule production system</comment>
+  <projects/>
+  <buildSpec>
+    <buildCommand>
+      <name>org.eclipse.jdt.core.javabuilder</name>
+    </buildCommand>
+  </buildSpec>
+  <natures>
+    <nature>org.eclipse.jdt.core.javanature</nature>
+  </natures>
 </projectDescription>
\ No newline at end of file

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-solver/drools-solver-core/.classpath
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-solver/drools-solver-core/.classpath	2008-07-16 17:22:56 UTC (rev 21070)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-solver/drools-solver-core/.classpath	2008-07-16 17:39:52 UTC (rev 21071)
@@ -1,22 +1,22 @@
-<classpath>
-  <classpathentry kind="src" path="src/main/java"/>
-  <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
-  <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
-  <classpathentry kind="src" path="src/test/resources" output="target/test-classes" excluding="**/*.java"/>
-  <classpathentry kind="output" path="target/classes"/>
-  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-  <classpathentry kind="var" path="M2_REPO/com/thoughtworks/xstream/xstream/1.2.2/xstream-1.2.2.jar"/>
-  <classpathentry kind="var" path="M2_REPO/xpp3/xpp3_min/1.1.3.4.O/xpp3_min-1.1.3.4.O.jar"/>
-  <classpathentry kind="var" path="M2_REPO/commons-lang/commons-lang/2.3/commons-lang-2.3.jar"/>
-  <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.13/log4j-1.2.13.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/apache/commons/commons-io/1.3.2/commons-io-1.3.2.jar"/>
-  <classpathentry kind="src" path="/drools-compiler"/>
-  <classpathentry kind="src" path="/drools-core"/>
-  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel/2.0-dp4/mvel-2.0-dp4.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.0/antlr-runtime-3.0.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.2.3.v_686_R32x/core-3.2.3.v_686_R32x.jar"/>
-  <classpathentry kind="var" path="M2_REPO/janino/janino/2.5.10/janino-2.5.10.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-api/1.3.0/slf4j-api-1.3.0.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-log4j12/1.3.0/slf4j-log4j12-1.3.0.jar"/>
+<classpath>
+  <classpathentry kind="src" path="src/main/java"/>
+  <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
+  <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
+  <classpathentry kind="src" path="src/test/resources" output="target/test-classes" excluding="**/*.java"/>
+  <classpathentry kind="output" path="target/classes"/>
+  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+  <classpathentry kind="var" path="M2_REPO/com/thoughtworks/xstream/xstream/1.2.2/xstream-1.2.2.jar"/>
+  <classpathentry kind="var" path="M2_REPO/xpp3/xpp3_min/1.1.3.4.O/xpp3_min-1.1.3.4.O.jar"/>
+  <classpathentry kind="var" path="M2_REPO/commons-lang/commons-lang/2.3/commons-lang-2.3.jar"/>
+  <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.13/log4j-1.2.13.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/apache/commons/commons-io/1.3.2/commons-io-1.3.2.jar"/>
+  <classpathentry kind="src" path="/drools-compiler"/>
+  <classpathentry kind="src" path="/drools-core"/>
+  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel/2.0-dp4/mvel-2.0-dp4.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.0/antlr-runtime-3.0.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.2.3.v_686_R32x/core-3.2.3.v_686_R32x.jar"/>
+  <classpathentry kind="var" path="M2_REPO/janino/janino/2.5.10/janino-2.5.10.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-api/1.3.0/slf4j-api-1.3.0.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-log4j12/1.3.0/slf4j-log4j12-1.3.0.jar"/>
 </classpath>
\ No newline at end of file

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-solver/drools-solver-core/.project
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-solver/drools-solver-core/.project	2008-07-16 17:22:56 UTC (rev 21070)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-solver/drools-solver-core/.project	2008-07-16 17:39:52 UTC (rev 21071)
@@ -1,16 +1,16 @@
-<projectDescription>
-  <name>drools-solver-core</name>
-  <comment>Drools solver core ... TODO</comment>
-  <projects>
-    <project>drools-compiler</project>
-    <project>drools-core</project>
-  </projects>
-  <buildSpec>
-    <buildCommand>
-      <name>org.eclipse.jdt.core.javabuilder</name>
-    </buildCommand>
-  </buildSpec>
-  <natures>
-    <nature>org.eclipse.jdt.core.javanature</nature>
-  </natures>
+<projectDescription>
+  <name>drools-solver-core</name>
+  <comment>Drools solver core ... TODO</comment>
+  <projects>
+    <project>drools-compiler</project>
+    <project>drools-core</project>
+  </projects>
+  <buildSpec>
+    <buildCommand>
+      <name>org.eclipse.jdt.core.javabuilder</name>
+    </buildCommand>
+  </buildSpec>
+  <natures>
+    <nature>org.eclipse.jdt.core.javanature</nature>
+  </natures>
 </projectDescription>
\ No newline at end of file

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-solver/drools-solver-examples/.classpath
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-solver/drools-solver-examples/.classpath	2008-07-16 17:22:56 UTC (rev 21070)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-solver/drools-solver-examples/.classpath	2008-07-16 17:39:52 UTC (rev 21071)
@@ -1,23 +1,23 @@
-<classpath>
-  <classpathentry kind="src" path="src/main/java"/>
-  <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
-  <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
-  <classpathentry kind="src" path="src/test/resources" output="target/test-classes" excluding="**/*.java"/>
-  <classpathentry kind="output" path="target/classes"/>
-  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-  <classpathentry kind="var" path="M2_REPO/com/thoughtworks/xstream/xstream/1.2.2/xstream-1.2.2.jar"/>
-  <classpathentry kind="var" path="M2_REPO/xpp3/xpp3_min/1.1.3.4.O/xpp3_min-1.1.3.4.O.jar"/>
-  <classpathentry kind="var" path="M2_REPO/commons-lang/commons-lang/2.3/commons-lang-2.3.jar"/>
-  <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.13/log4j-1.2.13.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/apache/commons/commons-io/1.3.2/commons-io-1.3.2.jar"/>
-  <classpathentry kind="src" path="/drools-solver-core"/>
-  <classpathentry kind="src" path="/drools-core"/>
-  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel/2.0-dp4/mvel-2.0-dp4.jar"/>
-  <classpathentry kind="src" path="/drools-compiler"/>
-  <classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.0/antlr-runtime-3.0.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.2.3.v_686_R32x/core-3.2.3.v_686_R32x.jar"/>
-  <classpathentry kind="var" path="M2_REPO/janino/janino/2.5.10/janino-2.5.10.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-api/1.3.0/slf4j-api-1.3.0.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-log4j12/1.3.0/slf4j-log4j12-1.3.0.jar"/>
+<classpath>
+  <classpathentry kind="src" path="src/main/java"/>
+  <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
+  <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
+  <classpathentry kind="src" path="src/test/resources" output="target/test-classes" excluding="**/*.java"/>
+  <classpathentry kind="output" path="target/classes"/>
+  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+  <classpathentry kind="var" path="M2_REPO/com/thoughtworks/xstream/xstream/1.2.2/xstream-1.2.2.jar"/>
+  <classpathentry kind="var" path="M2_REPO/xpp3/xpp3_min/1.1.3.4.O/xpp3_min-1.1.3.4.O.jar"/>
+  <classpathentry kind="var" path="M2_REPO/commons-lang/commons-lang/2.3/commons-lang-2.3.jar"/>
+  <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.13/log4j-1.2.13.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/apache/commons/commons-io/1.3.2/commons-io-1.3.2.jar"/>
+  <classpathentry kind="src" path="/drools-solver-core"/>
+  <classpathentry kind="src" path="/drools-core"/>
+  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel/2.0-dp4/mvel-2.0-dp4.jar"/>
+  <classpathentry kind="src" path="/drools-compiler"/>
+  <classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.0/antlr-runtime-3.0.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.2.3.v_686_R32x/core-3.2.3.v_686_R32x.jar"/>
+  <classpathentry kind="var" path="M2_REPO/janino/janino/2.5.10/janino-2.5.10.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-api/1.3.0/slf4j-api-1.3.0.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-log4j12/1.3.0/slf4j-log4j12-1.3.0.jar"/>
 </classpath>
\ No newline at end of file

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-solver/drools-solver-examples/.project
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-solver/drools-solver-examples/.project	2008-07-16 17:22:56 UTC (rev 21070)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-solver/drools-solver-examples/.project	2008-07-16 17:39:52 UTC (rev 21071)
@@ -1,17 +1,17 @@
-<projectDescription>
-  <name>drools-solver-examples</name>
-  <comment>Drools solver examples ... TODO</comment>
-  <projects>
-    <project>drools-solver-core</project>
-    <project>drools-core</project>
-    <project>drools-compiler</project>
-  </projects>
-  <buildSpec>
-    <buildCommand>
-      <name>org.eclipse.jdt.core.javabuilder</name>
-    </buildCommand>
-  </buildSpec>
-  <natures>
-    <nature>org.eclipse.jdt.core.javanature</nature>
-  </natures>
+<projectDescription>
+  <name>drools-solver-examples</name>
+  <comment>Drools solver examples ... TODO</comment>
+  <projects>
+    <project>drools-solver-core</project>
+    <project>drools-core</project>
+    <project>drools-compiler</project>
+  </projects>
+  <buildSpec>
+    <buildCommand>
+      <name>org.eclipse.jdt.core.javabuilder</name>
+    </buildCommand>
+  </buildSpec>
+  <natures>
+    <nature>org.eclipse.jdt.core.javanature</nature>
+  </natures>
 </projectDescription>
\ No newline at end of file

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-templates/.classpath
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-templates/.classpath	2008-07-16 17:22:56 UTC (rev 21070)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-templates/.classpath	2008-07-16 17:39:52 UTC (rev 21071)
@@ -1,15 +1,15 @@
-<classpath>
-  <classpathentry kind="src" path="src/main/java"/>
-  <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
-  <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
-  <classpathentry kind="src" path="src/test/resources" output="target/test-classes" excluding="**/*.java"/>
-  <classpathentry kind="output" path="target/classes"/>
-  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-  <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
-  <classpathentry kind="src" path="/drools-compiler"/>
-  <classpathentry kind="src" path="/drools-core"/>
-  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel/2.0-dp4/mvel-2.0-dp4.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.0/antlr-runtime-3.0.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.2.3.v_686_R32x/core-3.2.3.v_686_R32x.jar"/>
-  <classpathentry kind="var" path="M2_REPO/janino/janino/2.5.10/janino-2.5.10.jar"/>
+<classpath>
+  <classpathentry kind="src" path="src/main/java"/>
+  <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
+  <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
+  <classpathentry kind="src" path="src/test/resources" output="target/test-classes" excluding="**/*.java"/>
+  <classpathentry kind="output" path="target/classes"/>
+  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+  <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
+  <classpathentry kind="src" path="/drools-compiler"/>
+  <classpathentry kind="src" path="/drools-core"/>
+  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel/2.0-dp4/mvel-2.0-dp4.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.0/antlr-runtime-3.0.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.2.3.v_686_R32x/core-3.2.3.v_686_R32x.jar"/>
+  <classpathentry kind="var" path="M2_REPO/janino/janino/2.5.10/janino-2.5.10.jar"/>
 </classpath>
\ No newline at end of file

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-templates/.project
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-templates/.project	2008-07-16 17:22:56 UTC (rev 21070)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-templates/.project	2008-07-16 17:39:52 UTC (rev 21071)
@@ -1,16 +1,16 @@
-<projectDescription>
-  <name>drools-templates</name>
-  <comment>A rule production system</comment>
-  <projects>
-    <project>drools-compiler</project>
-    <project>drools-core</project>
-  </projects>
-  <buildSpec>
-    <buildCommand>
-      <name>org.eclipse.jdt.core.javabuilder</name>
-    </buildCommand>
-  </buildSpec>
-  <natures>
-    <nature>org.eclipse.jdt.core.javanature</nature>
-  </natures>
+<projectDescription>
+  <name>drools-templates</name>
+  <comment>A rule production system</comment>
+  <projects>
+    <project>drools-compiler</project>
+    <project>drools-core</project>
+  </projects>
+  <buildSpec>
+    <buildCommand>
+      <name>org.eclipse.jdt.core.javabuilder</name>
+    </buildCommand>
+  </buildSpec>
+  <natures>
+    <nature>org.eclipse.jdt.core.javanature</nature>
+  </natures>
 </projectDescription>
\ No newline at end of file




More information about the jboss-svn-commits mailing list