SetDirectory["C:\\drorbn\\AcademicPensieve\\Projects\\HigherRank\\Data"];
Once[<<KnotTheory`];
<<../Rot.m
(Subscript[T, 3])=(Subscript[T, 1])(Subscript[T, 2]);

CCF[ℰ_] := ExpandDenominator@ExpandNumerator@Together[ℰ];
CCF[ℰ_] := Factor[ℰ];
CF[ℰ_List]:=CF/@ℰ;
CF[ℰ_] := Module[{vs=Cases[ℰ,(Subscript[(x|p|π|g), __]),∞]⋃{x,p,ϵ},ps,c},
Total[CoefficientRules[Expand[ℰ], vs] /. (ps_->c_) :> CCF[c](Times@@(vs^ps))] ];

(Subscript[R, 1])[1,i_,j_]=CF[
1/2-(Subscript[T, 3])(Subscript[g, 1,j,i])(Subscript[g, 2,j,i])-(Subscript[g, 3,i,i])+(Subscript[g, 2,j,j])(Subscript[g, 3,i,i])+(Subscript[T, 1])((Subscript[T, 3])-1)(Subscript[g, 1,j,i])(Subscript[g, 3,j,i])+(Subscript[T, 2])((Subscript[T, 3])-1)(Subscript[g, 2,j,i])(Subscript[g, 3,j,i])-(Subscript[T, 2])(Subscript[g, 2,j,i])(Subscript[g, 3,j,j])+((Subscript[g, 1,j,j])(Subscript[g, 2,i,i])+((Subscript[T, 3])-1)(Subscript[g, 1,j,j])(Subscript[g, 2,j,i])-(Subscript[T, 1])(Subscript[g, 1,i,i])(Subscript[g, 2,j,j])-(Subscript[g, 1,j,j])(Subscript[g, 3,i,i])-(Subscript[T, 1])((Subscript[T, 3])-1)(Subscript[g, 1,j,j])(Subscript[g, 3,j,i])+(Subscript[T, 1])(Subscript[g, 1,i,i])(Subscript[g, 3,j,j]))/((Subscript[T, 1])-1)];

(Subscript[R, 1])[-1,i_,j_]=CF[
-1/2-(Subscript[T, 1]^(-1))(Subscript[g, 1,j,i])(Subscript[g, 2,i,i])-(1-(Subscript[T, 1]^(-1))-(Subscript[T, 2]^(-1)))(Subscript[g, 1,j,i])(Subscript[g, 2,j,i])-(Subscript[g, 1,j,j])(Subscript[g, 2,j,i])-(Subscript[g, 1,j,i])(Subscript[g, 2,j,j])+(Subscript[g, 3,i,i])+(Subscript[T, 1]^(-1))(Subscript[g, 1,j,i])(Subscript[g, 3,i,i])-(1-(Subscript[T, 2]^(-1)))(Subscript[g, 2,j,i])(Subscript[g, 3,i,i])-(Subscript[g, 2,j,j])(Subscript[g, 3,i,i])+(1-(Subscript[T, 3]^(-1)))(Subscript[g, 1,j,i])(Subscript[g, 3,j,i])-(1-(Subscript[T, 3]^(-1)))(Subscript[g, 2,i,i])(Subscript[g, 3,j,i])+(2-(Subscript[T, 2]^(-1)))(1-(Subscript[T, 3]^(-1)))(Subscript[g, 2,j,i])(Subscript[g, 3,j,i])+(1-(Subscript[T, 3]^(-1)))(Subscript[g, 2,j,j])(Subscript[g, 3,j,i])+(Subscript[g, 1,j,i])(Subscript[g, 3,j,j])+(Subscript[g, 2,j,i])(Subscript[g, 3,j,j])+((Subscript[T, 1])(1-(Subscript[T, 2]^(-1)))(Subscript[g, 1,i,i])(Subscript[g, 2,j,i])-(Subscript[g, 1,j,j])(Subscript[g, 2,i,i])+(Subscript[T, 1])(Subscript[g, 1,i,i])(Subscript[g, 2,j,j])+(Subscript[g, 1,j,j])(Subscript[g, 3,i,i])-(Subscript[T, 2]^(-1))((Subscript[T, 3])-1)(Subscript[g, 1,i,i])(Subscript[g, 3,j,i])-(Subscript[T, 1])(Subscript[g, 1,i,i])(Subscript[g, 3,j,j]))/((Subscript[T, 1])-1)];

θ[{1,i0_,j0_},{1,i1_,j1_}]=-(Subscript[T, 1])((Subscript[T, 3])-1)(Subscript[g, 1,j1,i0])(Subscript[g, 2,i1,i0])(Subscript[g, 3,j0,i1])+((Subscript[T, 3])-1)(Subscript[g, 1,j1,j0])(Subscript[g, 2,i1,i0])(Subscript[g, 3,j0,i1])+(Subscript[T, 1])((Subscript[T, 3])-1)(Subscript[g, 1,j1,i0])(Subscript[g, 2,j1,i0])(Subscript[g, 3,j0,i1])-((Subscript[T, 3])-1)(Subscript[g, 1,j1,j0])(Subscript[g, 2,j1,i0])(Subscript[g, 3,j0,i1]);

θ[{1,i0_,j0_},{-1,i1_,j1_}]=((Subscript[T, 3])-1)(Subscript[g, 1,j1,i0])(Subscript[g, 2,i1,i0])(Subscript[g, 3,j0,i1])-(Subscript[T, 1]^(-1))((Subscript[T, 3])-1)(Subscript[g, 1,j1,j0])(Subscript[g, 2,i1,i0])(Subscript[g, 3,j0,i1])-((Subscript[T, 3])-1)(Subscript[g, 1,j1,i0])(Subscript[g, 2,j1,i0])(Subscript[g, 3,j0,i1])+(Subscript[T, 1]^(-1))((Subscript[T, 3])-1)(Subscript[g, 1,j1,j0])(Subscript[g, 2,j1,i0])(Subscript[g, 3,j0,i1]);

θ[{-1,i0_,j0_},{1,i1_,j1_}]=CF[
(Subscript[T, 1]^(-1))(Subscript[T, 2]^(-1))((Subscript[T, 3])-1)((Subscript[g, 1,j1,i0])(Subscript[g, 2,i1,i0])(Subscript[g, 3,j0,i1])-(Subscript[T, 1])(Subscript[g, 1,j1,j0])(Subscript[g, 2,i1,i0])(Subscript[g, 3,j0,i1])-(Subscript[g, 1,j1,i0])(Subscript[g, 2,j1,i0])(Subscript[g, 3,j0,i1])+(Subscript[T, 1])(Subscript[g, 1,j1,j0])(Subscript[g, 2,j1,i0])(Subscript[g, 3,j0,i1]))];

θ[{-1,i0_,j0_},{-1,i1_,j1_}]=CF[
(1-(Subscript[T, 3]^(-1))) (-(Subscript[T, 1]^(-1))(Subscript[g, 1,j1,i0]) (Subscript[g, 2,i1,i0]) (Subscript[g, 3,j0,i1])+(Subscript[g, 1,j1,j0]) (Subscript[g, 2,i1,i0]) (Subscript[g, 3,j0,i1])+(Subscript[T, 1]^(-1))(Subscript[g, 1,j1,i0]) (Subscript[g, 2,j1,i0]) (Subscript[g, 3,j0,i1])-(Subscript[g, 1,j1,j0]) (Subscript[g, 2,j1,i0]) (Subscript[g, 3,j0,i1]))];

(Subscript[Γ, 1])[φ_,k_]=-φ/2+φ (Subscript[g, 3,k,k]);

θ[K_]:=Module[{Cs,φ,n,A,s,i,j,k,Δ,G,ν,α,β,gEval,c,z},
{Cs,φ}=Rot[K]; n=Length[Cs];
A=IdentityMatrix[2n+1];
Cases[Cs,{s_,i_,j_}:>(A[[{i,j},{i+1,j+1}]]+=(({{-(T^s), (T^s)-1}, {0, -1}})))];
Δ=(T^((-Total[φ]-Total[Cs[[All,1]]])/2))Det[A];
G=Inverse[A]; gEval[ℰ_]:=Factor[ℰ/.(Subscript[g, ν_,α_,β_]):>(G[[α,β]]/.T->(Subscript[T, ν]))];
z=gEval[(∑_(k1=1)^n)(∑_(k2=1)^n)θ[Cs[[k1]],Cs[[k2]]]];
z+=gEval[(∑_(k=1)^n)(Subscript[R, 1])@@Cs[[k]]];
z+=gEval[(∑_(k=1)^(2n))(Subscript[Γ, 1])[φ[[k]],k]];
{Δ,(Δ/.T->(Subscript[T, 1]))(Δ/.T->(Subscript[T, 2]))(Δ/.T->(Subscript[T, 3]))z}//Factor ];

PolyPlot[0]=Graphics[{}];
PolyPlot[p_]:=Module[{crs,m1,m2,maxc,minc,s,hex},
crs=CoefficientRules[(Subscript[T, 1]^(m1=-Exponent[p,(Subscript[T, 1]),Min]))(Subscript[T, 2]^(m2=-Exponent[p,(Subscript[T, 2]),Min]))p,{(Subscript[T, 1]),(Subscript[T, 2])}];
maxc=N@Log@Max@Abs[Last/@crs];
minc=N@Log@Min@Select[Abs[Last/@crs],#>0&];
If[minc==maxc,s[_]=0,s[c_]:=s[c]=(maxc-Log@c)/(maxc-minc)];
hex=Table[{Cos[α],Sin[α]}/Cos[2π/12]/2, {α,2π/12,2π,2π/6}];
Graphics[crs/.({x1_,x2_}->c_):>{
If[c==0,White,Lighter[Which[
c>0∧OddQ[c],Orange,
c>0∧EvenQ[c],Red,
c<0∧OddQ[c],Green,
c<0∧EvenQ[c],Blue
], 0.88s[Abs@c]]],
Polygon[((({{1, -1/2}, {0, (Sqrt[3])/2}})).{x1+m1,x2+m2}+#)&/@hex] }] ];
PolyPlot[{Δ_,θ_}]:=PolyPlot[θ]

tab250={0}~Join~Table[θ[K][[2]], {K,AllKnots[{3,10}]}];
g250=GraphicsGrid[Partition[PolyPlot/@tab250,25],Spacings -> 0]

Table[n->NumberOfKnots[n], {n,3,15}]

θ[Knot[15,Alternating,20902]]

θ[Knot[15,Alternating,20903]]

θ[Knot[15,Alternating,20904]]

θ[Knot[15,Alternating,20905]]

θ[Knot[15,Alternating,20905]]//LeafCount

θ[Knot[15,Alternating,20905]] // ByteCount

(θ[Knot[15,Alternating,20905]]/. {(Subscript[T, 1])->T1,(Subscript[T, 2])->T2}) // ByteCount

AbsoluteTiming@Monitor[
Table[K->(θ[K]/.{(Subscript[T, 1])->T1,(Subscript[T, 2])->T2}),{K,AllKnots[{15,15}]}] >> "theta15-15.m",
K
]

AbsoluteTiming@Monitor[Table[K->HOMFLYPT[PD@K][a,z],{K,AllKnots[{3,15}]}] >> "HOMFLYPT3-15.m", K]

AbsoluteTiming@Monitor[Table[K->Kh[PD@K][q,t],{K,AllKnots[{3,15}]}] >> "Data/Kh3-15.m", K]