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(as a graphical tool): "+argv[0]+"\n"; #OUT+"Usage2(as a stream filter): "+argv[0]+" -s (options) < (knot_data)\n"; #OUT+"Usage3(as a command tool): "+argv[0]+" -if (input_file) (options)\n"; #OUT+"******* options for invariants *******\n"; #OUT+" -a Alexander polynomial\n"; #OUT+" -ai Alexander ideal\n"; #OUT+" -am multi variable Alexander ideal\n"; #OUT+" -c Conway polynomial\n"; #OUT+" -v [n] Jones polynomial(n-parallelized)\n"; #OUT+" -p [type] P(HOMFLY) polynomial. type=vz,lm,xyz. (vz by default)\n"; #OUT+" -f F polynomial\n"; #OUT+" -q Q polynomial\n"; #OUT+" -cyc test cyclic period using Alexander polynomial\n"; #OUT+" -cov [n] n-fold covering(n=2 by default) and twisted Alexander ideal\n"; #OUT+" -sl2 [n] representation to SL2(p) (p:prime,2 by default) and twisted Alexander ideal\n"; #OUT+" -grp knot group\n"; #OUT+" -kv Goeritz matrix and knot value\n"; #OUT+" -sign Signature\n"; #OUT+"******* options for conversions *******\n"; #OUT+" -alt alternate\n"; #OUT+" -mirror [axis] mirror. axis=x,y,z. (x by default)\n"; #OUT+" -rot rotate by 90\n"; #OUT+" -rotn rotate by -90\n"; #OUT+" -mag [m] m-magnify(m=2.0 by default)\n"; #OUT+"******* options for output data *******\n"; #OUT+" -knot knot data\n"; #OUT+" -braid braid\n"; #OUT+" -ndata n-data\n"; #OUT+" -picture [s] [width [height]] LaTeX picture. s for smooth curve. Measure by millimeter\n"; end; inits is --- polynomial -- POLYS_INTI::init; POLYM_INTI::init; -- knot inout -- VERTEXC::setShareds; K::Knot:=#KNOT; K::Knot.NoCompo0; end; XLoop(argv:ARRAY{STR}) is -- call X main loop KNOTX::init; --KNOTX::CurrentEditMode:=1; KNOTX::TrackEventK(-1,0.int,0.int,0.int); KNOTXW::knotXProc(argv.size,argv.array_ptr); end; Testmode(argv:ARRAY{STR}) is -- use as: knot -test -- K::Knot:=KNOT_TEST::trifoil; -- for test loop e:CARD:=16.upto!(50); i1::=2.inti.pow(e)+2.inti.pow(15)+1.inti; r1::=i1.fltd; i2::=r1.round.inti; #OUT+i1.str+":"+i2.str+":"+(i1-i2).str; if (i1-i2).is_non_zero then #OUT+" --------- ! ---------"; end; #OUT+"\n"; end; end; streamIO(argv:ARRAY{STR}) is -- 0: prog. name, 1: -s, 2..: options argPos:CARD:=1; out_s::=OUTSTREAM::stdout; in_s::=INSTREAM::stdin; -- STD_CHANS::stdout;, STD_CHANS::stdin; -- read knot if argv.has_ind(argPos) and argv[argPos]="-s" then argPos:=argPos+1; in_s:=INSTREAM::stdin; end; if argv.has_ind(argPos) and argv[argPos]="-if" then argPos:=argPos+1; if argv.has_ind(argPos).not then help_message(argv); return; end; #LOGOUT+"\ninput_file: "+argv[argPos]+"\n\n"; in_s:=#INSTREAM(argv[argPos]); argPos:=argPos+1; end; if argv.has_ind(argPos).not then help_message(argv); return; end; if in_s.error then return; end; if KNOTFIO::ReadKnotNS(out K::Knot, in_s).not then return; end; if K::Knot.is_nocompo then #OUT+"Knot data have no component.\n"; return; end; if K::Knot.is_Closed.not then #OUT+"Knot data is not closed.\n"; return; end; K::Knot.CrossSet(0.int,K::Knot.length.int); tcode:TCODE; reply:INT:=0; replyb:BOOL:=true; loop while!(argv.has_ind(argPos)); func:STR:=argv[argPos]; argPos:=argPos+1; if K::Knot.SetTCode(out tcode).not then return; end; -- tcode.get_Relator(tcode); case func ----- ----- test ----- when "-test" then #OUT+"test: write knot\n"; replyb:=KNOTFIO::WriteKnotS(K::Knot,out_s,true,true,""); ----- ----- invariants ----- 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 argv.has_ind(argPos) 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) then #OUT+"arg:"+argv[argPos]+":" -- +.str+"\n"; -- end; if argv.has_ind(argPos) and argv[argPos].cursor.get_char.is_digit and CARD::is_card(argv[argPos]) then n:=#INT(argv[argPos]); argPos:=argPos+1; end; if n>=2.int 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:CARD:=2; -- covering fold >=2 if argv.has_ind(argPos) and argv[argPos].cursor.get_char.is_digit and CARD::is_card(argv[argPos]) then n:=CARD::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:INT:=2.int; form::=1; twistAlex::=1; --0/1 if argv.has_ind(argPos) and argv[argPos].cursor.get_char.is_digit and CARD::is_card(argv[argPos]) then base:=INT::create(argv[argPos]); argPos:=argPos+1; end; #REP_SL2P.RepSearch(tcode,base.int,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); when "-sign" then SIGNATURE::Signature(tcode); ----- ----- conversions ----- when "-alt" then -- alternate ALTERNATE::Alternate(inout K::Knot); if K::Knot.SetTCode(out tcode) then -- tcode.get_Relator(tcode); else return; end; when "-mirror" then -- mirror-x -- format: -mirror [x|y|z] if argv.has_ind(argPos) then case argv[argPos] when "x" then K::Knot.mirrorX; argPos:=argPos+1; when "y" then K::Knot.mirrorY; argPos:=argPos+1; when "z" then K::Knot.mirrorZ; argPos:=argPos+1; else K::Knot.mirrorX; -- x,y,z end end; if K::Knot.SetTCode(out tcode) then -- tcode.get_Relator(tcode); else return; end; when "-mag" then -- magnify -- format: -mag [scaling] if K::Knot.is_nocompo then #OUT+"Knot data is not specified.\n"; return; end; mag:FLT:=2.0; -- 2 by default if argv.has_ind(argPos) and FLT::is_real(argv[argPos])=CONVERSION_RESULTS::All_Right 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.int,-1,1.int,0.int); when "-rotn" then K::Knot.transform(0.int,1.int,-1,0.int); ----- ----- 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,""); when "-picture" then -- LaTeX picture -- format: -picture [width(mm) [height(mm)]] smooth:BOOL:=false; if argv.has_ind(argPos) and argv[argPos]="s" then smooth:=true; argPos:=argPos+1; end; pw:INT:=120; if argv.has_ind(argPos) and argv[argPos].cursor.get_char.is_digit and CARD::is_card(argv[argPos]) then pw:=INT::create(argv[argPos]); argPos:=argPos+1; end; ph:INT:=pw; if argv.has_ind(argPos) and argv[argPos].cursor.get_char.is_digit and CARD::is_card(argv[argPos]) then ph:=INT::create(argv[argPos]); argPos:=argPos+1; end; -- width, height, margin, scalingMode:INT DRAWKNOT_PIC_ALG::DrawKnotPic(K::Knot, pw, ph, 0.int, 1.int, smooth); else #OUT+" Unknown option "+func+"\n"; help_message(argv); return; end; out_s+"\n"; end; end; main(argv:ARRAY{STR}) is inits; if (argv.size>=2) then if (argv[1]="-test") then Testmode(argv); elsif (argv[1]="-s") then streamIO(argv); elsif (argv[1]="-if") then streamIO(argv); else help_message(argv); end; else XLoop(argv); end; end; end;