knot.sa


Generated by gen_html_sa_files from ICSI. Contact gomes@icsi.berkeley.edu for details
 

class MAIN

class MAIN is help_message(argv:ARRAY{STR}) is #OUT+"Usage1: "+argv[0]+"\n"; #OUT+"Usage2: "+argv[0]+" -s options < knot_data\n"; #OUT+"Usage3: "+argv[0]+" -s -if input_file options\n"; #OUT+"options:\n"; #OUT+"******* invariants *******\n"; #OUT+" -a Alexander polynomial\n"; #OUT+" -ai Alexander matrix/ideal\n"; #OUT+" -am multi variable Alexander matrix\n"; #OUT+" -p [type] P polynomial(type=vz,lm,xyz. type=vz by default)\n"; #OUT+" -f F polynomial\n"; #OUT+" -q Q polynomial\n"; #OUT+" -v [n] Jones polynomial (n-parallelized)\n"; #OUT+" -c Conway polynomial\n"; #OUT+" -cyc test cyclic period using Alexander polynomial\n"; #OUT+" -cov [n] n-fold covering spaces(n=2 by default)\n"; #OUT+" -sl2 [n] representation to SL2(n) (n:prime, 2 by default)\n"; #OUT+" -grp knot group\n"; #OUT+" -kv Goeritz matrix and knot value\n"; #OUT+"******* conversions *******\n"; #OUT+" -alt alternate\n"; #OUT+" -mirror [axis] mirror(axis=x,y,z. x by default)\n"; #OUT+" -rot rotate of 90\n"; #OUT+" -rotn rotate of -90\n"; #OUT+" -mag [m] m-magnify(m=2.0 by default)\n"; #OUT+"******* output data *******\n"; #OUT+" -knot knot data\n"; #OUT+" -braid Braid\n"; #OUT+" -ndata n-data\n"; end; inits is --- polynomial -- POLYS_INTI::init; POLYM_INTI::init; -- knot inout -- VERTEXC::setShareds; K::Knot:=#KNOT; K::Knot.NoCompo0; -- K::Knot:=KNOT_TEST::trifoil; -- for test end; XLoop(argv:ARRAY{STR}) is -- call X main loop KNOTX::init; KNOTX::TrackEventK(-1,0,0,0); KNOTXW::knotXProc(argv.size, argv.array_ptr); end; streamTestmode(argv:ARRAY{STR}) is -- 0: prog. name, 1: -s, 2: function, 3..: optional -- use as: knot -s -f < knot_data > result end; streamIO(argv:ARRAY{STR}) is -- 0: prog. name, 1: -s, 2: function, 3..: optional -- use as: knot -s -f < knot_data > result if (argv.size<3) then help_message(argv); return; end; argPos:INT:=2; -- read knot in_s::=FILE::stdin; if argv[argPos]="-if" then argPos:=argPos+1; in_s:=FILE::open_for_read(argv[argPos]); argPos:=argPos+1; end; if in_s.error then return; end; if KNOTFIO::ReadKnotNS(out K::Knot, in_s).not then return; end; if K::Knot.is_Closed then K::Knot.CrossSet(0,K::Knot.length); else #OUT+"Knot data is not closed.\n"; return; end; -- #OUT+"argv[2]:"+argv[argPos]+"\n"; out_s::=FILE::stdout; tcode:TCODE; reply:INT:=0; replyb:BOOL:=true; loop while!(argPos<argv.size); func:STR:=argv[argPos]; argPos:=argPos+1; if K::Knot.SetTCode(out tcode) then -- tcode.get_Relator(tcode); else return; end; case func when "-p" then -- HOMFLY P if K::Knot.has_band then #OUT+"Not support on 2-knot."; return; end; -- format: -p [vz|lm|xyz] PDefNum::=1; if argPos<argv.size then case argv[argPos] when "vz" then PDefNum:=1; argPos:=argPos+1; when "lm" then PDefNum:=2; argPos:=argPos+1; when "xyz" then PDefNum:=3; argPos:=argPos+1; else end end; case PDefNum when 1 then PPOLY::Ppoly(tcode,PPOLY::Def_vz); when 2 then PPOLY::Ppoly(tcode,PPOLY::Def_lm); when 3 then PPOLY::Ppoly(tcode,PPOLY::Def_xyz); end; when "-f" then -- Kauffman F if K::Knot.has_band then #OUT+"Not support on 2-knot."; return; end; FPOLY::Fpoly(tcode); when "-c" then -- Conway C if K::Knot.has_band then #OUT+"Not support on 2-knot."; return; end; ALEXMAT::AlexMat(tcode,false,false,true); --CPOLY::Cpoly(tcode); when "-q" then -- Q if K::Knot.has_band then #OUT+"Not support on 2-knot."; return; end; QPOLY::Qpoly(tcode); when "-v" then -- Jones V -- format: -v [parallel_index] if K::Knot.has_band then #OUT+"Not support on 2-knot."; return; end; n:INT:=1; if (argPos<argv.size)and argv[argPos][0].is_digit then n:=#INT(argv[argPos]); argPos:=argPos+1; end; if n>=2 then VPOLY::VPara(tcode,n); else VPOLY::Vpoly(tcode); end; when "-cov" then -- covering if K::Knot.has_band then K::Knot.make_coherent; return; end; -- format: -cov [covering_index] n:INT:=2; -- covering fold >=2 if (argPos<argv.size) and argv[argPos][0].is_digit then n:=INT::create(argv[argPos]); argPos:=argPos+1; end; if n<2 then n:=2; end; form::=2; -- 1/2 branchind::=1; covlk::=1; --0/1 h1b::=1; h1u::=1; knotgrp::=1; twistAlex::=1; --0/1 covDistY::=1; covDistBr::=1; covDistLk::=1; --0/1 covDistH1B::=1; covDistH1U::=1; --0/1 #REP.RepSearch(tcode,n,form,branchind,covlk,h1b,h1u,knotgrp,twistAlex, covDistY,covDistBr,covDistLk, covDistH1B,covDistH1U); when "-sl2" then -- SL2(p) representation if K::Knot.has_band then K::Knot.make_coherent; return; end; -- format: -sl2 prime_number base::=2; form::=1; twistAlex::=1; --0/1 if (argPos<argv.size) and argv[argPos][0].is_digit then base:=INT::create(argv[argPos]); argPos:=argPos+1; end; #REP_SL2P.RepSearch(tcode,base,form,twistAlex); when "-a" then -- alexander poly. if K::Knot.has_band then K::Knot.make_coherent; return; end; ALEXMAT::AlexMat(tcode,false,false); --APOLY::ApolyC(tcode); when "-ai" then -- alexander matrix/ideal if K::Knot.has_band then K::Knot.make_coherent; return; end; ALEXMAT::AlexMat(tcode,false,true); when "-cyc" then -- test cyclic period if K::Knot.has_band then #OUT+"Not support on 2-knot."; return; end; ALEXMAT::AlexMat(tcode,true,false); when "-am" then -- multi variable alexander matrix if K::Knot.has_band then K::Knot.make_coherent; return; end; ALEXMATM::AlexMat(tcode); when "-grp" then -- knot group if K::Knot.has_band then K::Knot.make_coherent; return; end; KNOT_GROUP::printGroup(tcode); -- Group; when "-kv" then -- Goerits matrix and knot value if K::Knot.has_band then #OUT+"Not support on 2-knot."; return; end; GOERITZ_MAT::KnotValue(tcode); ---- conversions when "-alt" then -- alternate ALTERNATE::Alternate(inout K::Knot); when "-mirror" then -- mirror-x -- format: -mirror [x|y|z] axis:STR:="x"; -- x,y,z if argPos<argv.size then case argv[argPos] when "x" then axis:="x"; argPos:=argPos+1; when "y" then axis:="y"; argPos:=argPos+1; when "z" then axis:="z"; argPos:=argPos+1; else axis:="x"; -- x,y,z end end; case axis when "x" then K::Knot.mirrorX; when "y" then K::Knot.mirrorY; when "z" then K::Knot.mirrorZ; end; when "-mag" then -- magnify -- format: -mag [scaling] mag:FLT:=2.0; if (argPos<argv.size) and argv[argPos][0].is_digit then mag:=#FLT(argv[argPos]); argPos:=argPos+1; end; if mag<0.0 then mag:=2.0; end; K::Knot.transform(mag); when "-rot" then K::Knot.transform(0,-1,1,0); when "-rotn" then K::Knot.transform(0,1,-1,0); ---- print data when "-knot" then -- knot data replyb:=KNOTFIO::WriteKnotS(K::Knot,out_s,true,true,""); when "-braid" then -- braid if K::Knot.has_band then #OUT+"Not support on 2-knot."; return; end; replyb:=KNOTFIO::WriteBraidS(K::Knot,out_s,true,true,""); when "-ndata" then -- n-data if K::Knot.has_band then #OUT+"Not support on 2-knot."; return; end; replyb:=KNOTFIO::WriteNDataS(K::Knot,out_s,true,true,""); else #OUT+" Unknown option "+func+"\n"; return; end; out_s+"\n"; end; end; main(argv:ARRAY{STR}) is inits; if (argv.size>=2) then if (argv[1]="-s") then streamIO(argv); -- stream in/out elsif (argv[1]="-testmode") then streamTestmode(argv); -- stream in/out else help_message(argv); end; else XLoop(argv); -- X main loop end; end; end;