Package ca.nengo.math.impl

Examples of ca.nengo.math.impl.DefaultFunctionInterpreter


  /*
   * Test method for 'ca.nengo.math.impl.DefaultFunctionInterpreter.registerFunction(String, Function)'
   */
  public void testRegisterFunction() {
    Function c = new ConstantFunction(2, 1f);
    DefaultFunctionInterpreter interpreter = new DefaultFunctionInterpreter();
    interpreter.registerFunction("const", c);
    PostfixFunction f = (PostfixFunction) interpreter.parse("const(x0, x1)", 2);
    List<Serializable> l = f.getExpressionList();
    assertEquals(Integer.valueOf(0), l.get(0));
    assertEquals(Integer.valueOf(1), l.get(1));
    assertEquals(c, l.get(2));
   
    try {
      interpreter.registerFunction("const", new ConstantFunction(1, 1f));
      fail("Should have thrown exception due to duplicate name");     
    } catch (Exception e) {} //exception is expected
  }
View Full Code Here


  /*
   * Test method for 'ca.nengo.math.impl.DefaultFunctionInterpreter.parse(String, int)'
   */
  public void testParse() {
    float tolerance = .0001f;
    DefaultFunctionInterpreter interpreter = new DefaultFunctionInterpreter();
    Function f = null;
    List<Serializable> l = null;
   
    // basic binary cases ...
    f = interpreter.parse("x0 + x1", 2);
    l = ((PostfixFunction) f).getExpressionList();
    assertEquals(Integer.valueOf(0), l.get(0));
    assertEquals(Integer.valueOf(1), l.get(1));
    assertEquals("+", l.get(2).toString());
    TestUtil.assertClose(2f, f.map(new float[]{1f, 1f}), tolerance);
   
    f = interpreter.parse("x0 - x1", 2);
    l = ((PostfixFunction) f).getExpressionList();
    assertEquals(Integer.valueOf(0), l.get(0));
    assertEquals(Integer.valueOf(1), l.get(1));
    assertEquals("-", l.get(2).toString());
    TestUtil.assertClose(0f, f.map(new float[]{1f, 1f}), tolerance);
   
    f = interpreter.parse("x0 * x1", 2);
    l = ((PostfixFunction) f).getExpressionList();
    assertEquals(Integer.valueOf(0), l.get(0));
    assertEquals(Integer.valueOf(1), l.get(1));
    assertEquals("*", l.get(2).toString());
    TestUtil.assertClose(1f, f.map(new float[]{1f, 1f}), tolerance);
   
    f = interpreter.parse("x0 / x1", 2);
    l = ((PostfixFunction) f).getExpressionList();
    assertEquals(Integer.valueOf(0), l.get(0));
    assertEquals(Integer.valueOf(1), l.get(1));
    assertEquals("/", l.get(2).toString());
    TestUtil.assertClose(.5f, f.map(new float[]{1f, 2f}), tolerance);
   
    f = interpreter.parse("x0 ^ x1", 2);
    l = ((PostfixFunction) f).getExpressionList();
    assertEquals(Integer.valueOf(0), l.get(0));
    assertEquals(Integer.valueOf(1), l.get(1));
    assertEquals("^", l.get(2).toString());
    TestUtil.assertClose(4f, f.map(new float[]{2f, 2f}), tolerance);
   
    f = interpreter.parse("x0 < x1", 2);
    l = ((PostfixFunction) f).getExpressionList();
    assertEquals(Integer.valueOf(0), l.get(0));
    assertEquals(Integer.valueOf(1), l.get(1));
    assertEquals("<", l.get(2).toString());
    TestUtil.assertClose(1f, f.map(new float[]{0f, 1f}), tolerance);
    TestUtil.assertClose(0f, f.map(new float[]{1f, 0f}), tolerance);
   
    f = interpreter.parse("x0 > x1", 2);
    l = ((PostfixFunction) f).getExpressionList();
    assertEquals(Integer.valueOf(0), l.get(0));
    assertEquals(Integer.valueOf(1), l.get(1));
    assertEquals(">", l.get(2).toString());
    TestUtil.assertClose(0f, f.map(new float[]{0f, 1f}), tolerance);
    TestUtil.assertClose(1f, f.map(new float[]{1f, 0f}), tolerance);
   
    f = interpreter.parse("x0 & x1", 2);
    l = ((PostfixFunction) f).getExpressionList();
    assertEquals(Integer.valueOf(0), l.get(0));
    assertEquals(Integer.valueOf(1), l.get(1));
    assertEquals("&", l.get(2).toString());
    TestUtil.assertClose(1f, f.map(new float[]{1f, 1f}), tolerance);
    TestUtil.assertClose(0f, f.map(new float[]{0f, 1f}), tolerance);
   
    f = interpreter.parse("x0 | x1", 2);
    l = ((PostfixFunction) f).getExpressionList();
    assertEquals(Integer.valueOf(0), l.get(0));
    assertEquals(Integer.valueOf(1), l.get(1));
    assertEquals("|", l.get(2).toString());
    TestUtil.assertClose(0f, f.map(new float[]{0f, 0f}), tolerance);
    TestUtil.assertClose(1f, f.map(new float[]{0f, 1f}), tolerance);
   
    f = interpreter.parse("x0|x1", 2);
    l = ((PostfixFunction) f).getExpressionList();
    assertEquals(Integer.valueOf(0), l.get(0));
    assertEquals(Integer.valueOf(1), l.get(1));
    assertEquals("|", l.get(2).toString());
   
    f = interpreter.parse("x0| x1", 2);
    l = ((PostfixFunction) f).getExpressionList();
    assertEquals(Integer.valueOf(0), l.get(0));
    assertEquals(Integer.valueOf(1), l.get(1));
    assertEquals("|", l.get(2).toString());
   
    f = interpreter.parse("x0 |x1", 2);
    l = ((PostfixFunction) f).getExpressionList();
    assertEquals(Integer.valueOf(0), l.get(0));
    assertEquals(Integer.valueOf(1), l.get(1));
    assertEquals("|", l.get(2).toString());
   
    f = interpreter.parse("x0 % x1", 2);
    l = ((PostfixFunction) f).getExpressionList();
    assertEquals(Integer.valueOf(0), l.get(0));
    assertEquals(Integer.valueOf(1), l.get(1));
    assertEquals("%", l.get(2).toString());
    TestUtil.assertClose(0f, f.map(new float[]{10f, 2f}), tolerance);
    TestUtil.assertClose(1f, f.map(new float[]{10f, 3f}), tolerance);
   
    // basic unary cases ... 
    f = interpreter.parse("x0", 1);
    l = ((PostfixFunction) f).getExpressionList();
    assertEquals(Integer.valueOf(0), l.get(0));
    TestUtil.assertClose(1f, f.map(new float[]{1f}), tolerance);
   
    f = interpreter.parse("-x0", 1);
    l = ((PostfixFunction) f).getExpressionList();
    assertEquals(Integer.valueOf(0), l.get(0));
    assertEquals("~", l.get(1).toString());
    TestUtil.assertClose(-1f, f.map(new float[]{1f}), tolerance);
   
    f = interpreter.parse("!x0", 1);
    l = ((PostfixFunction) f).getExpressionList();
    assertEquals(Integer.valueOf(0), l.get(0));
    assertEquals("!", l.get(1).toString());
    TestUtil.assertClose(0f, f.map(new float[]{1f}), tolerance);
    TestUtil.assertClose(1f, f.map(new float[]{0f}), tolerance);
   
    f = interpreter.parse("! x0", 1);
    l = ((PostfixFunction) f).getExpressionList();
    assertEquals(Integer.valueOf(0), l.get(0));
    assertEquals("!", l.get(1).toString());
   
    //precedence ...
    f = interpreter.parse("x0 + x1 + x2", 3);
    l = ((PostfixFunction) f).getExpressionList();
    assertEquals(Integer.valueOf(0), l.get(0));
    assertEquals(Integer.valueOf(1), l.get(1));
    assertEquals("+", l.get(2).toString());
    assertEquals(Integer.valueOf(2), l.get(3));
    assertEquals("+", l.get(4).toString());
    TestUtil.assertClose(6f, f.map(new float[]{1f, 2f, 3f}), tolerance);
   
    f = interpreter.parse("x0 * x1 + x2", 3);
    l = ((PostfixFunction) f).getExpressionList();
    assertEquals(Integer.valueOf(0), l.get(0));
    assertEquals(Integer.valueOf(1), l.get(1));
    assertEquals("*", l.get(2).toString());
    assertEquals(Integer.valueOf(2), l.get(3));
    assertEquals("+", l.get(4).toString());
    TestUtil.assertClose(5f, f.map(new float[]{1f, 2f, 3f}), tolerance);
   
    f = interpreter.parse("x0 / x1 - x2", 3);
    l = ((PostfixFunction) f).getExpressionList();
    assertEquals(Integer.valueOf(0), l.get(0));
    assertEquals(Integer.valueOf(1), l.get(1));
    assertEquals("/", l.get(2).toString());
    assertEquals(Integer.valueOf(2), l.get(3));
    assertEquals("-", l.get(4).toString());
    TestUtil.assertClose(-2.5f, f.map(new float[]{1f, 2f, 3f}), tolerance);
   
    f = interpreter.parse("x0 + x1 * x2", 3);
    l = ((PostfixFunction) f).getExpressionList();
    assertEquals(Integer.valueOf(0), l.get(0));
    assertEquals(Integer.valueOf(1), l.get(1));
    assertEquals(Integer.valueOf(2), l.get(2));
    assertEquals("*", l.get(3).toString());
    assertEquals("+", l.get(4).toString());
    TestUtil.assertClose(7f, f.map(new float[]{1f, 2f, 3f}), tolerance);
   
    f = interpreter.parse("x0 + x1 * -x2", 3);
    l = ((PostfixFunction) f).getExpressionList();
    assertEquals(Integer.valueOf(0), l.get(0));
    assertEquals(Integer.valueOf(1), l.get(1));
    assertEquals(Integer.valueOf(2), l.get(2));
    assertEquals("~", l.get(3).toString());
    assertEquals("*", l.get(4).toString());
    assertEquals("+", l.get(5).toString());
    TestUtil.assertClose(-5f, f.map(new float[]{1f, 2f, 3f}), tolerance);
   
    f = interpreter.parse("x0 * x1 ^ x2", 3);
    l = ((PostfixFunction) f).getExpressionList();
    assertEquals(Integer.valueOf(0), l.get(0));
    assertEquals(Integer.valueOf(1), l.get(1));
    assertEquals(Integer.valueOf(2), l.get(2));
    assertEquals("^", l.get(3).toString());
    assertEquals("*", l.get(4).toString());
    TestUtil.assertClose(8f, f.map(new float[]{1f, 2f, 3f}), tolerance);
   
    f = interpreter.parse("x0 * x1 ^ x2 & x3", 4);
    l = ((PostfixFunction) f).getExpressionList();
    assertEquals(Integer.valueOf(0), l.get(0));
    assertEquals(Integer.valueOf(1), l.get(1));
    assertEquals(Integer.valueOf(2), l.get(2));
    assertEquals("^", l.get(3).toString());
    assertEquals("*", l.get(4).toString());
    assertEquals(Integer.valueOf(3), l.get(5));
    assertEquals("&", l.get(6).toString());
    TestUtil.assertClose(1f, f.map(new float[]{1f, 2f, 3f, 1f}), tolerance);
   
    //brackets ...
    f = interpreter.parse("x0 * (x1 + x2)", 3);
    l = ((PostfixFunction) f).getExpressionList();
    assertEquals(Integer.valueOf(0), l.get(0));
    assertEquals(Integer.valueOf(1), l.get(1));
    assertEquals(Integer.valueOf(2), l.get(2));
    assertEquals("+", l.get(3).toString());
    assertEquals("*", l.get(4).toString());
    TestUtil.assertClose(5f, f.map(new float[]{1f, 2f, 3f}), tolerance);
   
    f = interpreter.parse("(x0 * x1) ^ (x2 & x3)", 4);
    l = ((PostfixFunction) f).getExpressionList();
    assertEquals(Integer.valueOf(0), l.get(0));
    assertEquals(Integer.valueOf(1), l.get(1));
    assertEquals("*", l.get(2).toString());
    assertEquals(Integer.valueOf(2), l.get(3));
    assertEquals(Integer.valueOf(3), l.get(4));
    assertEquals("&", l.get(5).toString());
    assertEquals("^", l.get(6).toString());
    TestUtil.assertClose(2f, f.map(new float[]{1f, 2f, 3f, 4f}), tolerance);
   
    f = interpreter.parse("x0 ^ (x1 * (x2 + x3))", 4);
    l = ((PostfixFunction) f).getExpressionList();
    assertEquals(Integer.valueOf(0), l.get(0));
    assertEquals(Integer.valueOf(1), l.get(1));
    assertEquals(Integer.valueOf(2), l.get(2));
    assertEquals(Integer.valueOf(3), l.get(3));
    assertEquals("+", l.get(4).toString());
    assertEquals("*", l.get(5).toString());
    assertEquals("^", l.get(6).toString());
    TestUtil.assertClose(16384f, f.map(new float[]{2f, 2f, 3f, 4f}), tolerance);
   
    //functions ...
    f = interpreter.parse("x0 + sin(x1)", 4);
    l = ((PostfixFunction) f).getExpressionList();
    assertEquals(Integer.valueOf(0), l.get(0));
    assertEquals(Integer.valueOf(1), l.get(1));
    assertTrue(l.get(2) instanceof SimpleFunctions.Sin);
    assertEquals("+", l.get(3).toString());
    TestUtil.assertClose(2f, f.map(new float[]{2f, (float) Math.PI, 1f, 1f}), tolerance);
   
    f = interpreter.parse("x0 + sin(x1 + x2)", 4);
    l = ((PostfixFunction) f).getExpressionList();
    assertEquals(Integer.valueOf(0), l.get(0));
    assertEquals(Integer.valueOf(1), l.get(1));
    assertEquals(Integer.valueOf(2), l.get(2));
    assertEquals("+", l.get(3).toString());
    assertTrue(l.get(4) instanceof SimpleFunctions.Sin);
    assertEquals("+", l.get(5).toString());
    TestUtil.assertClose(2f, f.map(new float[]{2f, (float) Math.PI / 2f, (float) Math.PI / 2f, 1f}), tolerance);
   
    //constants ...
    f = interpreter.parse("1.1", 2);
    l = ((PostfixFunction) f).getExpressionList();
    assertTrue(l.get(0) instanceof Float);
    TestUtil.assertClose(1.1f, ((Float) l.get(0)).floatValue(), .0001f);
    TestUtil.assertClose(1.1f, f.map(new float[]{1f, 1f}), tolerance);
   
    f = interpreter.parse("x0 + 5", 2);
    l = ((PostfixFunction) f).getExpressionList();
    assertEquals(Integer.valueOf(0), l.get(0));
    assertTrue(l.get(1) instanceof Float);
    TestUtil.assertClose(5f, ((Float) l.get(1)).floatValue(), .0001f);
    assertEquals("+", l.get(2).toString());
    TestUtil.assertClose(6f, f.map(new float[]{1f, 1f}), tolerance);
   
    f = interpreter.parse("x0 + 1.5", 2);
    l = ((PostfixFunction) f).getExpressionList();
    assertEquals(Integer.valueOf(0), l.get(0));
    assertTrue(l.get(1) instanceof Float);
    TestUtil.assertClose(1.5f, ((Float) l.get(1)).floatValue(), .0001f);
    assertEquals("+", l.get(2).toString());
    TestUtil.assertClose(2.5f, f.map(new float[]{1f, 1f}), tolerance);
   
    f = interpreter.parse("x0 + 0.5", 2);
    l = ((PostfixFunction) f).getExpressionList();
    assertEquals(Integer.valueOf(0), l.get(0));
    assertTrue(l.get(1) instanceof Float);
    TestUtil.assertClose(0.5f, ((Float) l.get(1)).floatValue(), .0001f);
    assertEquals("+", l.get(2).toString());
    TestUtil.assertClose(1.5f, f.map(new float[]{1f, 1f}), tolerance);
   
    f = interpreter.parse("x0 + .5", 2);
    l = ((PostfixFunction) f).getExpressionList();
    assertEquals(Integer.valueOf(0), l.get(0));
    assertTrue(l.get(1) instanceof Float);
    TestUtil.assertClose(0.5f, ((Float) l.get(1)).floatValue(), .0001f);
    assertEquals("+", l.get(2).toString());
    TestUtil.assertClose(1.5f, f.map(new float[]{1f, 1f}), tolerance);
   
    f = interpreter.parse("x0 + pi", 2);
    l = ((PostfixFunction) f).getExpressionList();
    assertEquals(Integer.valueOf(0), l.get(0));
    assertTrue(l.get(1) instanceof Float);
    TestUtil.assertClose((float) Math.PI, ((Float) l.get(1)).floatValue(), .0001f);
    assertEquals("+", l.get(2).toString());
    TestUtil.assertClose(1f + (float) Math.PI, f.map(new float[]{1f, 1f}), tolerance);

    //dimension ...
    f = interpreter.parse("x0", 5);
    assertEquals(5, f.getDimension());

    //don't need this -- dimension is now adjusted to suit expression
//    try {
//      interpreter.parse("x5", 1);
//      fail("Should have thrown exception due to index higher than dimension");
//    } catch (Exception e) {} //exception is expected
   
    //everything ...
    f = interpreter.parse("2*pi + .5*x0 / sin((x1 + x2)^x3)", 4);
    l = ((PostfixFunction) f).getExpressionList();
    assertTrue(l.get(0) instanceof Float);
    TestUtil.assertClose(2f, ((Float) l.get(0)).floatValue(), .0001f);
    assertTrue(l.get(1) instanceof Float);
    TestUtil.assertClose((float) Math.PI, ((Float) l.get(1)).floatValue(), .0001f);
View Full Code Here

        //calculates the difference between subunit high and low
        //while this is done in the IndicatorPDF class, the difference cannot be accessed
        mySubDifference = dendriteRange.getHigh() - dendriteRange.getLow();

        myRange = new float[this.size][1];
        interpreter = new DefaultFunctionInterpreter();

        //if a function string is sent in, connections will be made from a function computing origin to the soma

        //By default, dendrites are always set to rate mode
        //However, the user can specify whether or not to change these to fire in spiking mode
View Full Code Here

     * Creates an origin at the dendrite level with a user specified function
     * The value calculated at the dendrites is then transferred to the soma ensemble
     * @throws StructuralException if decoded origin already exists
     */
    public void createFunctionOriginDendrites() throws StructuralException {
        this.interpreter = new DefaultFunctionInterpreter();

        int i = 0;
        Function[] f = new Function[1];
        f[0] = this.interpreter.parse(this.myDendriteFunction, this.dim);
        this.myConnectedOrigin = "function"; //changes connected origin name to be the newly created origin as opposed to X
View Full Code Here

   
    Simulator simulator = net.getSimulator();
    // Rules:
    // 1) if A and (B or C) then 1
    // 2) if D then 2
    FunctionInterpreter fi = new DefaultFunctionInterpreter();

    Function[] functions = new Function[] { fi.parse("x0 < .2", 1),
        new ConstantFunction(1, .5f), new ConstantFunction(1, .2f),
        new ConstantFunction(1, .3f) };
    FunctionInput in = new FunctionInput("input", functions, Units.UNK);

    NEFEnsembleFactory ef = new NEFEnsembleFactoryImpl();
View Full Code Here

TOP

Related Classes of ca.nengo.math.impl.DefaultFunctionInterpreter

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.