001/*
002 * $Id$
003 */
004
005package edu.jas.kern;
006
007
008import javax.script.ScriptEngine;
009import javax.script.ScriptEngineManager;
010import javax.script.ScriptException;
011
012
013public class ScriptingExample {
014
015
016    public static void main(String[] args) {
017        runJython();
018        //runJythonRegister();
019        runJruby();
020    }
021
022
023    public static void runJythonRegister() {
024        ScriptEngine jas = new ScriptEngineManager().getEngineByExtension("py");
025        System.out.println("JAS service discovered: " + jas);
026        if (jas == null) {
027            ScriptEngineManager scriptManager = new ScriptEngineManager();
028            scriptManager.registerEngineExtension("py", new PyScriptEngineFactory());
029            jas = scriptManager.getEngineByExtension("py");
030        }
031        if (jas == null) {
032            jas = new PyScriptEngine();
033        }
034        if (jas == null) {
035            System.out.println("No JAS engine found");
036            return;
037        }
038        System.out.println("Using JAS engine: " + jas);
039        try {
040            long millis = System.currentTimeMillis();
041            //String ex = "x = 1; print(4*2*x)";
042            String ex = "from jas import PolyRing, ZZ; r = PolyRing(ZZ(),\"x,y,z\",PolyRing.lex); print str(r);"
043                            + "[one,x,y,z] = r.gens(); p = ((x*y)+z)**33; print \"p = \" + str(p)";
044            System.out.println("input:  " + ex);
045            Object ans = jas.eval(ex);
046            millis = System.currentTimeMillis() - millis;
047            System.out.println("answer: " + ans);
048            System.out.println("evaluation took " + millis);
049
050        } catch (ScriptException e) {
051            e.printStackTrace();
052        } catch (Exception e) {
053            e.printStackTrace();
054        }
055    }
056
057
058    public static void runJython() {
059        ScriptEngine jas = new ScriptEngineManager().getEngineByExtension("py");
060        System.out.println("JAS service discovered: " + jas);
061        if (jas == null) {
062            System.out.println("No JAS engine found");
063            return;
064        }
065        System.out.println("Using JAS engine: " + jas);
066        try {
067            long millis = System.currentTimeMillis();
068            //String ex = "x = 1; print(4*2*x)";
069            String ex = "from jas import PolyRing, ZZ;\nr = PolyRing(ZZ(),\"x,y,z\",PolyRing.lex);\nprint str(r);\n"
070                            + "[one,x,y,z] = r.gens();\np = ((x*y)+z)**33;\nprint \"p = \" + str(p)";
071            System.out.println("input:  " + ex);
072            Object ans = jas.eval(ex);
073            millis = System.currentTimeMillis() - millis;
074            System.out.println("answer: " + ans);
075            System.out.println("evaluation took " + millis);
076
077        } catch (ScriptException e) {
078            e.printStackTrace();
079        } catch (Exception e) {
080            e.printStackTrace();
081        }
082    }
083
084
085    public static void runJruby() {
086        ScriptEngine jas = new ScriptEngineManager().getEngineByExtension("rb");
087        System.out.println("JAS service discovered: " + jas);
088        if (jas == null) {
089            System.out.println("No JAS engine found");
090            return;
091        }
092        System.out.println("Using JAS engine: " + jas);
093        try {
094            long millis = System.currentTimeMillis();
095            //String ex = "x = 1; print(4*2*x)";
096            String ex = "require \"jas\"; r = PolyRing.new(ZZ(),\"x,y,z\",PolyRing.lex); puts r.to_s;"
097                            + "one,x,y,z = r.gens(); p = ((x*y)+z)**33; puts \"p = \" + p.to_s";
098            System.out.println("input:  " + ex);
099            Object ans = jas.eval(ex);
100            millis = System.currentTimeMillis() - millis;
101            System.out.println("answer: " + ans);
102            System.out.println("evaluation took " + millis);
103
104        } catch (ScriptException e) {
105            e.printStackTrace();
106        } catch (Exception e) {
107            e.printStackTrace();
108        }
109    }
110
111}