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"