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}