Annotation of OpenXM/src/kan96xx/Doc/oxasir_old.sm1, Revision 1.1
1.1 ! takayama 1: % $OpenXM$
! 2: %% kxx/oxasir.sm1 1998, 2/12 (this version is at Old/oxasir.sm1.19980212
! 3: %% 3/1, 1995, 11/5, 11/21
! 4: %% This file is error clean.
! 5: %%%%%%% How to install.
! 6: %%% Set ASIR_LIBDIR if necessary. Ex. /u/nobuki/lib/asir
! 7: %%% write ~/.asirrc : load("gr")$ load("primdec")$ load("bfct")$ end$
! 8: %%% or it is written in OpenXM/rc/asirrc in OpenXM env, it's fine.
! 9: %%% oxasir.asir must be in
! 10: %%% LOAD_SM1_PATH or oxasirpath.asirlib
! 11: %%% Edit below
! 12: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 13: %%% /usr/local/lib/sm1, SM1_LOAD_PATH, /usr/local/lib/asir, ASIR_LOAD_PATH
! 14: /oxasirpath.oxasir (ox_asir) def %% loadmethod is 1
! 15: /oxasirpath.asirlib (oxasir.asir) def
! 16:
! 17: /ox_asirConnectMethod { asirconnectr /oxasir.ccc set } def
! 18: %/ox_asirConnectMethod { asirconnect2 } def
! 19:
! 20: %% Old path
! 21: %/oxasirpath.oxasir (/home/nobuki/kxx/ox_asir) def %% loadmethod is 1
! 22: %/oxasirpath.asirlib (/home/nobuki/kxx/oxasir.asir) def
! 23: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 24: /oxasir.loadmethod 1 def %% "..." oxsendcmo (load) ox...
! 25: %/oxasir.loadmethod 0 def %% load("..."); %% at MSRI
! 26: %%%%%%%%%%%%%%%% end of configuration.
! 27: /initializePathNamesForOxAsir {
! 28: [oxasirpath.oxasir] getPathNameAsir /oxasirpath.oxasir set
! 29: [oxasirpath.asirlib] getPathNameSm1 /oxasirpath.asirlib set
! 30: } def
! 31:
! 32:
! 33: /oxasir.verbose 0 def
! 34: /oxasir.version (2.981105) def
! 35: oxasir.version [(Version)] system_variable gt
! 36: { [(This package requires the latest version of kan/sm1) nl
! 37: (Please get it from http://www.math.kobe-u.ac.jp/KAN) ] cat
! 38: error
! 39: } { } ifelse
! 40: (oxasir.sm1, --- open asir protocol module 3/1 1998, 6/5 1999) message-quiet
! 41: ( asirconnect, asir, fctr, primadec, (C) M.Noro, N.Takayama ) message-quiet
! 42:
! 43: /oxasir.ccc load isArray
! 44: { }
! 45: { /oxasir.ccc [ ] def } ifelse
! 46:
! 47: [(parse) (ox.sm1) pushfile] extension pop
! 48: oxasir.verbose {
! 49: (type in asirconnect to connect, asir is used to execute asir command. )
! 50: message
! 51: (type in asirconnect2 to open a new window for ox_asir, connect, asir is used to execute asir command [you need to edit asirconnect2 to tell the path to load ox_asir] )
! 52: message
! 53: } { } ifelse
! 54:
! 55: /loadAsirFile {
! 56: /arg1 set
! 57: [/in-loadAsirFile /peer /fname] pushVariables
! 58: [
! 59: /peer arg1 0 get def
! 60: /fname arg1 1 get def
! 61: oxasir.loadmethod {
! 62: peer fname oxsendcmo peer 1 oxsendcmo
! 63: peer (load) oxexec
! 64: }{
! 65: peer [$load("$ fname $");$] cat oxsubmit
! 66: }ifelse
! 67: ] pop
! 68: popVariables
! 69: } def
! 70: [(loadAsirFile)
! 71: [$[client fname] loadAsirFile (ox_asir function)$
! 72: $Load a file into the client$
! 73: ]] putUsages
! 74:
! 75: /asirinit {
! 76: %% gr and primdec are loaded by .asirrc
! 77: /asirinit.peer set
! 78: [(ostype)] extension 0 get (windows) eq {
! 79: [(getenv) (OSTYPE)] extension tag 0 eq {
! 80: [asirinit.peer (oxasir-win.rr)] oxasirParseFile
! 81: }{
! 82: [(getenv) (OSTYPE)] extension (cygwin) eq {
! 83: [asirinit.peer oxasirpath.asirlib] loadAsirFile
! 84: }{
! 85: [asirinit.peer (oxasir-win.rr)] oxasirParseFile
! 86: } ifelse
! 87: } ifelse
! 88: }{
! 89: [asirinit.peer oxasirpath.asirlib] loadAsirFile
! 90: } ifelse
! 91: asirinit.peer oxmathcap
! 92: asirinit.peer oxsetmathcap
! 93: (Ox103_loaded) boundp
! 94: {
! 95: asirinit.peer ox103_asir_init
! 96: }{ } ifelse
! 97: } def
! 98: /asirconnect {
! 99: [(localhost) 1300 1200] oxconnect /oxasir.ccc set
! 100: /ccc oxasir.ccc def %% for compatibility.
! 101: oxasir.ccc asirinit
! 102: } def
! 103: /asirconnect2 {
! 104: [oxpath.oxlog.xterm oxpath.ox ( -ox ) oxasirpath.oxasir
! 105: oxpath.null
! 106: ( & )] cat system-csh
! 107: % (xterm -e /home/nobuki/kxx/ox -ox /home/nobuki/kxx/ox_asir &) system-csh
! 108: % (kterm -iconic -e /home/nobuki/kxx/ox -ox /home/nobuki/kxx/ox_asir &) system-csh
! 109: % For MSRI
! 110: % Eterm is also nice (including kanji). rxvt is also nice.
! 111: %(xterm -icon -e /u/nobuki/tmp/kxx/ox -ox /u/nobuki/tmp/Ox/ox_asir2 &) system-csh
! 112: %(kterm2 -e /u/nobuki/tmp/kxx/ox -ox /u/nobuki/tmp/Ox/ox_asir2 &) system-csh
! 113: % (If you start the server automatically, you may have a trouble to) message
! 114: % (oxreset. In order to avoid this trouble, start the server by hand.) message
! 115: (sleep 5) system-csh
! 116: [(localhost) 1300 1200] oxconnect /oxasir.ccc set
! 117: /ccc oxasir.ccc def %% for compatibility.
! 118: oxasir.ccc asirinit
! 119: } def
! 120:
! 121: [(asirconnect2)
! 122: [(asirconnect2 starts ox_asir server. (ox_asir function))
! 123: (Open xxx protocol is used for the communication between sm1 and ox_asir.)
! 124: (cf. oxhelp, asir.)
! 125: (You need to install ox_asir server to use this function. cf. oxasir)
! 126: ]] putUsages
! 127:
! 128: /asirconnect3 {
! 129: [oxpath.oxlog.xterm oxpath.ox ( -ox ) oxasirpath.oxasir
! 130: ( -data 2300 -control 2200) oxpath.null
! 131: ( & )] cat system-csh
! 132: % (If you start the server automatically, you may have a trouble to) message
! 133: % (oxreset. In order to avoid this trouble, start the server by hand.) message
! 134: (sleep 5) system-csh
! 135: [(localhost) 2300 2200] oxconnect /oxasir.ccc2 set
! 136: /ccc2 oxasir.ccc2 def %% for compatibility.
! 137: oxasir.ccc2 asirinit
! 138: (The client is stored in oxasir.ccc2.) message
! 139: } def
! 140:
! 141: [(asir)
! 142: [(pid [asir-command, asir-arg1, asir-arg2, ...] asir result (ox_asir function))
! 143: (Call open asir server. You need to install ox_asir on your system)
! 144: (to use this function. cf. primadec, fctr, asirconnect2, asirconnectr.)
! 145: (If you interrupted the computation by typing ctrl-C, type in )
! 146: ( oxasir.ccc oxreset ; )
! 147: (to interrupt the ox_asir server.)
! 148: (Example: oxasir.ccc [(fctr) (x^10-1).] asir )
! 149: ( )
! 150: (This function requires plugins cmo, socket and ox_asir server. cf. oxasir)
! 151: (See, ftp://endeavor.fujitsu.co.jp/pub/isis/asir on asir)
! 152: ]
! 153: ] putUsages
! 154:
! 155: /asir {
! 156: /arg2 set
! 157: /arg1 set
! 158: [/pid /asir-comm /comm /n /i /rr] pushVariables
! 159: [(CurrentRingp)] pushEnv
! 160: [
! 161: /pid arg1 def
! 162: /asir-comm arg2 def
! 163: pid tag 6 eq { } { (Invalid pid. See asir.) error } ifelse
! 164: pid 0 get (client) eq { } { (Invalid pid. See asir.) error } ifelse
! 165: asir-comm tag 6 eq { } { (Invalid argument asir-comm. See asir) error } ifelse
! 166:
! 167: [ %% Change the current ring if necessary to send a correct OxVlist.
! 168: asir-comm oxasir.changeRing
! 169: ] pop
! 170: %%% Setting OxVlist to tell asir a way to change dist-poly <==> poly.
! 171: (OxVlist=) getVlist2 toString (;) 3 cat_n /comm set
! 172: %% comm message
! 173: pid comm oxsubmit
! 174: pid (print(OxVlist);) oxsubmit
! 175:
! 176:
! 177: /n asir-comm length def
! 178: n 1 sub -1 1 {
! 179: /i set
! 180: pid asir-comm i get oxsendcmo
! 181: pid 1 oxsendcmo pid (ox_dtop) oxexec
! 182: } for
! 183: pid n 1 sub oxsendcmo
! 184: pid asir-comm 0 get oxexec
! 185:
! 186: pid 1 oxsendcmo pid (ox_ptod) oxexec
! 187: pid oxpopcmo /arg1 set
! 188:
! 189:
! 190: ] pop
! 191: popEnv
! 192: popVariables
! 193: arg1
! 194: } def
! 195:
! 196: /oxasir.changeRing {
! 197: /arg1 set
! 198: [/in-oxasir.changeRing /f /rr] pushVariables
! 199: [
! 200: /f arg1 def
! 201: f isArray {
! 202: f {oxasir.changeRing} map
! 203: }{
! 204: f isPolynomial {
! 205: f (0). eq { }
! 206: { f (ring) dc /rr set [(CurrentRingp) rr] system_variable } ifelse
! 207: } { } ifelse
! 208: } ifelse
! 209: ] pop
! 210: popVariables
! 211: } def
! 212:
! 213: /fctr {
! 214: /arg1 set
! 215: [/f /comm /vv] pushVariables
! 216: [(CurrentRingp)] pushEnv
! 217: [
! 218: /f arg1 def
! 219: oxasir.ccc [ ] eq {
! 220: (Starting ox_asir server.) message
! 221: ox_asirConnectMethod
! 222: } { } ifelse
! 223:
! 224: f isPolynomial not {
! 225: /vv f 1 get def
! 226: vv isArray { /vv vv from_records def } { } ifelse
! 227: /f f 0 get def
! 228: [vv ring_of_polynomials 0] define_ring
! 229: f . /f set
! 230: }{ } ifelse
! 231: oxasir.ccc [(fctr) f] asir /arg1 set
! 232: ] pop
! 233: popEnv
! 234: popVariables
! 235: arg1
! 236: } def
! 237:
! 238: [(fctr)
! 239: [(You need to install ox_asir server to use this function. (ox_asir function))
! 240: (f fctr g)
! 241: (poly f; array g;)
! 242: ([f v] fctr g ; string f, string or array of string v)
! 243: (This function factors the polynomial f over Q.)
! 244: ( )
! 245: (Example 1: [(x^10-y^10) (x,y)] fctr ::)
! 246: (Example 2: (x^10-1). fctr ::)
! 247: ( )
! 248: (If you interrupted the computation by typing ctrl-C, type in )
! 249: ( oxasir.ccc oxreset ; )
! 250: (to interrupt the ox_asir server.)
! 251: ( )
! 252: (This function requires plugins cmo, socket and ox_asir server. cf.oxasir)
! 253: ]] putUsages
! 254:
! 255:
! 256: [(primadec)
! 257: [(You need to install ox_asir server to use this function. (ox_asir function))
! 258: ([ ii ] primadec [[q1 p1] [q2 p2] ... ] )
! 259: ( array of poly ii; array of poly q1, p1, q2, p2 ...;)
! 260: ( q1, q2, ... are primary components of the primary ideal decomposition)
! 261: ( of the ideal generated by << ii >>.)
! 262: ( )
! 263: ([ ii v ] primadec [[q1 p1] [q2 p2] ... ] )
! 264: ( array of poly or string ii; array of string v; array of poly q1, p1, q2, p2 ...;)
! 265: (<< v >> is an array of independent variables.)
! 266: ( )
! 267: ([ ii v ] primadec [[q1 p1] [q2 p2] ... ] )
! 268: ( array of poly or string ii; array of string v; array of poly q1, p1, q2, p2 ...;)
! 269: ( v is a string of variables separated by , )
! 270: ( )
! 271: (Example: [(x,y) ring_of_polynomials 0] define_ring)
! 272: ( [ [(x^2-1). (x y).] ] primadec pmat ;)
! 273: ( )
! 274: (Example: [ [(x^2-1) (x y)] [(x) (y)]] primadec pmat ;)
! 275: ( )
! 276: (If you interrupted the computation by typing ctrl-C, type in )
! 277: ( oxasir.ccc oxreset ; )
! 278: (to interrupt the ox_asir server.)
! 279: ( )
! 280: (This function requires plugins cmo, socket and ox_asir server. cf.oxasir)
! 281: ]] putUsages
! 282:
! 283: /primadec {
! 284: /arg1 set
! 285: [/in-primadec /aa /f /comm /vvv /r /setarg] pushVariables
! 286: [(CurrentRingp)] pushEnv
! 287: [
! 288: /aa arg1 def
! 289: aa isArray { } { (<<array>> primadec) error } ifelse
! 290: /setarg 0 def
! 291: oxasir.ccc [ ] eq {
! 292: (Starting ox_asir server.) message
! 293: ox_asirConnectMethod
! 294: } { } ifelse
! 295: aa { tag } map /typev set
! 296: typev [ ArrayP ] eq
! 297: { /f aa 0 get def
! 298: f 0 get (ring) dc /r set
! 299: [(CurrentRingp) r] system_variable
! 300: /vvv getVariableNames def
! 301: /setarg 1 def
! 302: } { } ifelse
! 303: typev [ArrayP StringP] eq
! 304: { /f aa 0 get def
! 305: /vvv [ aa 1 get to_records pop ] def
! 306: /setarg 1 def
! 307: } { } ifelse
! 308: typev [ArrayP ArrayP] eq
! 309: { /f aa 0 get def
! 310: /vvv aa 1 get {toString} map def
! 311: /setarg 1 def
! 312: } { } ifelse
! 313: setarg { } { (primadec : Argument mismatch) error } ifelse
! 314:
! 315: f 0 get isPolynomial {
! 316: /r f 0 get (ring) dc def
! 317: /vvv vvv { r ,, } map def
! 318: }
! 319: {
! 320: [vvv from_records ring_of_polynomials 0] define_ring
! 321: f { toString . } map /f set
! 322: vvv { . } map /vvv set
! 323: } ifelse
! 324: oxasir.ccc [(primadec) f vvv] asir /arg1 set
! 325: ] pop
! 326: popEnv
! 327: popVariables
! 328: arg1
! 329: } def
! 330:
! 331:
! 332: /getVlist2 {
! 333: [/n /i ] pushVariables
! 334: [
! 335: /n [(N)] system_variable def
! 336: [
! 337: 0 1 n 1 sub { /i set (x) i (dollar) dc 2 cat_n } for
! 338: 0 1 n 1 sub { /i set (d) i (dollar) dc 2 cat_n } for
! 339: ] /arg1 set
! 340: ] pop
! 341: popVariables
! 342: arg1
! 343: } def
! 344:
! 345: %%%%%%%%%%%%%%%%%%%
! 346: /getVlist {
! 347: [/n /i ] pushVariables
! 348: [
! 349: /n [(N)] system_variable def
! 350: [
! 351: 0 1 n 1 sub { /i set [(x) (var) i] system_variable } for
! 352: 0 1 n 1 sub { /i set [(D) (var) i] system_variable } for
! 353: ] /arg1 set
! 354: ] pop
! 355: popVariables
! 356: arg1
! 357: } def
! 358:
! 359: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 360: [(chattr) 0 /findIntegralRoots] extension pop
! 361: oxasir.verbose {
! 362: (Overloaded on findIntegralRoots.) message
! 363: } { } ifelse
! 364: /findIntegralRoots {
! 365: /arg1 set
! 366: [/in-findIntegralRoots /pp ] pushVariables
! 367: [
! 368: /pp arg1 def
! 369: oxasir.ccc [ ] eq {
! 370: (Starting ox_asir server.) message
! 371: ox_asirConnectMethod
! 372: } { } ifelse
! 373: oxasir.ccc oxIsServerReady
! 374: { pp findIntegralRoots.oxasir /arg1 set}
! 375: { pp findIntegralRoots.slow /arg1 set} ifelse
! 376: ] pop
! 377: popVariables
! 378: arg1
! 379: } def
! 380:
! 381: /findIntegralRoots.oxasir {
! 382: /arg1 set
! 383: [/in-findIntegralRoots /f /r /g /aa /rlist] pushVariables
! 384: [(CurrentRingp) (KanGBmessage)] pushEnv
! 385: [
! 386: /f arg1 def
! 387: [(s) ring_of_polynomials 0] define_ring
! 388: f toString . /f set
! 389: f fctr rest /g set
! 390: g {
! 391: 0 get /aa set
! 392: aa (s). degree 1 eq {
! 393: aa (s). coeff 1 get /aa set
! 394: aa length 1 eq { 0 }
! 395: { aa 0 get (1). eq {
! 396: 0 << aa 1 get (integer) dc >> sub
! 397: } { } ifelse
! 398: } ifelse
! 399: }{ } ifelse
! 400: } map
! 401: /rlist set
! 402: %% rlist ::
! 403: [-1000000] rlist join shell rest /arg1 set
! 404: ] pop
! 405: popEnv
! 406: popVariables
! 407: arg1
! 408: } def
! 409:
! 410:
! 411: %%%%%%%%%%%%%%%%%%%%%%%%%%
! 412:
! 413: /asirconnectr {
! 414: [/in-asirconnectr /pass /peer /data /control /oxasir] pushVariables
! 415: [
! 416: /pass [(oxGenPass)] extension def
! 417: /peer [(oxGetPort) (localhost)] extension def
! 418: /data peer 1 get toString def
! 419: /control peer 3 get toString def
! 420: peer message
! 421: [oxpath.oxlog.xterm oxpath.ox ( -reverse -ox ) oxasirpath.oxasir
! 422: ( -data ) data ( -control ) control ( -pass ) pass
! 423: oxpath.null
! 424: ( &)] cat system-csh
! 425: [(oxCreateClient2) peer 0 pass] extension /oxasir set
! 426: %% 0 means connect from only localhost.
! 427: oxasir asirinit
! 428: /arg1 oxasir def
! 429: ] pop
! 430: popVariables
! 431: arg1
! 432: } def
! 433: [(asirconnectr)
! 434: [(asirconnectr server (ox_asir function))
! 435: (array server;)
! 436: (Example: asirconnectr /oxasir.ccc set)
! 437: ]] putUsages
! 438:
! 439:
! 440: %%%%%%%%%%%%% From gbhg3/Int/intw.sm1
! 441: %% This function needs solv1.asir and ox_asir.
! 442: %% See solv1.asir for the usage of this function.
! 443: /rationalRoots2 {
! 444: /arg1 set
! 445: [/in-rationalRoots2 /aa /f /comm /vvv /r /setarg
! 446: /w /ans
! 447: ] pushVariables
! 448: [(CurrentRingp) (KanGBmessage)] pushEnv
! 449: [
! 450: /aa arg1 def
! 451: aa isArray { } { (<<array>> rationalRoots2) error } ifelse
! 452: /setarg 0 def
! 453: oxasir.ccc [ ] eq {
! 454: (Starting ox_asir server.) message
! 455: ox_asirConnectMethod
! 456: } { } ifelse
! 457: aa { tag } map /typev set
! 458: typev [ArrayP StringP ArrayP] eq
! 459: { /f aa 0 get def
! 460: /vvv [ aa 1 get to_records pop ] def
! 461: /w aa 2 get def
! 462: /setarg 1 def
! 463: } { } ifelse
! 464: typev [ArrayP ArrayP ArrayP] eq
! 465: { /f aa 0 get def
! 466: /vvv aa 1 get {toString} map def
! 467: /setarg 1 def
! 468: /w aa 2 get def
! 469: } { } ifelse
! 470: setarg { } { (rationalRoots2 : Argument mismatch) error } ifelse
! 471:
! 472:
! 473: [vvv from_records ring_of_polynomials 0] define_ring
! 474: f { toString . } map /f set
! 475: vvv { . } map /vvv set
! 476: w { toString . } map /w set
! 477:
! 478: (rationalRoots2 -- f = ) messagen f messagen
! 479: ( , vvv= ) messagen vvv messagen ( , w = ) messagen w message
! 480:
! 481: vvv length 1 eq w 0 get (1). eq and
! 482: {
! 483: [(KanGBmessage) 0] system_variable
! 484: [f] groebner_sugar 0 get /f set
! 485: vvv 0 get toString (s) eq {
! 486: }{ [[vvv 0 get toString (s)] from_records ring_of_polynomials 0] define_ring}
! 487: ifelse
! 488: f 0 get toString . [[vvv 0 get toString . (s).]] replace
! 489: findIntegralRoots /ans set
! 490: }
! 491: {
! 492: oxasir.ccc [(sm1_rationalRoots2) f vvv w] asir
! 493: {(integer) dc} map
! 494: /ans set
! 495: } ifelse
! 496:
! 497: /arg1 ans def
! 498: ] pop
! 499: popEnv
! 500: popVariables
! 501: arg1
! 502: } def
! 503: [(rationalRoots2)
! 504: [(rationalRoots2 (ox_asir function) called from intw.sm1 to analyze integral)
! 505: (roots.)
! 506: ]] putUsages
! 507:
! 508: /ptozp_subst {
! 509: /arg1 set
! 510: [/in-ptozp_subst /aaa /fff /xxx /vvv /vlist] pushVariables
! 511: [(CurrentRingp)] pushEnv
! 512: [
! 513: /aaa arg1 def
! 514: /fff aaa 0 get def
! 515: /xxx aaa 1 get toString def
! 516: /vvv aaa 2 get {toString ..} map def
! 517: aaa length 4 eq {
! 518: /vlist aaa 3 get def
! 519: } {
! 520: /vlist 0 def
! 521: } ifelse
! 522: oxasir.ccc [ ] eq {
! 523: (Starting ox_asir server.) message
! 524: ox_asirConnectMethod
! 525: } { } ifelse
! 526: fff isPolynomial {
! 527: fff (ring) dc ring_def
! 528: fff toString /fff set
! 529: }
! 530: { vlist isInteger { (ptozp_subst: need variable names.) error } { } ifelse
! 531: [vlist ring_of_differential_operators 0] define_ring
! 532: } ifelse
! 533: oxasir.ccc [(sm1_ptozp_subst) fff . xxx . vvv] asir
! 534: /arg1 set
! 535: ] pop
! 536: popEnv
! 537: popVariables
! 538: arg1
! 539: } def
! 540:
! 541: [(ptozp_subst)
! 542: [$[f s [p q] v] ptozp_subst g (ox_asir function)$
! 543: $It returns ptozp(subst(f,s,p/q))$
! 544: $Example 1: [ (x Dx - s) (s) [2 3] (x,s)] ptozp_subst $
! 545: $ ===> 3 x Dx - 2 $
! 546: ]] putUsages
! 547:
! 548: /reduceByAsir {
! 549: /arg1 set
! 550: [/in-reduceByAsir /aaa /fff /fff0 /fff1 /vlist] pushVariables
! 551: [(CurrentRingp)] pushEnv
! 552: [
! 553: /aaa arg1 def
! 554: /fff aaa 0 get def
! 555: aaa length 2 eq {
! 556: /vlist aaa 1 get def
! 557: } {
! 558: /vlist 0 def
! 559: } ifelse
! 560: oxasir.ccc [ ] eq {
! 561: (Starting ox_asir server.) message
! 562: ox_asirConnectMethod
! 563: } { } ifelse
! 564: fff isArray {
! 565: fff length 2 eq {
! 566: /fff0 fff 0 get def
! 567: /fff1 fff 1 get def
! 568: } {
! 569: ([ << [f g] >> vlist ] reduceByAsir ) error
! 570: } ifelse
! 571: } {
! 572: ([ << [f g] >> vlist ] reduceByAsir ) error
! 573: } ifelse
! 574: fff0 isPolynomial fff1 isPolynomial and {
! 575: fff0 (ring) dc ring_def
! 576: fff0 toString . /fff0 set
! 577: fff1 (ring) dc ring_def
! 578: fff1 toString . /fff1 set
! 579: }
! 580: { vlist isInteger { (reduceByAsir: need variable names.) error } { } ifelse
! 581: [vlist ring_of_differential_operators 0] define_ring
! 582: fff0 toString . /fff0 set
! 583: fff1 toString . /fff1 set
! 584: } ifelse
! 585: oxasir.ccc [(sm1_rat2plist2) [fff0 fff1]] asir
! 586: /arg1 set
! 587: ] pop
! 588: popEnv
! 589: popVariables
! 590: arg1
! 591: } def
! 592:
! 593: [(reduceByAsir)
! 594: [$ [[f g] v] reduceByAsir [ff gg] (ox_asir function)$
! 595: $ [[f g]] reduceByAsir [ff gg] $
! 596: $Example 1: [[(2 x -2) (4 x - 8)] (x)] reduceByAsir $
! 597: (Note that there may be a gcd that is more than 1 among the coefficients.)
! 598: ]] putUsages
! 599:
! 600: %% File should be preprocessed by OpenXM/misc/packages/Windows/oxpp
! 601: %% and ./oxapp --removeSharp
! 602: [(oxasirParseFile)
! 603: [$[peer filename] oxasirParseFile $
! 604: $File should be preprocessed by OpenXM/misc/packages/Windows/oxpp$
! 605: $and ./oxapp --removeSharp $
! 606: ]] putUsages
! 607:
! 608: /oxasirParseFile {
! 609: /arg1 set
! 610: [/in-oxasirParseFile /fname /sss] pushVariables
! 611: [
! 612: /fname arg1 1 get def
! 613: /peer arg1 0 get def
! 614: fname pushfile /sss set
! 615: peer
! 616: [$if (1) { ; $ sss (}$)] cat
! 617: oxsubmit
! 618: ] pop
! 619: popVariables
! 620: } def
! 621:
! 622: [(bfct)
! 623: [
! 624: ( f bfct b )
! 625: ( poly f; poly b)
! 626: ([f v] bfct b)
! 627: ( string f )
! 628: ( b is the global b-function of the polynomial f.)
! 629: (Example: [(x^3-y^2) (x,y)] bfct fctr :: )
! 630: (Algorithm: M.Noro, Mathematical Software, icms 2002, pp.147--157.)
! 631: ( )
! 632: (If you interrupted the computation by typing ctrl-C, type in )
! 633: ( oxasir.ccc oxreset ; )
! 634: (to interrupt the ox_asir server.)
! 635: ( )
! 636: (This function requires plugins cmo, socket and ox_asir server. cf.oxasir)
! 637: (You need to install ox_asir server to use this function. (ox_asir function))
! 638: ]] putUsages
! 639:
! 640: /bfct {
! 641: /arg1 set
! 642: [/in-bfct /f /comm /vv] pushVariables
! 643: [(CurrentRingp)] pushEnv
! 644: [
! 645: /f arg1 def
! 646: oxasir.ccc [ ] eq {
! 647: (Starting ox_asir server.) message
! 648: ox_asirConnectMethod
! 649: } { } ifelse
! 650:
! 651: f isPolynomial not {
! 652: /vv f 1 get def
! 653: vv isArray { /vv vv from_records def } { } ifelse
! 654: /f f 0 get def
! 655: [vv ring_of_polynomials 0] define_ring
! 656: f . /f set
! 657: }{ } ifelse
! 658: oxasir.ccc [(oxasir_bfct) f] asir /f set
! 659: [(s) ring_of_polynomials 0] define_ring
! 660: f . /f set
! 661: [f f fctr] /arg1 set
! 662: ] pop
! 663: popEnv
! 664: popVariables
! 665: arg1
! 666: } def
! 667:
! 668: [(generic_bfct)
! 669: [
! 670: ( [ii weight] generic_bfct b )
! 671: ( list of poly ii; list weight)
! 672: ([ii weight variables] generic_bfct b)
! 673: ( list of string ii; list weight; list variables)
! 674: ( b is the general b-function of the ideal ii w.r.t the weight.)
! 675: (Example: [[(Dx^2) (Dy^2)] [(x) -1 (Dx) 1] [(x) (y)]] generic_bfct :: )
! 676: (Notion: Saito, Sturmfels, Takayama, Grobner deformations of hypergeometric differential equaitons)
! 677: (Algorithm: M.Noro, Mathematical Software, icms 2002, pp.147--157.)
! 678: ( )
! 679: (If you interrupted the computation by typing ctrl-C, type in )
! 680: ( oxasir.ccc oxreset ; )
! 681: (to interrupt the ox_asir server.)
! 682: ( )
! 683: (This function requires plugins cmo, socket and ox_asir server. cf.oxasir)
! 684: (You need to install ox_asir server to use this function. (ox_asir function))
! 685: ]] putUsages
! 686:
! 687: /generic_bfct {
! 688: /arg1 set
! 689: [/in-generic_bfct /aa /f /comm /vvv0 /n /vvv /ddd /r /setarg
! 690: /bf /wt ] pushVariables
! 691: [(CurrentRingp)] pushEnv
! 692: [
! 693: /aa arg1 def
! 694: aa isArray { } { (<<array>> generic_bfct) error } ifelse
! 695: /setarg 0 def
! 696: aa { tag } map /typev set
! 697: typev [ ArrayP ArrayP] eq
! 698: { /f aa 0 get def
! 699: f 0 tag PolyP { } { (The first argument must be a list of differential operators. Give the third variable: a list of variables) error } ifelse
! 700: f 0 get (ring) dc /r set
! 701: [(CurrentRingp) r] system_variable
! 702: /wt aa 1 get def
! 703:
! 704: /vvv0 getVariableNames def
! 705: /n [(N)] system_variable def
! 706: /vvv vvv0 n carN rest reverse rest reverse def
! 707: /ddd vvv0 reverse n carN reverse
! 708: rest reverse rest reverse def
! 709:
! 710: /wt wt generic_bfct.aux1 def
! 711:
! 712: /setarg 1 def
! 713: } { } ifelse
! 714: typev [ArrayP ArrayP StringP] eq
! 715: { /f aa 0 get def
! 716: /vvv [ aa 2 get to_records pop ] def
! 717: /wt aa 1 get def
! 718:
! 719: /n vvv length def
! 720: /ddd vvv { (D) 2 1 roll 2 cat_n } map def
! 721:
! 722: /setarg 1 def
! 723: } { } ifelse
! 724: typev [ArrayP ArrayP ArrayP] eq
! 725: { /f aa 0 get def
! 726: /vvv aa 2 get {toString} map def
! 727: /wt aa 1 get def
! 728:
! 729: /n vvv length def
! 730: /ddd vvv { (D) 2 1 roll 2 cat_n } map def
! 731:
! 732: /setarg 1 def
! 733: } { } ifelse
! 734: setarg { } { (generic_bfct : Argument mismatch) error } ifelse
! 735:
! 736: f 0 get isPolynomial {
! 737:
! 738: }
! 739: {
! 740: [vvv from_records ring_of_differential_operators 0] define_ring
! 741: f { toString . } map /f set
! 742: vvv { . } map /vvv set
! 743: ddd { . } map /ddd set
! 744: /wt wt generic_bfct.aux1 def
! 745: } ifelse
! 746: [f vvv ddd wt] message
! 747:
! 748: oxasir.ccc [ ] eq {
! 749: (Starting ox_asir server.) message
! 750: ox_asirConnectMethod
! 751: } { } ifelse
! 752:
! 753: oxasir.ccc [(oxasir_generic_bfct) f vvv ddd wt] asir /bf set
! 754: [(s) ring_of_polynomials 0] define_ring
! 755: bf . /bf set
! 756: [bf bf fctr] /arg1 set
! 757: ] pop
! 758: popEnv
! 759: popVariables
! 760: arg1
! 761: } def
! 762:
! 763: /generic_bfct.aux1 {
! 764: /arg1 set
! 765: [/in-generic_bfct.aux1 /wt /wtx /wtd /n] pushVariables
! 766: [
! 767: arg1 /wt set
! 768: /n [(N)] system_variable def
! 769: wt { dup tag PolyP eq { toString } { } ifelse } map /wt set
! 770: wt weightv /wt set
! 771: /wtx wt n carN rest reverse rest reverse def
! 772: /wtd wt reverse n carN reverse
! 773: rest reverse rest reverse def
! 774: wtx wtd join /wt set
! 775: wt { dup tag IntegerP eq { (universalNumber) dc } { } ifelse } map /wt set
! 776: wt /arg1 set
! 777: ] pop
! 778: popVariables
! 779: arg1
! 780: } def
! 781:
! 782: /oxasir.sm1.loaded 1 def
! 783: [(ostype)] extension 0 get (windows) eq {
! 784: [(parse) (oxasir-win.sm1) pushfile ] extension
! 785: }{
! 786: initializePathNamesForOxAsir %% This should be the last.
! 787: } ifelse
! 788:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>