You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by lu...@apache.org on 2012/09/28 18:43:21 UTC

svn commit: r1391539 [1/2] - in /commons/sandbox/nabla/trunk/src: main/java/org/apache/commons/nabla/forward/analysis/ main/java/org/apache/commons/nabla/forward/arithmetic/ main/java/org/apache/commons/nabla/forward/functions/ main/java/org/apache/com...

Author: luc
Date: Fri Sep 28 16:43:18 2012
New Revision: 1391539

URL: http://svn.apache.org/viewvc?rev=1391539&view=rev
Log:
Updated bytecode generation for static math functions.

Added:
    commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/instructions/InvokeStaticTransformer.java   (with props)
    commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/AcosGeneratorTest.java   (contents, props changed)
      - copied, changed from r1391537, commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/AcosGeneratorTest.java
    commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/AcoshGeneratorTest.java   (contents, props changed)
      - copied, changed from r1391537, commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/AcoshGeneratorTest.java
    commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/AsinGeneratorTest.java   (contents, props changed)
      - copied, changed from r1391537, commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/AsinGeneratorTest.java
    commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/AsinhGeneratorTest.java   (contents, props changed)
      - copied, changed from r1391537, commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/AsinhGeneratorTest.java
    commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/Atan2GeneratorTest.java   (contents, props changed)
      - copied, changed from r1391537, commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/Atan2GeneratorTest.java
    commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/AtanGeneratorTest.java   (contents, props changed)
      - copied, changed from r1391537, commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/AtanGeneratorTest.java
    commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/AtanhGeneratorTest.java   (contents, props changed)
      - copied, changed from r1391537, commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/AtanhGeneratorTest.java
    commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/CbrtGeneratorTest.java   (contents, props changed)
      - copied, changed from r1391537, commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/CbrtGeneratorTest.java
    commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/CosGeneratorTest.java   (contents, props changed)
      - copied, changed from r1391537, commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/CosGeneratorTest.java
    commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/CoshGeneratorTest.java   (contents, props changed)
      - copied, changed from r1391537, commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/CoshGeneratorTest.java
    commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/ExpGeneratorTest.java   (contents, props changed)
      - copied, changed from r1391537, commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/ExpGeneratorTest.java
    commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/Expm1GeneratorTest.java   (contents, props changed)
      - copied, changed from r1391537, commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/Expm1GeneratorTest.java
    commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/HypotGeneratorTest.java   (contents, props changed)
      - copied, changed from r1391537, commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/HypotGeneratorTest.java
    commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/Log10GeneratorTest.java   (contents, props changed)
      - copied, changed from r1391537, commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/Log10GeneratorTest.java
    commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/Log1pGeneratorTest.java   (contents, props changed)
      - copied, changed from r1391537, commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/Log1pGeneratorTest.java
    commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/LogGeneratorTest.java   (contents, props changed)
      - copied, changed from r1391537, commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/LogGeneratorTest.java
    commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/PowGeneratorTest.java   (contents, props changed)
      - copied, changed from r1391537, commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/PowGeneratorTest.java
    commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/SinGeneratorTest.java   (contents, props changed)
      - copied, changed from r1391537, commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/SinGeneratorTest.java
    commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/SinhGeneratorTest.java   (contents, props changed)
      - copied, changed from r1391537, commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/SinhGeneratorTest.java
    commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/SqrtGeneratorTest.java   (contents, props changed)
      - copied, changed from r1391537, commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/SqrtGeneratorTest.java
    commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/TanGeneratorTest.java   (contents, props changed)
      - copied, changed from r1391537, commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/TanGeneratorTest.java
    commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/TanhGeneratorTest.java   (contents, props changed)
      - copied, changed from r1391537, commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/TanhGeneratorTest.java
Removed:
    commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/functions/AcosTransformer.java
    commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/functions/AcoshTransformer.java
    commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/functions/AsinTransformer.java
    commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/functions/AsinhTransformer.java
    commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/functions/Atan2Transformer1.java
    commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/functions/Atan2Transformer12.java
    commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/functions/Atan2Transformer2.java
    commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/functions/AtanTransformer.java
    commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/functions/AtanhTransformer.java
    commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/functions/CbrtTransformer.java
    commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/functions/CosTransformer.java
    commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/functions/CoshTransformer.java
    commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/functions/ExpTransformer.java
    commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/functions/Expm1Transformer.java
    commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/functions/HypotTransformer1.java
    commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/functions/HypotTransformer12.java
    commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/functions/HypotTransformer2.java
    commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/functions/Log10Transformer.java
    commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/functions/Log1pTransformer.java
    commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/functions/LogTransformer.java
    commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/functions/MathInvocationTransformer.java
    commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/functions/PowTransformer1.java
    commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/functions/PowTransformer12.java
    commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/functions/PowTransformer2.java
    commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/functions/SinTransformer.java
    commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/functions/SinhTransformer.java
    commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/functions/SqrtTransformer.java
    commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/functions/TanTransformer.java
    commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/functions/TanhTransformer.java
    commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/functions/package-info.java
    commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/AcosGeneratorTest.java
    commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/AcoshGeneratorTest.java
    commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/AsinGeneratorTest.java
    commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/AsinhGeneratorTest.java
    commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/Atan2GeneratorTest.java
    commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/AtanGeneratorTest.java
    commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/AtanhGeneratorTest.java
    commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/CbrtGeneratorTest.java
    commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/CosGeneratorTest.java
    commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/CoshGeneratorTest.java
    commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/ExpGeneratorTest.java
    commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/Expm1GeneratorTest.java
    commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/HypotGeneratorTest.java
    commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/Log10GeneratorTest.java
    commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/Log1pGeneratorTest.java
    commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/LogGeneratorTest.java
    commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/PowGeneratorTest.java
    commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/SinGeneratorTest.java
    commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/SinhGeneratorTest.java
    commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/SqrtGeneratorTest.java
    commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/TanGeneratorTest.java
    commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/TanhGeneratorTest.java
Modified:
    commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/analysis/MethodDifferentiator.java
    commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/arithmetic/DRemTransformer.java
    commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/instructions/DReturnTransformer.java
    commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/AbstractMathTest.java
    commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/ForwardModeDifferentiatorTest.java
    commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/arithmetic/DDivGeneratorTest.java
    commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/arithmetic/DMulGeneratorTest.java
    commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/arithmetic/DRemGeneratorTest.java

Modified: commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/analysis/MethodDifferentiator.java
URL: http://svn.apache.org/viewvc/commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/analysis/MethodDifferentiator.java?rev=1391539&r1=1391538&r2=1391539&view=diff
==============================================================================
--- commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/analysis/MethodDifferentiator.java (original)
+++ commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/analysis/MethodDifferentiator.java Fri Sep 28 16:43:18 2012
@@ -35,35 +35,6 @@ import org.apache.commons.nabla.forward.
 import org.apache.commons.nabla.forward.arithmetic.DNegTransformer;
 import org.apache.commons.nabla.forward.arithmetic.DRemTransformer;
 import org.apache.commons.nabla.forward.arithmetic.DSubTransformer;
-import org.apache.commons.nabla.forward.functions.AcosTransformer;
-import org.apache.commons.nabla.forward.functions.AcoshTransformer;
-import org.apache.commons.nabla.forward.functions.AsinTransformer;
-import org.apache.commons.nabla.forward.functions.AsinhTransformer;
-import org.apache.commons.nabla.forward.functions.Atan2Transformer1;
-import org.apache.commons.nabla.forward.functions.Atan2Transformer12;
-import org.apache.commons.nabla.forward.functions.Atan2Transformer2;
-import org.apache.commons.nabla.forward.functions.AtanTransformer;
-import org.apache.commons.nabla.forward.functions.AtanhTransformer;
-import org.apache.commons.nabla.forward.functions.CbrtTransformer;
-import org.apache.commons.nabla.forward.functions.CosTransformer;
-import org.apache.commons.nabla.forward.functions.CoshTransformer;
-import org.apache.commons.nabla.forward.functions.ExpTransformer;
-import org.apache.commons.nabla.forward.functions.Expm1Transformer;
-import org.apache.commons.nabla.forward.functions.HypotTransformer1;
-import org.apache.commons.nabla.forward.functions.HypotTransformer12;
-import org.apache.commons.nabla.forward.functions.HypotTransformer2;
-import org.apache.commons.nabla.forward.functions.Log10Transformer;
-import org.apache.commons.nabla.forward.functions.Log1pTransformer;
-import org.apache.commons.nabla.forward.functions.LogTransformer;
-import org.apache.commons.nabla.forward.functions.MathInvocationTransformer;
-import org.apache.commons.nabla.forward.functions.PowTransformer1;
-import org.apache.commons.nabla.forward.functions.PowTransformer12;
-import org.apache.commons.nabla.forward.functions.PowTransformer2;
-import org.apache.commons.nabla.forward.functions.SinTransformer;
-import org.apache.commons.nabla.forward.functions.SinhTransformer;
-import org.apache.commons.nabla.forward.functions.SqrtTransformer;
-import org.apache.commons.nabla.forward.functions.TanTransformer;
-import org.apache.commons.nabla.forward.functions.TanhTransformer;
 import org.apache.commons.nabla.forward.instructions.DLoadTransformer;
 import org.apache.commons.nabla.forward.instructions.DReturnTransformer;
 import org.apache.commons.nabla.forward.instructions.DStoreTransformer;
@@ -73,6 +44,7 @@ import org.apache.commons.nabla.forward.
 import org.apache.commons.nabla.forward.instructions.Dup2Transformer;
 import org.apache.commons.nabla.forward.instructions.Dup2X1Transformer;
 import org.apache.commons.nabla.forward.instructions.Dup2X2Transformer;
+import org.apache.commons.nabla.forward.instructions.InvokeStaticTransformer;
 import org.apache.commons.nabla.forward.instructions.NarrowingTransformer;
 import org.apache.commons.nabla.forward.instructions.Pop2Transformer;
 import org.apache.commons.nabla.forward.instructions.WideningTransformer;
@@ -85,6 +57,7 @@ import org.objectweb.asm.tree.AbstractIn
 import org.objectweb.asm.tree.FieldInsnNode;
 import org.objectweb.asm.tree.IincInsnNode;
 import org.objectweb.asm.tree.InsnList;
+import org.objectweb.asm.tree.InsnNode;
 import org.objectweb.asm.tree.LabelNode;
 import org.objectweb.asm.tree.LdcInsnNode;
 import org.objectweb.asm.tree.MethodInsnNode;
@@ -101,41 +74,6 @@ import org.objectweb.asm.tree.analysis.I
  */
 public class MethodDifferentiator {
 
-    /** Math functions transformer. */
-    private static final Map<String, MathInvocationTransformer> MATH_TRANSFORMERS =
-        new HashMap<String, MathInvocationTransformer>();
-
-    static {
-        MATH_TRANSFORMERS.put("acos",     new AcosTransformer());
-        MATH_TRANSFORMERS.put("acosh",    new AcoshTransformer());
-        MATH_TRANSFORMERS.put("asin",     new AsinTransformer());
-        MATH_TRANSFORMERS.put("asinh",    new AsinhTransformer());
-        MATH_TRANSFORMERS.put("atan2_12", new Atan2Transformer12());
-        MATH_TRANSFORMERS.put("atan2_1",  new Atan2Transformer1());
-        MATH_TRANSFORMERS.put("atan2_2",  new Atan2Transformer2());
-        MATH_TRANSFORMERS.put("atan",     new AtanTransformer());
-        MATH_TRANSFORMERS.put("atanh",    new AtanhTransformer());
-        MATH_TRANSFORMERS.put("cbrt",     new CbrtTransformer());
-        MATH_TRANSFORMERS.put("cos",      new CosTransformer());
-        MATH_TRANSFORMERS.put("cosh",     new CoshTransformer());
-        MATH_TRANSFORMERS.put("exp",      new ExpTransformer());
-        MATH_TRANSFORMERS.put("expm1",    new Expm1Transformer());
-        MATH_TRANSFORMERS.put("hypot_12", new HypotTransformer12());
-        MATH_TRANSFORMERS.put("hypot_1",  new HypotTransformer1());
-        MATH_TRANSFORMERS.put("hypot_2",  new HypotTransformer2());
-        MATH_TRANSFORMERS.put("log10",    new Log10Transformer());
-        MATH_TRANSFORMERS.put("log1p",    new Log1pTransformer());
-        MATH_TRANSFORMERS.put("log",      new LogTransformer());
-        MATH_TRANSFORMERS.put("pow_12",   new PowTransformer12());
-        MATH_TRANSFORMERS.put("pow_1",    new PowTransformer1());
-        MATH_TRANSFORMERS.put("pow_2",    new PowTransformer2());
-        MATH_TRANSFORMERS.put("sin",      new SinTransformer());
-        MATH_TRANSFORMERS.put("sinh",     new SinhTransformer());
-        MATH_TRANSFORMERS.put("sqrt",     new SqrtTransformer());
-        MATH_TRANSFORMERS.put("tan",      new TanTransformer());
-        MATH_TRANSFORMERS.put("tanh",     new TanhTransformer());
-    }
-
     /** Maximal number of temporary size 2 variables. */
     private static final int MAX_TEMP = 5;
 
@@ -533,8 +471,7 @@ public class MethodDifferentiator {
             // TODO add support for INVOKESPECIAL differentiation
             throw new RuntimeException("INVOKESPECIAL not handled yet");
         case Opcodes.INVOKESTATIC :
-            return replaceInvocation((MethodInsnNode) insn,
-                                     stack1Converted, stack0Converted);
+            return new InvokeStaticTransformer(stack0Converted, stack1Converted).getReplacement(insn, this);
         case Opcodes.INVOKEINTERFACE :
             // TODO add support for INVOKEINTERFACE differentiation
             throw new RuntimeException("INVOKEINTERFACE not handled yet");
@@ -627,64 +564,51 @@ public class MethodDifferentiator {
 
     }
 
-    /** Replace an INVOKESTATIC instruction.
-     * @param methodInsn invocation instruction
-     * @param stack1Converted if true, the stack sub-head has been
-     * converted to derivative structure
-     * @param stack0Converted if true, the stack head has been
-     * converted to derivative structure
-     * @return replacement instructions list
-     * @exception DifferentiationException if the instruction cannot be replaced
-     */
-    private InsnList replaceInvocation(final MethodInsnNode methodInsn,
-                                       final boolean stack1Converted,
-                                       final boolean stack0Converted)
-        throws DifferentiationException {
-        if (isMathImplementationClass(methodInsn.owner)) {
-            if (methodInsn.desc.equals(Type.getMethodDescriptor(Type.DOUBLE_TYPE, Type.DOUBLE_TYPE))) {
-                // this is a univariate method like sin, cos, exp ...
-                final MathInvocationTransformer transformer = MATH_TRANSFORMERS.get(methodInsn.name);
-                if (transformer == null) {
-                    throw new DifferentiationException(NablaMessages.UNKNOWN_METHOD,
-                                                       methodInsn.owner, methodInsn.name);
-                }
-                return transformer.getReplacementList(methodInsn.owner, this);
-            } else if (methodInsn.desc.equals(Type.getMethodDescriptor(Type.DOUBLE_TYPE, Type.DOUBLE_TYPE, Type.DOUBLE_TYPE))) {
-                // this is a bivariate method like atan2, pow ...
-
-                // we may want to differentiate against first, second or both parameters
-                String name = null;
-                if (stack1Converted) {
-                    if (stack0Converted) {
-                        name = methodInsn.name + "_12";
-                    } else {
-                        name = methodInsn.name + "_1";
-                    }
-                } else if (stack0Converted) {
-                    name = methodInsn.name + "_2";
-                }
-
-                if (name != null) {
-                    final MathInvocationTransformer transformer = MATH_TRANSFORMERS.get(name);
-                    if (transformer == null) {
-                        throw new DifferentiationException(NablaMessages.UNKNOWN_METHOD,
-                                                           methodInsn.owner, methodInsn.name);
-                    }
-                    return transformer.getReplacementList(methodInsn.owner, this);
-                }
-            }
-        }
-        throw new DifferentiationException(NablaMessages.UNEXPECTED_INSTRUCTION, methodInsn.getOpcode());
-    }
-
     /** Test if a class is a math implementation class.
      * @param name name of the class to test
      * @return true if the named class is a math implementation class
      */
-    private boolean isMathImplementationClass(final String name) {
+    public boolean isMathImplementationClass(final String name) {
         return mathClasses.contains(name);
     }
 
+    /** Create instructions to convert a double on top of stack to a {@link DerivativeStructure}.
+     * @return list of conversion instructions
+     */
+    public InsnList doubleToDerivativeStructureConversion() {
+
+        final InsnList list = new InsnList();
+
+        // operand stack initial state: d
+        list.add(new TypeInsnNode(Opcodes.NEW,
+                                  Type.getInternalName(DerivativeStructure.class))); // => d y_ds
+        list.add(new InsnNode(Opcodes.DUP_X2));                                      // => y_ds d y_ds
+        list.add(new InsnNode(Opcodes.DUP_X2));                                      // => y_ds y_ds d y_ds
+        list.add(new InsnNode(Opcodes.POP));                                         // => y_ds y_ds d
+        list.add(new VarInsnNode(Opcodes.ALOAD, getInputDSIndex()));                 // => y_ds y_ds d x_ds
+        list.add(new MethodInsnNode(Opcodes.INVOKEVIRTUAL,
+                                    Type.getInternalName(DerivativeStructure.class),
+                                    "getFreeParameters",
+                                    Type.getMethodDescriptor(Type.INT_TYPE)));       // => y_ds y_ds d params
+        list.add(new VarInsnNode(Opcodes.ALOAD, 1));                                 // => y_ds y_ds d params x_ds
+        list.add(new MethodInsnNode(Opcodes.INVOKEVIRTUAL,
+                                    Type.getInternalName(DerivativeStructure.class),
+                                    "getOrder",
+                                    Type.getMethodDescriptor(Type.INT_TYPE)));       // => y_ds y_ds d params order
+        list.add(new InsnNode(Opcodes.DUP2_X2));                                     // => y_ds y_ds params order d params order
+        list.add(new InsnNode(Opcodes.POP2));                                        // => y_ds y_ds params order d
+        list.add(new MethodInsnNode(Opcodes.INVOKESPECIAL,
+                                    Type.getInternalName(DerivativeStructure.class),
+                                    "<init>",
+                                    Type.getMethodDescriptor(Type.VOID_TYPE,
+                                                             Type.INT_TYPE,
+                                                             Type.INT_TYPE,
+                                                             Type.DOUBLE_TYPE)));    // => y_ds
+
+        return list;
+
+    }
+
     /** Set a local variable as used by the modified code.
      * @param index index of the variable
      * @param size size of the variable (1 or 2 for standard variables,

Modified: commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/arithmetic/DRemTransformer.java
URL: http://svn.apache.org/viewvc/commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/arithmetic/DRemTransformer.java?rev=1391539&r1=1391538&r2=1391539&view=diff
==============================================================================
--- commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/arithmetic/DRemTransformer.java (original)
+++ commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/arithmetic/DRemTransformer.java Fri Sep 28 16:43:18 2012
@@ -75,11 +75,14 @@ public class DRemTransformer implements 
             list.add(new InsnNode(Opcodes.DUP));                                               // => ds_b, ds_b
             list.add(new MethodInsnNode(Opcodes.INVOKEVIRTUAL, DS_TYPE.getInternalName(),
                                         "getValue",
-                                        Type.getMethodDescriptor(DS_TYPE, Type.DOUBLE_TYPE))); // => ds_b, b0
+                                        Type.getMethodDescriptor(Type.DOUBLE_TYPE)));          // => ds_b, b0
             list.add(new VarInsnNode(Opcodes.DLOAD,  tmp1));                                   // => ds_b, b0, a
             list.add(new InsnNode(Opcodes.DUP2_X2));                                           // => ds_b, a, b0, a
             list.add(new InsnNode(Opcodes.POP2));                                              // => ds_b, a, b0
             list.add(new InsnNode(Opcodes.DREM));                                              // => ds_b, q=a%b0
+
+            // TODO: the remaining computation is WRONG!
+
             list.add(new InsnNode(Opcodes.DNEG));                                              // => ds_b, -q
             list.add(new MethodInsnNode(Opcodes.INVOKEVIRTUAL, DS_TYPE.getInternalName(),
                                         "multiply",

Modified: commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/instructions/DReturnTransformer.java
URL: http://svn.apache.org/viewvc/commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/instructions/DReturnTransformer.java?rev=1391539&r1=1391538&r2=1391539&view=diff
==============================================================================
--- commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/instructions/DReturnTransformer.java (original)
+++ commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/instructions/DReturnTransformer.java Fri Sep 28 16:43:18 2012
@@ -16,18 +16,13 @@
  */
 package org.apache.commons.nabla.forward.instructions;
 
-import org.apache.commons.math3.analysis.differentiation.DerivativeStructure;
 import org.apache.commons.nabla.DifferentiationException;
 import org.apache.commons.nabla.forward.analysis.InstructionsTransformer;
 import org.apache.commons.nabla.forward.analysis.MethodDifferentiator;
 import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.Type;
 import org.objectweb.asm.tree.AbstractInsnNode;
 import org.objectweb.asm.tree.InsnList;
 import org.objectweb.asm.tree.InsnNode;
-import org.objectweb.asm.tree.MethodInsnNode;
-import org.objectweb.asm.tree.TypeInsnNode;
-import org.objectweb.asm.tree.VarInsnNode;
 
 /** Differentiation transformer for DRETURN instructions.
  * <p>DRETURN instructions are replaced by ARETURN instructions
@@ -53,35 +48,10 @@ public class DReturnTransformer implemen
         throws DifferentiationException {
 
         final InsnList list = new InsnList();
+
         if (!stack0Converted) {
             // add conversion for top level stack element
-
-            // operand stack initial state: d
-            list.add(new TypeInsnNode(Opcodes.NEW,
-                                      Type.getInternalName(DerivativeStructure.class)));      // => d y_ds
-            list.add(new InsnNode(Opcodes.DUP_X2));                                           // => y_ds d y_ds
-            list.add(new InsnNode(Opcodes.DUP_X2));                                           // => y_ds y_ds d y_ds
-            list.add(new InsnNode(Opcodes.POP));                                              // => y_ds y_ds d
-            list.add(new VarInsnNode(Opcodes.ALOAD, methodDifferentiator.getInputDSIndex())); // => y_ds y_ds d x_ds
-            list.add(new MethodInsnNode(Opcodes.INVOKEVIRTUAL,
-                                        Type.getInternalName(DerivativeStructure.class),
-                                        "getFreeParameters",
-                                        Type.getMethodDescriptor(Type.INT_TYPE)));            // => y_ds y_ds d params
-            list.add(new VarInsnNode(Opcodes.ALOAD, 1));                                      // => y_ds y_ds d params x_ds
-            list.add(new MethodInsnNode(Opcodes.INVOKEVIRTUAL,
-                                        Type.getInternalName(DerivativeStructure.class),
-                                        "getOrder",
-                                        Type.getMethodDescriptor(Type.INT_TYPE)));            // => y_ds y_ds d params order
-            list.add(new InsnNode(Opcodes.DUP2_X2));                                          // => y_ds y_ds params order d params order
-            list.add(new InsnNode(Opcodes.POP2));                                             // => y_ds y_ds params order d
-            list.add(new MethodInsnNode(Opcodes.INVOKESPECIAL,
-                                        Type.getInternalName(DerivativeStructure.class),
-                                        "<init>",
-                                        Type.getMethodDescriptor(Type.VOID_TYPE,
-                                                                 Type.INT_TYPE,
-                                                                 Type.INT_TYPE,
-                                                                 Type.DOUBLE_TYPE)));         // => y_ds
-
+            list.add(methodDifferentiator.doubleToDerivativeStructureConversion());
         }
 
         // add the return instruction for a reference type

Added: commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/instructions/InvokeStaticTransformer.java
URL: http://svn.apache.org/viewvc/commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/instructions/InvokeStaticTransformer.java?rev=1391539&view=auto
==============================================================================
--- commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/instructions/InvokeStaticTransformer.java (added)
+++ commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/instructions/InvokeStaticTransformer.java Fri Sep 28 16:43:18 2012
@@ -0,0 +1,110 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.nabla.forward.instructions;
+
+import org.apache.commons.math3.analysis.differentiation.DerivativeStructure;
+import org.apache.commons.nabla.DifferentiationException;
+import org.apache.commons.nabla.NablaMessages;
+import org.apache.commons.nabla.forward.analysis.InstructionsTransformer;
+import org.apache.commons.nabla.forward.analysis.MethodDifferentiator;
+import org.objectweb.asm.Opcodes;
+import org.objectweb.asm.Type;
+import org.objectweb.asm.tree.AbstractInsnNode;
+import org.objectweb.asm.tree.InsnList;
+import org.objectweb.asm.tree.InsnNode;
+import org.objectweb.asm.tree.MethodInsnNode;
+
+/** Differentiation transformer for INVOKESTATIC instructions.
+ */
+public class InvokeStaticTransformer implements InstructionsTransformer {
+
+    /** Indicator for top stack element conversion. */
+    private final boolean stack0Converted;
+
+    /** Indicator for next to top stack element conversion. */
+    private final boolean stack1Converted;
+
+    /** Simple constructor.
+     * @param stack0Converted if true, the top level stack element has already been converted
+     * @param stack1Converted if true, the next to top level stack element has already been converted
+     */
+    public InvokeStaticTransformer(final boolean stack0Converted, final boolean stack1Converted) {
+        this.stack0Converted = stack0Converted;
+        this.stack1Converted = stack1Converted;
+    }
+
+    /** {@inheritDoc} */
+    public InsnList getReplacement(final AbstractInsnNode insn,
+                                   final MethodDifferentiator methodDifferentiator)
+        throws DifferentiationException {
+
+        final MethodInsnNode methodInsn = (MethodInsnNode) insn;
+        if (!methodDifferentiator.isMathImplementationClass(methodInsn.owner)) {
+            // TODO
+            throw new RuntimeException("INVOKESTATIC on non math related classes not handled yet" +
+                    methodInsn.owner + methodInsn.owner);
+        }
+
+        final InsnList list = new InsnList();
+
+        if (methodInsn.desc.equals(Type.getMethodDescriptor(Type.DOUBLE_TYPE, Type.DOUBLE_TYPE))) {
+            // this is a univariate method like sin, cos, exp ...
+
+            try {
+                // check that a corresponding method exist for DerivativeStructure
+                DerivativeStructure.class.getDeclaredMethod(methodInsn.name);
+            } catch (NoSuchMethodException nsme) {
+                throw new DifferentiationException(NablaMessages.UNKNOWN_METHOD,
+                                                   methodInsn.owner, methodInsn.name);
+            }
+
+            list.add(new MethodInsnNode(Opcodes.INVOKEVIRTUAL,
+                                        DS_TYPE.getInternalName(), methodInsn.name,
+                                        Type.getMethodDescriptor(DS_TYPE)));
+
+        } else if (methodInsn.desc.equals(Type.getMethodDescriptor(Type.DOUBLE_TYPE, Type.DOUBLE_TYPE, Type.DOUBLE_TYPE))) {
+            // this is a bivariate method like atan2, pow ...
+
+            // we may want to differentiate against first, second or both parameters
+            if (stack1Converted) {
+                if (!stack0Converted) {
+                    // the top level element is not a DerivativeStructure, convert it
+                    list.add(methodDifferentiator.doubleToDerivativeStructureConversion());
+                }
+            } else if (stack0Converted) {
+                // initial stack state: x, ds_y
+                list.add(new InsnNode(Opcodes.DUP_X2));                                 // => ds_y, x, ds_y
+                list.add(new InsnNode(Opcodes.POP));                                    // => ds_y, x
+                list.add(methodDifferentiator.doubleToDerivativeStructureConversion()); // => ds_y, ds_x
+                list.add(new InsnNode(Opcodes.SWAP));                                   // => ds_x, ds_y
+            }
+
+            // call the static two parameters method for DerivativeStructure
+            list.add(new MethodInsnNode(Opcodes.INVOKESTATIC,
+                                        DS_TYPE.getInternalName(), methodInsn.name,
+                                        Type.getMethodDescriptor(DS_TYPE, DS_TYPE, DS_TYPE)));
+
+        } else {
+            throw new DifferentiationException(NablaMessages.UNKNOWN_METHOD,
+                                               methodInsn.owner, methodInsn.name);
+        }
+
+        return list;
+
+    }
+    
+}

Propchange: commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/instructions/InvokeStaticTransformer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/forward/instructions/InvokeStaticTransformer.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Modified: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/AbstractMathTest.java
URL: http://svn.apache.org/viewvc/commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/AbstractMathTest.java?rev=1391539&r1=1391538&r2=1391539&view=diff
==============================================================================
--- commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/AbstractMathTest.java (original)
+++ commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/AbstractMathTest.java Fri Sep 28 16:43:18 2012
@@ -19,6 +19,7 @@ package org.apache.commons.nabla;
 import org.apache.commons.math3.analysis.UnivariateFunction;
 import org.apache.commons.math3.analysis.differentiation.DerivativeStructure;
 import org.apache.commons.math3.analysis.differentiation.UnivariateDifferentiableFunction;
+import org.apache.commons.math3.util.FastMath;
 import org.apache.commons.nabla.forward.ForwardModeDifferentiator;
 import org.junit.Assert;
 
@@ -39,26 +40,31 @@ public abstract class AbstractMathTest {
             for (int i = 0; i < n; ++i) {
                 double t = ((n - 1 - i) * t0 + i * t1) / (n - 1);
                 DerivativeStructure dpT = new DerivativeStructure(1, 1, 0, t);
-                Assert.assertEquals(reference.firstDerivative(t), derivative.value(dpT).getPartialDerivative(1), threshold);
-                Assert.assertEquals(reference.value(t), derivative.value(dpT).getValue(), threshold);
+                Assert.assertEquals("error = " + ((reference.firstDerivative(t) - derivative.value(dpT).getPartialDerivative(1))),
+                                    reference.firstDerivative(t), derivative.value(dpT).getPartialDerivative(1),
+                                    threshold);
+                Assert.assertEquals("error = " + ((reference.value(t) - derivative.value(dpT).getValue())),
+                                    reference.value(t), derivative.value(dpT).getValue(),
+                                    threshold);
             }
         } catch (DifferentiationException de) {
+            de.printStackTrace(System.err);
             Assert.fail(de.getLocalizedMessage());
         }
     }
 
     public static class MathExtensions {
         public static double acosh(double a) {
-            return Math.log(a + Math.sqrt(a - 1) * Math.sqrt(a + 1));
+            return FastMath.log(a + FastMath.sqrt(a - 1) * FastMath.sqrt(a + 1));
         }
         public static double asinh(double a) {
-            return Math.log(a + Math.sqrt(a * a + 1));
+            return FastMath.log(a + FastMath.sqrt(a * a + 1));
         }
         public static double atanh(double a) {
-            return (Math.log1p(a) - Math.log1p(-a)) / 2;
+            return (FastMath.log1p(a) - FastMath.log1p(-a)) / 2;
         }
         public static double sqrt(double a) {
-            return Math.sqrt(a);
+            return FastMath.sqrt(a);
         }
     }
 

Copied: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/AcosGeneratorTest.java (from r1391537, commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/AcosGeneratorTest.java)
URL: http://svn.apache.org/viewvc/commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/AcosGeneratorTest.java?p2=commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/AcosGeneratorTest.java&p1=commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/AcosGeneratorTest.java&r1=1391537&r2=1391539&rev=1391539&view=diff
==============================================================================
--- commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/AcosGeneratorTest.java (original)
+++ commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/AcosGeneratorTest.java Fri Sep 28 16:43:18 2012
@@ -14,11 +14,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.nabla.forward.functions;
+package org.apache.commons.nabla.forward;
 
 import org.apache.commons.math3.analysis.UnivariateFunction;
 import org.apache.commons.math3.analysis.differentiation.DerivativeStructure;
 import org.apache.commons.math3.analysis.differentiation.UnivariateDifferentiableFunction;
+import org.apache.commons.math3.util.FastMath;
 import org.apache.commons.nabla.AbstractMathTest;
 import org.apache.commons.nabla.DifferentiationException;
 import org.apache.commons.nabla.forward.ForwardModeDifferentiator;
@@ -30,16 +31,16 @@ public class AcosGeneratorTest extends A
     @Test
     public void testReference(){
         checkReference(new ReferenceFunction() {
-            public double value(double t) { return Math.acos(t); }
-            public double firstDerivative(double t) { return -1 / Math.sqrt(1 - t * t); }
-        }, -0.99, 0.99, 30, 0.0);
+            public double value(double t) { return FastMath.acos(t); }
+            public double firstDerivative(double t) { return -1 / FastMath.sqrt(1 - t * t); }
+        }, -0.99, 0.99, 30, 9.0e-16);
     }
 
     @Test
     public void testSingularityPlus() throws DifferentiationException {
         UnivariateDifferentiableFunction derivative =
             new ForwardModeDifferentiator().differentiate(new UnivariateFunction() {
-                public double value(double t) { return Math.acos(t); }
+                public double value(double t) { return FastMath.acos(t); }
             });
 
         double dPlus = derivative.value(new DerivativeStructure(1, 1, 1.0, 1.0)).getPartialDerivative(1);
@@ -56,7 +57,7 @@ public class AcosGeneratorTest extends A
     public void testSingularityMinus() throws DifferentiationException {
         UnivariateDifferentiableFunction derivative =
             new ForwardModeDifferentiator().differentiate(new UnivariateFunction() {
-                public double value(double t) { return Math.acos(t); }
+                public double value(double t) { return FastMath.acos(t); }
             });
 
         double dPlus = derivative.value(new DerivativeStructure(1, 1, -1.0, 1.0)).getPartialDerivative(1);

Propchange: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/AcosGeneratorTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/AcosGeneratorTest.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Copied: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/AcoshGeneratorTest.java (from r1391537, commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/AcoshGeneratorTest.java)
URL: http://svn.apache.org/viewvc/commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/AcoshGeneratorTest.java?p2=commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/AcoshGeneratorTest.java&p1=commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/AcoshGeneratorTest.java&r1=1391537&r2=1391539&rev=1391539&view=diff
==============================================================================
--- commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/AcoshGeneratorTest.java (original)
+++ commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/AcoshGeneratorTest.java Fri Sep 28 16:43:18 2012
@@ -14,8 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.nabla.forward.functions;
+package org.apache.commons.nabla.forward;
 
+import org.apache.commons.math3.util.FastMath;
 import org.apache.commons.nabla.AbstractMathTest;
 import org.junit.Test;
 
@@ -25,8 +26,8 @@ public class AcoshGeneratorTest extends 
     public void testReference(){
         checkReference(new ReferenceFunction() {
             public double value(double t) { return MathExtensions.acosh(t); }
-            public double firstDerivative(double t) { return 1 / Math.sqrt(t * t - 1); }
-        }, 1.01, 5, 30, 0.0);
+            public double firstDerivative(double t) { return 1 / FastMath.sqrt(t * t - 1); }
+        }, 1.01, 5, 30, 2.0e-15);
     }
 
 }

Propchange: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/AcoshGeneratorTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/AcoshGeneratorTest.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Copied: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/AsinGeneratorTest.java (from r1391537, commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/AsinGeneratorTest.java)
URL: http://svn.apache.org/viewvc/commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/AsinGeneratorTest.java?p2=commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/AsinGeneratorTest.java&p1=commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/AsinGeneratorTest.java&r1=1391537&r2=1391539&rev=1391539&view=diff
==============================================================================
--- commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/AsinGeneratorTest.java (original)
+++ commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/AsinGeneratorTest.java Fri Sep 28 16:43:18 2012
@@ -14,14 +14,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.nabla.forward.functions;
+package org.apache.commons.nabla.forward;
 
 import org.apache.commons.math3.analysis.UnivariateFunction;
 import org.apache.commons.math3.analysis.differentiation.DerivativeStructure;
 import org.apache.commons.math3.analysis.differentiation.UnivariateDifferentiableFunction;
+import org.apache.commons.math3.util.FastMath;
 import org.apache.commons.nabla.AbstractMathTest;
 import org.apache.commons.nabla.DifferentiationException;
-import org.apache.commons.nabla.forward.ForwardModeDifferentiator;
 import org.junit.Assert;
 import org.junit.Test;
 
@@ -30,16 +30,16 @@ public class AsinGeneratorTest extends A
     @Test
     public void testReference(){
         checkReference(new ReferenceFunction() {
-            public double value(double t) { return Math.asin(t); }
-            public double firstDerivative(double t) { return 1 / Math.sqrt(1 - t * t); }
-        }, -0.99, 0.99, 30, 0.0);
+            public double value(double t) { return FastMath.asin(t); }
+            public double firstDerivative(double t) { return 1 / FastMath.sqrt(1 - t * t); }
+        }, -0.99, 0.99, 30, 9.0e-16);
     }
 
     @Test
     public void testSingularityPlus() throws DifferentiationException {
         UnivariateDifferentiableFunction derivative =
             new ForwardModeDifferentiator().differentiate(new UnivariateFunction() {
-                public double value(double t) { return Math.asin(t); }
+                public double value(double t) { return FastMath.asin(t); }
             });
 
         double dPlus = derivative.value(new DerivativeStructure(1, 1, 1.0, 1.0)).getPartialDerivative(1);
@@ -56,7 +56,7 @@ public class AsinGeneratorTest extends A
     public void testSingularityMinus() throws DifferentiationException {
         UnivariateDifferentiableFunction derivative =
             new ForwardModeDifferentiator().differentiate(new UnivariateFunction() {
-                public double value(double t) { return Math.asin(t); }
+                public double value(double t) { return FastMath.asin(t); }
             });
 
         double dPlus = derivative.value(new DerivativeStructure(1, 1, -1.0, 1.0)).getPartialDerivative(1);

Propchange: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/AsinGeneratorTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/AsinGeneratorTest.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Copied: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/AsinhGeneratorTest.java (from r1391537, commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/AsinhGeneratorTest.java)
URL: http://svn.apache.org/viewvc/commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/AsinhGeneratorTest.java?p2=commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/AsinhGeneratorTest.java&p1=commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/AsinhGeneratorTest.java&r1=1391537&r2=1391539&rev=1391539&view=diff
==============================================================================
--- commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/AsinhGeneratorTest.java (original)
+++ commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/AsinhGeneratorTest.java Fri Sep 28 16:43:18 2012
@@ -14,8 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.nabla.forward.functions;
+package org.apache.commons.nabla.forward;
 
+import org.apache.commons.math3.util.FastMath;
 import org.apache.commons.nabla.AbstractMathTest;
 import org.junit.Test;
 
@@ -25,8 +26,8 @@ public class AsinhGeneratorTest extends 
     public void testReference(){
         checkReference(new ReferenceFunction() {
             public double value(double t) { return MathExtensions.asinh(t); }
-            public double firstDerivative(double t) { return 1 / Math.sqrt(t * t + 1); }
-        }, -5, 5, 30, 0.0);
+            public double firstDerivative(double t) { return 1 / FastMath.sqrt(t * t + 1); }
+        }, -5, 5, 30, 6.0e-15);
     }
 
 }

Propchange: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/AsinhGeneratorTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/AsinhGeneratorTest.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Copied: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/Atan2GeneratorTest.java (from r1391537, commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/Atan2GeneratorTest.java)
URL: http://svn.apache.org/viewvc/commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/Atan2GeneratorTest.java?p2=commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/Atan2GeneratorTest.java&p1=commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/Atan2GeneratorTest.java&r1=1391537&r2=1391539&rev=1391539&view=diff
==============================================================================
--- commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/Atan2GeneratorTest.java (original)
+++ commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/Atan2GeneratorTest.java Fri Sep 28 16:43:18 2012
@@ -14,8 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.nabla.forward.functions;
+package org.apache.commons.nabla.forward;
 
+import org.apache.commons.math3.util.FastMath;
 import org.apache.commons.nabla.AbstractMathTest;
 import org.junit.Test;
 
@@ -24,33 +25,33 @@ public class Atan2GeneratorTest extends 
     @Test
     public void testReference1(){
         checkReference(new ReferenceFunction() {
-            public double value(double t) { return Math.atan2(t, 3.0); }
+            public double value(double t) { return FastMath.atan2(t, 3.0); }
             public double firstDerivative(double t) { return 3 / (t * t + 9); }
-        }, -2, 2, 50, 2e-15);
+        }, -2, 2, 50, 3.0e-16);
     }
 
     @Test
     public void testReference2(){
         checkReference(new ReferenceFunction() {
-            public double value(double t) { return Math.atan2(3.0, t); }
+            public double value(double t) { return FastMath.atan2(3.0, t); }
             public double firstDerivative(double t) { return -3 / (t * t + 9); }
-        }, -2, 2, 50, 0.0);
+        }, -2, 2, 50, 6.0e-16);
     }
 
     @Test
     public void testReference12Aligned(){
         checkReference(new ReferenceFunction() {
-            public double value(double t) { return Math.atan2(t, t); }
+            public double value(double t) { return FastMath.atan2(t, t); }
             public double firstDerivative(double t) { return 0; }
-        }, 0.1, 10, 20, 0);
+        }, 0.1, 10, 20, 2.0e-16);
     }
 
     @Test
     public void testReference12Shifted(){
         checkReference(new ReferenceFunction() {
-            public double value(double t) { return Math.atan2(t, t + 1); }
+            public double value(double t) { return FastMath.atan2(t, t + 1); }
             public double firstDerivative(double t) { return 1 / (2 * t * (t + 1) + 1); }
-        }, 0.1, 10, 20, 2.0e-16);
+        }, 0.1, 10, 20, 6.0e-16);
     }
 
 }

Propchange: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/Atan2GeneratorTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/Atan2GeneratorTest.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Copied: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/AtanGeneratorTest.java (from r1391537, commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/AtanGeneratorTest.java)
URL: http://svn.apache.org/viewvc/commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/AtanGeneratorTest.java?p2=commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/AtanGeneratorTest.java&p1=commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/AtanGeneratorTest.java&r1=1391537&r2=1391539&rev=1391539&view=diff
==============================================================================
--- commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/AtanGeneratorTest.java (original)
+++ commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/AtanGeneratorTest.java Fri Sep 28 16:43:18 2012
@@ -14,14 +14,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.nabla.forward.functions;
+package org.apache.commons.nabla.forward;
 
 import org.apache.commons.math3.analysis.UnivariateFunction;
 import org.apache.commons.math3.analysis.differentiation.DerivativeStructure;
 import org.apache.commons.math3.analysis.differentiation.UnivariateDifferentiableFunction;
+import org.apache.commons.math3.util.FastMath;
 import org.apache.commons.nabla.AbstractMathTest;
 import org.apache.commons.nabla.DifferentiationException;
-import org.apache.commons.nabla.forward.ForwardModeDifferentiator;
 import org.junit.Assert;
 import org.junit.Test;
 
@@ -30,7 +30,7 @@ public class AtanGeneratorTest extends A
     @Test
     public void testReference(){
         checkReference(new ReferenceFunction() {
-            public double value(double t) { return Math.atan(t); }
+            public double value(double t) { return FastMath.atan(t); }
             public double firstDerivative(double t) { return 1 / (1 + t * t); }
         }, -1.5, 1.5, 30, 0.0);
     }
@@ -39,7 +39,7 @@ public class AtanGeneratorTest extends A
     public void testSingularityPlus() throws DifferentiationException {
         UnivariateDifferentiableFunction derivative =
             new ForwardModeDifferentiator().differentiate(new UnivariateFunction() {
-                public double value(double t) { return Math.atan(t); }
+                public double value(double t) { return FastMath.atan(t); }
             });
 
         double dPlus = derivative.value(new DerivativeStructure(1, 1, Double.POSITIVE_INFINITY, 1.0)).getPartialDerivative(1);
@@ -54,7 +54,7 @@ public class AtanGeneratorTest extends A
     public void testSingularityMinus() throws DifferentiationException {
         UnivariateDifferentiableFunction derivative =
             new ForwardModeDifferentiator().differentiate(new UnivariateFunction() {
-                public double value(double t) { return Math.atan(t); }
+                public double value(double t) { return FastMath.atan(t); }
             });
 
         double dPlus = derivative.value(new DerivativeStructure(1, 1, Double.NEGATIVE_INFINITY, 1.0)).getPartialDerivative(1);

Propchange: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/AtanGeneratorTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/AtanGeneratorTest.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Copied: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/AtanhGeneratorTest.java (from r1391537, commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/AtanhGeneratorTest.java)
URL: http://svn.apache.org/viewvc/commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/AtanhGeneratorTest.java?p2=commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/AtanhGeneratorTest.java&p1=commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/AtanhGeneratorTest.java&r1=1391537&r2=1391539&rev=1391539&view=diff
==============================================================================
--- commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/AtanhGeneratorTest.java (original)
+++ commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/AtanhGeneratorTest.java Fri Sep 28 16:43:18 2012
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.nabla.forward.functions;
+package org.apache.commons.nabla.forward;
 
 import org.apache.commons.nabla.AbstractMathTest;
 import org.junit.Test;
@@ -26,7 +26,7 @@ public class AtanhGeneratorTest extends 
         checkReference(new ReferenceFunction() {
             public double value(double t) { return MathExtensions.atanh(t); }
             public double firstDerivative(double t) { return 1 / (1 - t * t); }
-        }, -5, 5, 30, 0.0);
+        }, -5, 5, 30, 3.0e-16);
     }
 
 }

Propchange: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/AtanhGeneratorTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/AtanhGeneratorTest.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Copied: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/CbrtGeneratorTest.java (from r1391537, commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/CbrtGeneratorTest.java)
URL: http://svn.apache.org/viewvc/commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/CbrtGeneratorTest.java?p2=commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/CbrtGeneratorTest.java&p1=commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/CbrtGeneratorTest.java&r1=1391537&r2=1391539&rev=1391539&view=diff
==============================================================================
--- commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/CbrtGeneratorTest.java (original)
+++ commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/CbrtGeneratorTest.java Fri Sep 28 16:43:18 2012
@@ -14,8 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.nabla.forward.functions;
+package org.apache.commons.nabla.forward;
 
+import org.apache.commons.math3.util.FastMath;
 import org.apache.commons.nabla.AbstractMathTest;
 import org.junit.Test;
 
@@ -24,9 +25,9 @@ public class CbrtGeneratorTest extends A
     @Test
     public void testReference(){
         checkReference(new ReferenceFunction() {
-            public double value(double t) { return Math.cbrt(t); }
-            public double firstDerivative(double t) { return 1 / (3 * (Math.cbrt(t) * Math.cbrt(t))); }
-        }, -5, 5, 50, 0);
+            public double value(double t) { return FastMath.cbrt(t); }
+            public double firstDerivative(double t) { return 1 / (3 * (FastMath.cbrt(t) * FastMath.cbrt(t))); }
+        }, -5, 5, 50, 7.0e-16);
     }
 
 }

Propchange: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/CbrtGeneratorTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/CbrtGeneratorTest.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Copied: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/CosGeneratorTest.java (from r1391537, commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/CosGeneratorTest.java)
URL: http://svn.apache.org/viewvc/commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/CosGeneratorTest.java?p2=commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/CosGeneratorTest.java&p1=commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/CosGeneratorTest.java&r1=1391537&r2=1391539&rev=1391539&view=diff
==============================================================================
--- commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/CosGeneratorTest.java (original)
+++ commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/CosGeneratorTest.java Fri Sep 28 16:43:18 2012
@@ -14,8 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.nabla.forward.functions;
+package org.apache.commons.nabla.forward;
 
+import org.apache.commons.math3.util.FastMath;
 import org.apache.commons.nabla.AbstractMathTest;
 import org.junit.Test;
 
@@ -24,9 +25,9 @@ public class CosGeneratorTest extends Ab
     @Test
     public void testReference(){
         checkReference(new ReferenceFunction() {
-            public double value(double t) { return Math.cos(t); }
-            public double firstDerivative(double t) { return -Math.sin(t); }
-        }, 0, 2 * Math.PI, 20, 0.0);
+            public double value(double t) { return FastMath.cos(t); }
+            public double firstDerivative(double t) { return -FastMath.sin(t); }
+        }, 0, 2 * FastMath.PI, 20, 2.0e-16);
     }
 
 }

Propchange: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/CosGeneratorTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/CosGeneratorTest.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Copied: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/CoshGeneratorTest.java (from r1391537, commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/CoshGeneratorTest.java)
URL: http://svn.apache.org/viewvc/commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/CoshGeneratorTest.java?p2=commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/CoshGeneratorTest.java&p1=commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/CoshGeneratorTest.java&r1=1391537&r2=1391539&rev=1391539&view=diff
==============================================================================
--- commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/CoshGeneratorTest.java (original)
+++ commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/CoshGeneratorTest.java Fri Sep 28 16:43:18 2012
@@ -14,8 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.nabla.forward.functions;
+package org.apache.commons.nabla.forward;
 
+import org.apache.commons.math3.util.FastMath;
 import org.apache.commons.nabla.AbstractMathTest;
 import org.junit.Test;
 
@@ -24,9 +25,9 @@ public class CoshGeneratorTest extends A
     @Test
     public void testReference(){
         checkReference(new ReferenceFunction() {
-            public double value(double t) { return Math.cosh(t); }
-            public double firstDerivative(double t) { return Math.sinh(t); }
-        }, -10, 10, 50, 0.0);
+            public double value(double t) { return FastMath.cosh(t); }
+            public double firstDerivative(double t) { return FastMath.sinh(t); }
+        }, -10, 10, 50, 2.0e-12);
     }
 
 }

Propchange: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/CoshGeneratorTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/CoshGeneratorTest.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Copied: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/ExpGeneratorTest.java (from r1391537, commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/ExpGeneratorTest.java)
URL: http://svn.apache.org/viewvc/commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/ExpGeneratorTest.java?p2=commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/ExpGeneratorTest.java&p1=commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/ExpGeneratorTest.java&r1=1391537&r2=1391539&rev=1391539&view=diff
==============================================================================
--- commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/ExpGeneratorTest.java (original)
+++ commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/ExpGeneratorTest.java Fri Sep 28 16:43:18 2012
@@ -14,8 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.nabla.forward.functions;
+package org.apache.commons.nabla.forward;
 
+import org.apache.commons.math3.util.FastMath;
 import org.apache.commons.nabla.AbstractMathTest;
 import org.junit.Test;
 
@@ -24,9 +25,9 @@ public class ExpGeneratorTest extends Ab
     @Test
     public void testReference(){
         checkReference(new ReferenceFunction() {
-            public double value(double t) { return Math.exp(t); }
-            public double firstDerivative(double t) { return Math.exp(t); }
-        }, -5, 5, 50, 0.0);
+            public double value(double t) { return FastMath.exp(t); }
+            public double firstDerivative(double t) { return FastMath.exp(t); }
+        }, -5, 5, 50, 2.0e-16);
     }
 
 }

Propchange: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/ExpGeneratorTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/ExpGeneratorTest.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Copied: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/Expm1GeneratorTest.java (from r1391537, commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/Expm1GeneratorTest.java)
URL: http://svn.apache.org/viewvc/commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/Expm1GeneratorTest.java?p2=commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/Expm1GeneratorTest.java&p1=commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/Expm1GeneratorTest.java&r1=1391537&r2=1391539&rev=1391539&view=diff
==============================================================================
--- commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/Expm1GeneratorTest.java (original)
+++ commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/Expm1GeneratorTest.java Fri Sep 28 16:43:18 2012
@@ -14,8 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.nabla.forward.functions;
+package org.apache.commons.nabla.forward;
 
+import org.apache.commons.math3.util.FastMath;
 import org.apache.commons.nabla.AbstractMathTest;
 import org.junit.Test;
 
@@ -24,9 +25,9 @@ public class Expm1GeneratorTest extends 
     @Test
     public void testReference(){
         checkReference(new ReferenceFunction() {
-            public double value(double t) { return Math.expm1(t); }
-            public double firstDerivative(double t) { return 1 + Math.expm1(t); }
-        }, -5, 5, 50, 0.0);
+            public double value(double t) { return FastMath.expm1(t); }
+            public double firstDerivative(double t) { return 1 + FastMath.expm1(t); }
+        }, -5, 5, 50, 7.0e-15);
     }
 
 }

Propchange: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/Expm1GeneratorTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/Expm1GeneratorTest.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Modified: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/ForwardModeDifferentiatorTest.java
URL: http://svn.apache.org/viewvc/commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/ForwardModeDifferentiatorTest.java?rev=1391539&r1=1391538&r2=1391539&view=diff
==============================================================================
--- commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/ForwardModeDifferentiatorTest.java (original)
+++ commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/ForwardModeDifferentiatorTest.java Fri Sep 28 16:43:18 2012
@@ -19,6 +19,7 @@ package org.apache.commons.nabla.forward
 import org.apache.commons.math3.analysis.UnivariateFunction;
 import org.apache.commons.math3.analysis.differentiation.DerivativeStructure;
 import org.apache.commons.math3.analysis.differentiation.UnivariateDifferentiableFunction;
+import org.apache.commons.math3.util.FastMath;
 import org.apache.commons.nabla.AbstractMathTest;
 import org.junit.Assert;
 import org.junit.Test;
@@ -28,17 +29,17 @@ public class ForwardModeDifferentiatorTe
     @Test
     public void testSingleCall() {
         checkReference(new ReferenceFunction() {
-            public double value(double t) { return Math.cos(t); }
-            public double firstDerivative(double t) { return -Math.sin(t); }
-        }, 0, 2 * Math.PI, 20, 0.0);
+            public double value(double t) { return FastMath.cos(t); }
+            public double firstDerivative(double t) { return -FastMath.sin(t); }
+        }, 0, 2 * FastMath.PI, 20, 2.0e-16);
     }
 
     @Test
     public void testEmbeddedCalls() {
         checkReference(new ReferenceFunction() {
-            public double value(double t) { return Math.exp(Math.sin(t)); }
-            public double firstDerivative(double t) { return Math.cos(t) * Math.exp(Math.sin(t)); }
-        }, 0.1, 10, 20, 0);
+            public double value(double t) { return FastMath.exp(FastMath.sin(t)); }
+            public double firstDerivative(double t) { return FastMath.cos(t) * FastMath.exp(FastMath.sin(t)); }
+        }, 0.1, 10, 20, 2.0e-16);
     }
 
     @Test
@@ -46,7 +47,7 @@ public class ForwardModeDifferentiatorTe
         checkReference(new ReferenceFunction() {
             public double value(double t) { return 12; }
             public double firstDerivative(double t) { return 0; }
-        }, 0.1, 5, 20, 2.0e-12);
+        }, 0.1, 5, 20, 1.0e-20);
     }
 
     @Test
@@ -54,7 +55,7 @@ public class ForwardModeDifferentiatorTe
         checkReference(new ReferenceFunction() {
             public double value(double t) { return 1.0 / t; }
             public double firstDerivative(double t) { return -1 / (t * t); }
-        }, 0.1, 5, 20, 2.0e-12);
+        }, 0.1, 5, 20, 2.0e-14);
     }
 
     @Test
@@ -62,7 +63,7 @@ public class ForwardModeDifferentiatorTe
         checkReference(new ReferenceFunction() {
             public double value(double t) { return t * t; }
             public double firstDerivative(double t) { return 2 * t; }
-        }, 0.1, 5, 20, 2.0e-12);
+        }, 0.1, 5, 20, 1.0e-20);
     }
 
     @Test
@@ -70,7 +71,7 @@ public class ForwardModeDifferentiatorTe
         checkReference(new ReferenceFunction() {
             public double value(double t) { return (((4 * t + 2) * t + 1) * t - 2) * t + 5; }
             public double firstDerivative(double t) { return ((16 * t + 6) * t + 2) * t - 2; }
-        }, 0.1, 5, 20, 2.0e-12);
+        }, 0.1, 5, 20, 2.0e-15);
     }
 
     @Test
@@ -78,7 +79,7 @@ public class ForwardModeDifferentiatorTe
         checkReference(new ReferenceFunction() {
             public double value(double t) { return t - (int) t; }
             public double firstDerivative(double t) { return 1; }
-        }, 0.1, 5, 20, 0);
+        }, 0.1, 5, 20, 1.0e-20);
     }
 
     @Test
@@ -100,7 +101,7 @@ public class ForwardModeDifferentiatorTe
                 return result;
             }
             public double firstDerivative(double t) { return 6 * t * t; }
-        }, -5, 5, 20, 4.0e-14);
+        }, -5, 5, 20, 2.0e-14);
     }
 
     @Test
@@ -114,7 +115,7 @@ public class ForwardModeDifferentiatorTe
                 return result;
             }
             public double firstDerivative(double t) { return 3 * t * t; }
-        }, -5, 5, 20, 4.0e-14);
+        }, -5, 5, 20, 8.0e-15);
     }
 
     @Test
@@ -124,11 +125,11 @@ public class ForwardModeDifferentiatorTe
         final UnivariateDifferentiableFunction derivative = new
                 ForwardModeDifferentiator().differentiate(function);
         DerivativeStructure t = new DerivativeStructure(1, 1, 0, 1.0);
-        Assert.assertEquals(3, derivative.value(t).getPartialDerivative(1), 0);
-        Assert.assertEquals(2, derivative.value(t).getValue(), 0);
+        Assert.assertEquals(3, derivative.value(t).getPartialDerivative(1), 1.0e-20);
+        Assert.assertEquals(2, derivative.value(t).getValue(), 1.0e-20);
         function.setX(2);
-        Assert.assertEquals(4, derivative.value(t).getPartialDerivative(1), 0);
-        Assert.assertEquals(3, derivative.value(t).getValue(), 0);
+        Assert.assertEquals(4, derivative.value(t).getPartialDerivative(1), 1.0e-20);
+        Assert.assertEquals(3, derivative.value(t).getValue(), 1.0e-20);
     }
 
     public class PartialFunction implements UnivariateFunction {

Copied: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/HypotGeneratorTest.java (from r1391537, commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/HypotGeneratorTest.java)
URL: http://svn.apache.org/viewvc/commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/HypotGeneratorTest.java?p2=commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/HypotGeneratorTest.java&p1=commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/HypotGeneratorTest.java&r1=1391537&r2=1391539&rev=1391539&view=diff
==============================================================================
--- commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/HypotGeneratorTest.java (original)
+++ commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/HypotGeneratorTest.java Fri Sep 28 16:43:18 2012
@@ -14,8 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.nabla.forward.functions;
+package org.apache.commons.nabla.forward;
 
+import org.apache.commons.math3.util.FastMath;
 import org.apache.commons.nabla.AbstractMathTest;
 import org.junit.Test;
 
@@ -24,33 +25,33 @@ public class HypotGeneratorTest extends 
     @Test
     public void testReference1(){
         checkReference(new ReferenceFunction() {
-            public double value(double t) { return Math.hypot(t, 3.0); }
-            public double firstDerivative(double t) { return t / Math.hypot(t, 3.0); }
-        }, -2, 2, 50, 2e-15);
+            public double value(double t) { return FastMath.hypot(t, 3.0); }
+            public double firstDerivative(double t) { return t / FastMath.hypot(t, 3.0); }
+        }, -2, 2, 50, 3.0e-16);
     }
 
     @Test
     public void testReference2(){
         checkReference(new ReferenceFunction() {
-            public double value(double t) { return Math.hypot(3.0, t); }
-            public double firstDerivative(double t) { return t / Math.hypot(t, 3.0); }
-        }, -2, 2, 50, 0.0);
+            public double value(double t) { return FastMath.hypot(3.0, t); }
+            public double firstDerivative(double t) { return t / FastMath.hypot(t, 3.0); }
+        }, -2, 2, 50, 3.0e-16);
     }
 
     @Test
     public void testReference12Aligned(){
         checkReference(new ReferenceFunction() {
-            public double value(double t) { return Math.hypot(t, t); }
-            public double firstDerivative(double t) { return Math.sqrt(2); }
+            public double value(double t) { return FastMath.hypot(t, t); }
+            public double firstDerivative(double t) { return FastMath.sqrt(2); }
         }, 0.1, 10, 20, 3.0e-16);
     }
 
     @Test
     public void testReference12Shifted(){
         checkReference(new ReferenceFunction() {
-            public double value(double t) { return Math.hypot(t, t + 1); }
-            public double firstDerivative(double t) { return (2 * t + 1) / Math.hypot(t, t + 1); }
-        }, 0.1, 10, 20, 3.0e-16);
+            public double value(double t) { return FastMath.hypot(t, t + 1); }
+            public double firstDerivative(double t) { return (2 * t + 1) / FastMath.hypot(t, t + 1); }
+        }, 0.1, 10, 20, 5.0e-16);
     }
 
 }

Propchange: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/HypotGeneratorTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/HypotGeneratorTest.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Copied: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/Log10GeneratorTest.java (from r1391537, commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/Log10GeneratorTest.java)
URL: http://svn.apache.org/viewvc/commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/Log10GeneratorTest.java?p2=commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/Log10GeneratorTest.java&p1=commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/Log10GeneratorTest.java&r1=1391537&r2=1391539&rev=1391539&view=diff
==============================================================================
--- commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/Log10GeneratorTest.java (original)
+++ commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/Log10GeneratorTest.java Fri Sep 28 16:43:18 2012
@@ -14,14 +14,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.nabla.forward.functions;
+package org.apache.commons.nabla.forward;
 
 import org.apache.commons.math3.analysis.UnivariateFunction;
 import org.apache.commons.math3.analysis.differentiation.DerivativeStructure;
 import org.apache.commons.math3.analysis.differentiation.UnivariateDifferentiableFunction;
+import org.apache.commons.math3.util.FastMath;
 import org.apache.commons.nabla.AbstractMathTest;
 import org.apache.commons.nabla.DifferentiationException;
-import org.apache.commons.nabla.forward.ForwardModeDifferentiator;
 import org.junit.Assert;
 import org.junit.Test;
 
@@ -30,16 +30,16 @@ public class Log10GeneratorTest extends 
     @Test
     public void testReference(){
         checkReference(new ReferenceFunction() {
-            public double value(double t) { return Math.log10(t); }
-            public double firstDerivative(double t) { return 1 / (Math.log(10) * t); }
-        }, 0.1, 10, 50, 0.0);
+            public double value(double t) { return FastMath.log10(t); }
+            public double firstDerivative(double t) { return 1 / (FastMath.log(10) * t); }
+        }, 0.1, 10, 50, 3.0e-16);
     }
 
     @Test
     public void testSingularity() throws DifferentiationException {
         UnivariateDifferentiableFunction derivative =
             new ForwardModeDifferentiator().differentiate(new UnivariateFunction() {
-                public double value(double t) { return Math.log10(t); }
+                public double value(double t) { return FastMath.log10(t); }
             });
 
         double dPlus = derivative.value(new DerivativeStructure(1, 1, 0.0, 1.0)).getPartialDerivative(1);

Propchange: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/Log10GeneratorTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/Log10GeneratorTest.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Copied: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/Log1pGeneratorTest.java (from r1391537, commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/Log1pGeneratorTest.java)
URL: http://svn.apache.org/viewvc/commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/Log1pGeneratorTest.java?p2=commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/Log1pGeneratorTest.java&p1=commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/Log1pGeneratorTest.java&r1=1391537&r2=1391539&rev=1391539&view=diff
==============================================================================
--- commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/functions/Log1pGeneratorTest.java (original)
+++ commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/Log1pGeneratorTest.java Fri Sep 28 16:43:18 2012
@@ -14,14 +14,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.nabla.forward.functions;
+package org.apache.commons.nabla.forward;
 
 import org.apache.commons.math3.analysis.UnivariateFunction;
 import org.apache.commons.math3.analysis.differentiation.DerivativeStructure;
 import org.apache.commons.math3.analysis.differentiation.UnivariateDifferentiableFunction;
+import org.apache.commons.math3.util.FastMath;
 import org.apache.commons.nabla.AbstractMathTest;
 import org.apache.commons.nabla.DifferentiationException;
-import org.apache.commons.nabla.forward.ForwardModeDifferentiator;
 import org.junit.Assert;
 import org.junit.Test;
 
@@ -30,16 +30,16 @@ public class Log1pGeneratorTest extends 
     @Test
     public void testReference(){
         checkReference(new ReferenceFunction() {
-            public double value(double t) { return Math.log1p(t); }
+            public double value(double t) { return FastMath.log1p(t); }
             public double firstDerivative(double t) { return 1 / (1 + t); }
-        }, -0.2, 0.2, 50, 0.0);
+        }, -0.2, 0.2, 50, 2.0e-16);
     }
 
     @Test
     public void testSingularity() throws DifferentiationException {
         UnivariateDifferentiableFunction derivative =
             new ForwardModeDifferentiator().differentiate(new UnivariateFunction() {
-                public double value(double t) { return Math.log1p(t); }
+                public double value(double t) { return FastMath.log1p(t); }
             });
 
         double dPlus = derivative.value(new DerivativeStructure(1, 1, -1.0, 1.0)).getPartialDerivative(1);

Propchange: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/Log1pGeneratorTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/sandbox/nabla/trunk/src/test/java/org/apache/commons/nabla/forward/Log1pGeneratorTest.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"