From 8c8654c4560bef299f111b9a070c864fe93905bc Mon Sep 17 00:00:00 2001 From: Maria Date: Thu, 15 Jul 2021 13:48:37 +0200 Subject: [PATCH] fix problems with import_sage --- {cagosig => gaknot}/__init__.py | 8 +- gaknot/__pycache__/__init__.cpython-38.pyc | Bin 0 -> 1602 bytes .../cable_signature.cpython-38.pyc | Bin 0 -> 22691 bytes gaknot/__pycache__/main.cpython-38.pyc | Bin 0 -> 4240 bytes gaknot/__pycache__/signature.cpython-38.pyc | Bin 0 -> 13178 bytes gaknot/__pycache__/utility.cpython-38.pyc | Bin 0 -> 1571 bytes {cagosig => gaknot}/cable_signature.sage | 5 +- gaknot/clean.sh | 5 + gaknot/main.py | 278 +++++++++++++ {cagosig => gaknot}/main.sage | 18 +- gaknot/signature.py | 385 ++++++++++++++++++ {cagosig => gaknot}/signature.sage | 12 +- {cagosig => gaknot}/utility.py | 0 13 files changed, 696 insertions(+), 15 deletions(-) rename {cagosig => gaknot}/__init__.py (92%) create mode 100644 gaknot/__pycache__/__init__.cpython-38.pyc create mode 100644 gaknot/__pycache__/cable_signature.cpython-38.pyc create mode 100644 gaknot/__pycache__/main.cpython-38.pyc create mode 100644 gaknot/__pycache__/signature.cpython-38.pyc create mode 100644 gaknot/__pycache__/utility.cpython-38.pyc rename {cagosig => gaknot}/cable_signature.sage (99%) create mode 100755 gaknot/clean.sh create mode 100644 gaknot/main.py rename {cagosig => gaknot}/main.sage (96%) create mode 100644 gaknot/signature.py rename {cagosig => gaknot}/signature.sage (99%) rename {cagosig => gaknot}/utility.py (100%) diff --git a/cagosig/__init__.py b/gaknot/__init__.py similarity index 92% rename from cagosig/__init__.py rename to gaknot/__init__.py index 91283f9..bf34a8a 100644 --- a/cagosig/__init__.py +++ b/gaknot/__init__.py @@ -45,9 +45,9 @@ So we can work in the following steps: from .utility import import_sage import os - -package = __name__.split('.')[0] -path = os.path.dirname(__file__) -import_sage('signature', package=package, path=path) +# +# package = __name__.split('.')[0] +# path = os.path.dirname(__file__) +# import_sage('signature', package=package, path=path) # import_sage('cable_signature', package=package, path=path) # import_sage('main', package=package, path=path) diff --git a/gaknot/__pycache__/__init__.cpython-38.pyc b/gaknot/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..14ef154247053baa3057a238b73da2bef7ff6e7b GIT binary patch literal 1602 zcma)6&5qkP5SG20reK>l=wW~Yft7mg+S?$2n-*R4luIw!Uc6Yav^2H|Q>0B&Huh!V5DI6b(l$V$Owkw>wWEz& zLeML#V&f5(jV)U7(s@{07Xu6mwJ->wsY5P=co#|E!UDlJ7E}NQfvtza>rI5EcQwQc zA)>FfRR+jV6R-qr=_RQm4?Bd~l{gaOCV4q?k^_Z|wxHv(HE(o?u&oM(VLWn@ZDk|AjuV`OJ%@Y(FBerLh|-@L>eJ?9lL%wQsJjOjMh z>Ff5CLX8Bus~1%B#GsiNd_RQaOO8|U0WaxmZsU{cL`qhz08_f}p`57|28k za!i#cQjFWG6W0`!+G7!!xc{z92iGIKY)Z9URF;UxF;Paz(U7arT@@>gkAO=Rn zG&ow!*LV7!d(|V266)0yY;ZNgR_YUQsci)deuC+%r1Bk1M&iBWBzcgeM5$hh11VJo zD@5FcnV96%H_j3Ir}W3C7#0uQQg+3+SvOUR8;v{u6sefz5HPj@a}OffT(WF$WHXcp(a!&jOp=!qHBq#sC>{gz)I zo=ZstkaGUKiQ4G+;CX}}`Y!yHd7AL;^3P;k5pLsJd9B7BIXhmBSBjGwOR24nQjRtc XhcDmK0BsEZd_h*iB`ue)zV3Yjd)DxS literal 0 HcmV?d00001 diff --git a/gaknot/__pycache__/cable_signature.cpython-38.pyc b/gaknot/__pycache__/cable_signature.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5129b547b6c17a04d8a8891895b5f0725da96c5e GIT binary patch literal 22691 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 literal 0 HcmV?d00001 diff --git a/gaknot/__pycache__/main.cpython-38.pyc b/gaknot/__pycache__/main.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..407aaae912cf400a5334803c55c83457079b5172 GIT binary patch literal 4240 zcmbtXTXWmS6~+P}0D>3EvTVzVW7COmOns9aC%vSpQl-gwrd2azb=pGJAP^U%L4hE> z0PRXc_QjcLAL@>OKpy0oyeR*ned@2+_N`BT>vJDE{mz1-NLtEdroiBw-Lq$J=X~ev z;#ZZ5tKoT}{o{+~HBI{$RVJSTDy#U?Rir5s`#8Yr}(^gO7R76f$O{!pYAMri%bj8 z?4RZ3mn_uJYu>rA)Lz;@AHMODc}wA&;nFh(jYVGJ)o_W=JvY1ysLhXSZ+)imQ+(k| zjW0aYy^H)Eewr_S$-GPa3O~!wp;Y5n`4T^m(q(>)zsWD4^ftfF-{KchdM7kOx2ZQ7 zzr<^(UkT6f%RBlDCO+hEhgY9zI~JA0OJTWvjn&a6pbkUhL1Tv$%wCW^ z^5z=Bb{zU+%?8GrdT9PteCZXCQ1jqZPv`I^*FBRPUV)pQ#S5OzEzjXLR_{prVdGKQ z3DUhUHaBaB&(7xkt(&#l&gQ)>@Ui^X&gL@eVAJxWZX-D~-pdu=AM0}rh&jd zn3`ZT5W3IEcQ$FD*Y%-EE6qD>?X7LrFvaxR(RTcz$Gd>W=GGgHMP53=sbeuru#$JmwJ{?N0!Csmh_}}3Md|o{ z5_Ce}m#*)3y1WmF`m*f%kNZKKw|MjEBLe$9KMr<7k@~@Fl5JT@6%c);x;$N7k>$x& zx!COXg`f62ogm?kt?;d4B}MH!stD%S{f8shYy8z5#JiVbQNT8KGOzT#?B*w4%x4@vc;SQIg4u$_IX& ztXZ10^FD2XcC0a-&9epOGK&dH9vclxV}}o=FG^-=%YQ;)z}naZC>t7}`p^V5hK0;* z7X~J0&)Lu#So_vXY<*z0?V+7H1DqF31Gn16wyVmdtq-(;&GqL-yEt@Ie`7*YRFX*@ zci`@qXk2AFWBq{1GNntu*%h6B92^*e94YN5q1f)Gp>!VmPr^pl74@<>gBEd?$T=cQ zq^LJiSy`jZx)FAIagc?w(v0HRKkO&!q*mw&@=!t9T+XX0d6+gt)FVK7=Xx;~0i<;T zTFMxl^^&+ja}mO3=J!e?P!pPEHTPzAxCjIDOG^otM|?%xrcuTy&s}*&t!!dy)#ne; zOmBi{x&^P|)yvEQcUT!zXZn8~bA}hhd(fXkJE6nEr(FLx6fzA?XP`PztikC zA;K)_ceX|w0(*gqjtPoh9Kwt$3td0;^ z1p?>V^T!}??llC?4GDp#vV}4J4$FkTZ-BmUvg#Op)e-utK%YHA-wL5m+{Z@h`I$14 z3yz>5z7HkwLy&3z-Jh<0Agfb{#qv!3-ia6zKcKM-3cBJ)G}%l-Iok}M`gt~@W2M{A zP>UOXh3cexb-0%;p5$J$jFypme~O+{-gO`tA1E;@-|k&_%0gbT2P(c*zM*_kP{)Qd zw8n?Tp#)i{4IFSoWgh#etPTw`&jBjr#rv2YIr^CNJmC^L0VX1m3@ARPj?Rf8H4{6t zHm;@}L@nhXW$1rmu(Sp;3LS%TG-Yd*r;S5iW`Yv&lr71QCO(y+2|JmF8wSf@p}%N| zf-7`T@9P8oB@XM%Xw#u<TVJZtENbvh%^%E3! zltH}m8l9C7^ShTbHyI}>{JY>_tQWkJ8q3f6y%>KypGy{rPq13a zf?3;KS4SzXcDvs?a{6y{Pu0IJ3{}SErOL$5X-Hg2>3V}}C`vfXaUrEkmcD@vZq(VQ zM6b(v`uDm`xwFyXag>D8evo8gD-_<;J?yTyfI*MKQv8^z9})QpkyQ|HIvDRty_-rS z-A!dN%0iKKyD>5-AnG`yo1z_9PvL>Nb@rQ literal 0 HcmV?d00001 diff --git a/gaknot/__pycache__/signature.cpython-38.pyc b/gaknot/__pycache__/signature.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3c4564aecd55d7010b56fbf7a9f663834512c66e GIT binary patch literal 13178 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 hM*i4SrT{I4YzqebWgTH$4QC_zTIArE zVzVviyHJ0JTJ^!yM3XhG$%ft{Fo!O`w>gyG)X6-Tg??fYMp9nP^CPKj;I-6qRs87G zW64JsQeWaqv3nC7#otbWX_(i8cF=cP!>LjL-g-{TL5kD}eK z0CxW6q5J=5?4>myY}bsKar0DrHZJb#a~2ukd?Fh!*Q9*VVD7mv?%p(uCr;T7lYZt1lv0Vm{|sf^cDJs93#2sr3DTMpdsKJI5m)cldK$Q z8MJOqg>%|ckB}DO3a_RcXXR-&an^3lYH!0nlUK zEniux{>*13(yzFZ(=rwO5GZ~Lc}AA!KtBJF0hlQXGN~lb8l51!e3VTkmmjlA5A0fJ z-T>ogp=}_|2TS&L0QK$Jo}IA2zgy?iYT3!(^G_@IBO!DEj0Usx_!L%%dWI=!oN9h# zSXmi&hQzy*GAoRqRk*M5t3{<{Zv0WHKo>B0QCV8?(598ydrh+=<2M&Gy(W}2_ljDk z(|Add=2G>5Ty+(UY2i_A&~#=CJuV9i;v0B~WTeVG*&efrH{-E0J|Az7d%ipZE7QiH zoJ?nX7ToF<1S$@Ocp(j0Nc*(Upn~nvD|8PcUDgIq-Gwoi-UoaecJdqp&}2f_OgkI8 zqSgn2Hj=eM#NH+X;)RHFVT@xV_`Z0;UHdgi%*qb22N)#Z$WGwP;~yyeHWa>-O9u#4 z9rVI;N~1ts!G4?3Kx7J&Y{Dc#?vh09Vdph8*TF=tx($tSV4%8#(Vx-aw|yaLZL7cp zbM_E=sxBD9x@?cak3oKZ0UWUd6=EAIOl)(C8|dNtsqj;`AG%GZopE6syP+j0eA=|@9}BOxZ~q6L8-7~= literal 0 HcmV?d00001 diff --git a/cagosig/cable_signature.sage b/gaknot/cable_signature.sage similarity index 99% rename from cagosig/cable_signature.sage rename to gaknot/cable_signature.sage index 9ff496e..efc0f04 100644 --- a/cagosig/cable_signature.sage +++ b/gaknot/cable_signature.sage @@ -8,9 +8,12 @@ from typing import Iterable from collections import Counter from sage.arith.functions import LCM_list import importlib -from .utility import import_sage, mod_one + + +from .utility import import_sage from . import signature as sig + SIGMA = 0 SIGNATURE = 1 diff --git a/gaknot/clean.sh b/gaknot/clean.sh new file mode 100755 index 0000000..aeffd56 --- /dev/null +++ b/gaknot/clean.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +rm cable_signature.py +rm signature.py +rm main.py diff --git a/gaknot/main.py b/gaknot/main.py new file mode 100644 index 0000000..17854af --- /dev/null +++ b/gaknot/main.py @@ -0,0 +1,278 @@ + + +# This file was *autogenerated* from the file /home/maria/signature_function/gaknot/main.sage +from sage.all_cmdline import * # import sage library + +_sage_const_0 = Integer(0); _sage_const_1 = Integer(1); _sage_const_2 = Integer(2); _sage_const_3 = Integer(3); _sage_const_5 = Integer(5); _sage_const_7 = Integer(7); _sage_const_11 = Integer(11); _sage_const_13 = Integer(13); _sage_const_10 = Integer(10)#!/usr/bin/env sage -python + +# TBD: read about Factory Method, variable in docstring, sage documentation, +# print calc. to output file +# decide about printing option +# make __main__? + +import os +import sys + +import itertools as it +import re +import numpy as np +import importlib +from .utility import import_sage +# from . import signature as sig +# from . import cable_signature as cs + +package = __name__.split('.')[_sage_const_0 ] +path = os.path.dirname(__file__) +print(path) + +sg = import_sage('signature', package='gaknot', path=path) +cs = import_sage('cable_signature', package='gaknot', path=path) + + + + +# class Config: +# def __init__(self): +# self.f_results = os.path.join(os.getcwd(), "results.out") + +class Schemas: + + + # knot_formula = "[[k[0], k[1], k[2]],\ + # [ k[3], k[4]],\ + # [-k[0], -k[3], -k[4]],\ + # [ -k[1], -k[2]]]" + # + # knot_formula = "[[k[0], k[1], k[2]],\ + # [ k[3]],\ + # [-k[0], -k[1], -k[3]],\ + # [ -k[2]]]" + + + short_3_layers_a = "[[ k[5], k[3]], " + \ + "[ -k[1], -k[3]], " + \ + "[ k[3]], " + \ + "[ -k[4], -k[6], -k[3]]]" + + short_3_layers_b = "[[k[4], k[1], k[7]], " + \ + "[ -k[7]], " + \ + "[ k[6], k[7]], " + \ + "[ -k[5], -k[7]]]" + + schema_short1 = "[ [k[5], k[3]], " + \ + "[ -k[1], -k[3]], " + \ + "[ k[3]], " + \ + "[ -k[6], -k[3]]]" + + schema_short2 = "[[ k[1], k[7]], " + \ + "[ -k[7]], " + \ + "[ k[6], k[7]], " + \ + "[ -k[5], -k[7]]]" + + schema_short = "[[ k[5], k[3]], " + \ + "[ -k[1], -k[3]], " + \ + "[ k[3]], " + \ + "[ -k[6], -k[3]], " + \ + "[ k[1], k[7]], " + \ + "[ -k[7]], " + \ + "[ k[6], k[7]], " + \ + "[ -k[5], -k[7]]]" + + # two_summands_schema = "[ [k[0], k[1], k[4]], [-k[1], -k[3]],\ + # [k[2], k[3]], [-k[0], -k[2], -k[4]] ]" + # two_small_summands_schema = "[[k[3]], [-k[3]],\ + # [k[3]], [-k[3]] ]" + # + # four_summands_schema = "[[k[3], k[2], k[0]],\ + # [ -k[2], -k[0]],\ + # [ k[1], k[0]],\ + # [-k[3], -k[1], -k[0]]]" + # + four_summands_schema = "[[ k[0], k[1], k[3]]," + \ + "[ -k[1], -k[3]]," + \ + "[ k[2], k[3]]," + \ + "[ -k[0], -k[2], -k[3]]]" + + # formula_1 = "[[ k[0], k[5], k[3]], " + \ + # "[ -k[1], -k[3]], " + \ + # "[ k[2], k[3]], " + \ + # "[ -k[0], -k[2], -k[3]]]" + # + # formula_2 = "[[ k[4], k[1], k[7]], " + \ + # "[ -k[5], -k[7]], " + \ + # "[ k[6], k[7]], " + \ + # "[ -k[4], -k[6], -k[7]]]" + # + # formula_1 = "[[ k[0], k[5], k[3]], " + \ + # "[ -k[5], -k[3]], " + \ + # "[ k[2], k[3]], " + \ + # "[-k[4], -k[2], -k[3]]]" + # + # formula_2 = "[[ k[4], k[1], k[7]], " + \ + # "[ -k[1], -k[7]], " + \ + # "[ k[6], k[7]], " + \ + # "[-k[0], -k[6], -k[7]]]" + + +def main(arg=None): + try: + limit = int(arg[_sage_const_1 ]) + except (IndexError, TypeError): + limit = None + conf = Config() + cable_loop_with_details(conf) + + +def print_sigma_for_cable(verbose=True, Schemas=None): + + schema_short1 = Schemas.schema_short1 + schema_short2 = Schemas.schema_short2 + schema_short = Schemas.schema_short + schema_four = Schemas.four_summands_schema + + cable_template = cs.CableTemplate(knot_formula=schema_short) + cable_template.fill_q_vector() + q_v = cable_template.q_vector + print(q_v) + print(cable_template.cable.knot_description) + cable1 = cs.CableTemplate(knot_formula=schema_short1, + verbose=verbose, + q_vector=q_v + ).cable + cable2 = cs.CableTemplate(knot_formula=schema_short2, + verbose=verbose, + q_vector=q_v + ).cable + cable = cs.CableTemplate(knot_formula=schema_short1, + verbose=verbose, + q_vector=q_v + ).cable + + cable.plot_sigma_for_summands() + # cable1.plot_sigma_for_summands() + # cable2.plot_sigma_for_summands() + + +def cable_loop_with_details(verbose=True): + # verbose = False + schema_short1 = Schemas.schema_short1 + schema_short2 = Schemas.schema_short2 + schema_short = Schemas.schema_short + cable_template = cs.CableTemplate(knot_formula=schema_short) + + list_of_q_vectors = [] + # for el in [2, 3, 5, 7, 11, 13]: + for el in [_sage_const_2 ]: + cable_template.fill_q_vector(lowest_number=el) + q_v = cable_template.q_vector + print(q_v) + print(cable_template.cable.knot_description) + cable1 = cs.CableTemplate(knot_formula=schema_short1, + verbose=verbose, + q_vector=q_v + ).cable + cable2 = cs.CableTemplate(knot_formula=schema_short2, + verbose=verbose, + q_vector=q_v + ).cable + # print("\n") + # print(cable1.knot_description) + is_1 = cable1.is_function_big_for_all_metabolizers(invariant=cs.SIGMA) + is_2 = cable2.is_function_big_for_all_metabolizers(invariant=cs.SIGMA) + if is_1 and is_2: + print("sigma is big for all metabolizers") + else: + print("sigma is not big for all metabolizers") + print("\n" * _sage_const_3 ) + + +def few_cable_without_calc(verbose=False): + + schema_short1 = Schemas.schema_short1 + schema_short2 = Schemas.schema_short2 + schema_short = Schemas.schema_short + + cable_template = cs.CableTemplate(knot_formula=schema_short) + + list_of_q_vectors = [] + for el in [_sage_const_2 , _sage_const_3 , _sage_const_5 , _sage_const_7 , _sage_const_11 , _sage_const_13 ]: + cable_template.fill_q_vector(lowest_number=el) + q_v = cable_template.q_vector + print(q_v) + print(cable_template.cable.knot_description) + cable1 = cs.CableTemplate(knot_formula=schema_short1, + verbose=verbose, + q_vector=q_v + ).cable + cable2 = cs.CableTemplate(knot_formula=schema_short2, + verbose=verbose, + q_vector=q_v + ).cable + is_1 = cable1.is_function_big_for_all_metabolizers(invariant=sigma) + is_2 = cable2.is_function_big_for_all_metabolizers(invariant=sigma) + if is_1 and is_2: + print("sigma is big for all metabolizers") + else: + print("sigma is not big for all metabolizers") + print("\n" * _sage_const_3 ) + + +def smallest_cable(verbose=True): + + schema_short1 = Schemas.schema_short1 + schema_short2 = Schemas.schema_short2 + schema_short = Schemas.schema_short + + + cable_template = cs.CableTemplate(knot_formula=schema_short) + q_v = cable_template.q_vector + print(q_v) + cable1 = cs.CableTemplate(knot_formula=schema_short1, + verbose=verbose, + q_vector=q_v).cable + cable2 = cs.CableTemplate(knot_formula=schema_short2, + verbose=verbose, + q_vector=q_v).cable + cable1.is_function_big_for_all_metabolizers(invariant=sigma) + cable2.is_function_big_for_all_metabolizers(invariant=sigma) + + +def plot_many_untwisted_signature_functions(range_tuple=(_sage_const_1 , _sage_const_10 )): + P = Primes() + for i in range(*range_tuple): + q = P.unrank(i) + a = cs.CableSummand.get_untwisted_signature_function(q=q) + a.plot() + + +if __name__ == '__main__': + if '__file__' in globals(): + # skiped in interactive mode as __file__ is not defined + main(sys.argv) + else: + pass + # main() + + +# formula_long = "[[k[0], k[5], k[3]], " + \ +# "[-k[5], -k[3]], " + \ +# "[k[2], k[3]], " + \ +# "[-k[4], -k[2], -k[3]]" + \ +# "[k[4], k[1], k[7]], " + \ +# "[-k[1], -k[7]], " + \ +# "[k[6], k[7]], " + \ +# "[-k[0], -k[6], -k[7]]]" +# +# +# formula_1 = "[[k[0], k[5], k[3]], " + \ +# "[-k[1], -k[3]], " + \ +# "[ k[3]], " + \ +# "[-k[4], -k[6], -k[3]]]" +# +# formula_2 = "[[k[4], k[1], k[7]], " + \ +# "[ -k[7]], " + \ +# "[k[6], k[7]], " + \ +# "[-k[0], -k[5], -k[7]]]" +# +# + diff --git a/cagosig/main.sage b/gaknot/main.sage similarity index 96% rename from cagosig/main.sage rename to gaknot/main.sage index 377b31b..30ccec6 100644 --- a/cagosig/main.sage +++ b/gaknot/main.sage @@ -12,12 +12,20 @@ import itertools as it import re import numpy as np import importlib -from .utility import import_sage -from . import signature as sig -from . import cable_signature as cs -package = __name__.split('.')[0] -path = os.path.dirname(__file__) + +if __name__ == '__main__': + from utility import import_sage + package = None + path = '' + +else: + from .utility import import_sage + package = os.path.join( __name__.split('.')[0]) + path = '../' +sg = import_sage('signature', package=package, path=path) +cs = import_sage('cable_signature', package=package, path=path) + diff --git a/gaknot/signature.py b/gaknot/signature.py new file mode 100644 index 0000000..a6292da --- /dev/null +++ b/gaknot/signature.py @@ -0,0 +1,385 @@ + + +# This file was *autogenerated* from the file /home/maria/signature_function/gaknot/signature.sage +from sage.all_cmdline import * # import sage library + +_sage_const_0 = Integer(0); _sage_const_1 = Integer(1); _sage_const_2 = Integer(2); _sage_const_36 = Integer(36); _sage_const_10 = Integer(10); _sage_const_5 = Integer(5); _sage_const_0p3 = RealNumber('0.3'); _sage_const_0p7 = RealNumber('0.7'); _sage_const_0p05 = RealNumber('0.05'); _sage_const_4 = Integer(4); _sage_const_3 = Integer(3)#!/usr/bin/env sage -python + +from collections import Counter +import matplotlib.pyplot as plt +import inspect +from PIL import Image +from pathlib import Path +import warnings +from .utility import mod_one + +# 9.11 (9.8) +# 9.15 (9.9) +import sys +import os + + +JUPYTER = 'ipykernel' +IPy_TERMINAL = 'IPython' + +def get_ipython_info(): + if JUPYTER in sys.modules: + return JUPYTER + elif IPy_TERMINAL in sys.modules: + return IPy_TERMINAL + return False + +global ipython_info +ipython_info = get_ipython_info() + + +class SignatureFunction: + + def __init__(self, values=None, counter=None, plot_title=''): + + # counter of signature jumps + if counter is None: + counter = Counter() + values = values or [] + for k, v in values: + counter[k] += v + + counter = Counter({k : v for k, v in counter.items() if v != _sage_const_0 }) + if any(k >= _sage_const_1 for k in counter.keys()): + msg = "Signature function is defined on the interval [0, 1)." + raise ValueError(msg) + + counter[_sage_const_0 ] += _sage_const_0 + counter[_sage_const_1 ] += _sage_const_0 + self.jumps_counter = counter + self.plot_title = plot_title + + def __rshift__(self, shift): + # A shift of the signature functions corresponds to the rotation. + counter = Counter({mod_one(k + shift) : v \ + for k, v in self.jumps_counter.items()}) + return SignatureFunction(counter=counter) + + def __lshift__(self, shift): + return self.__rshift__(-shift) + + def __neg__(self): + counter = Counter() + counter.subtract(self.jumps_counter) + return SignatureFunction(counter=counter) + + def __add__(self, other): + counter = copy(self.jumps_counter) + counter.update(other.jumps_counter) + if self.plot_title and other.plot_title: + title = self.plot_title + " + " + other.plot_title + else: + title = self.plot_title or other.plot_title + return SignatureFunction(counter=counter, plot_title=title) + + def __sub__(self, other): + counter = copy(self.jumps_counter) + counter.subtract(other.jumps_counter) + return SignatureFunction(counter=counter) + + def __mul__(self, number): + # scalar multiplication + counter = Counter({k : number * v \ + for k, v in self.jumps_counter.items()}) + return SignatureFunction(counter=counter) + + def __rmul__(self, number): + return(self.__mul__(number)) + + def __eq__(self, other): + return self.jumps_counter == other.jumps_counter + + def __str__(self): + result = ''.join([str(jump_arg) + ": " + str(jump) + "\n" + for jump_arg, jump in sorted(self.jumps_counter.items())]) + return result + + def __repr__(self): + result = ''.join([str(jump_arg) + ": " + str(jump) + ", " + for jump_arg, jump in sorted(self.jumps_counter.items())]) + return result[:-_sage_const_2 ] + "." + + def __call__(self, arg): + # return the value of the signature function at the point arg, i.e. + # sum of all signature jumps that occur before arg + items = self.jumps_counter.items() + result = [jump for jump_arg, jump in items if jump_arg < mod_one(arg)] + return _sage_const_2 * sum(result) + self.jumps_counter[arg] + + def double_cover(self): + # to read values for t^2 + items = self.jumps_counter.items() + counter = Counter({(_sage_const_1 + k) / _sage_const_2 : v for k, v in items}) + counter.update(Counter({k / _sage_const_2 : v for k, v in items})) + return SignatureFunction(counter=counter) + + def square_root(self): + # to read values for t^(1/2) + counter = Counter() + for jump_arg, jump in self.jumps_counter.items(): + if jump_arg < _sage_const_1 /_sage_const_2 : + counter[_sage_const_2 * jump_arg] = jump + return SignatureFunction(counter=counter) + + def minus_square_root(self): + # to read values for t^(1/2) + items = self.jumps_counter.items() + counter = Counter({mod_one(_sage_const_2 * k) : v for k, v in items if k >= _sage_const_1 /_sage_const_2 }) + return SignatureFunction(counter=counter) + + def is_zero_everywhere(self): + return not any(self.jumps_counter.values()) + + def extremum(self, limit=math.inf): + max_point = (_sage_const_0 , _sage_const_0 ) + current = _sage_const_0 + items = sorted(self.jumps_counter.items()) + for arg, jump in items: + current += _sage_const_2 * jump + assert current == self(arg) + jump + if abs(current) > abs(max_point[_sage_const_1 ]): + max_point = (arg, current) + if abs(current) > limit: + break + return max_point + + def total_sign_jump(self): + # Total signature jump is the sum of all jumps. + return sum([j[_sage_const_1 ] for j in sorted(self.jumps_counter.items())]) + + def plot(self, *args, **kargs): + SignaturePloter.plot(self, *args, **kargs) + + +class SignaturePloter: + + @classmethod + def plot_many(cls, *sf_list, save_path=None, title='', cols=None): + + axes_num = len(sf_list) + if axes_num > _sage_const_36 : + sf_list = sf_list[_sage_const_36 ] + axes_num = _sage_const_36 + msg = "To many functions for the plot were given. " + msg += "Only 36 can be plotted " + warnings.warn(msg) + + # print war, set val in conf + cols = cols or ceil(sqrt(axes_num)) + rows = ceil(axes_num/cols) + fig, axes_matrix = plt.subplots(rows, cols, + sharex='col', sharey='row', + gridspec_kw={'hspace': _sage_const_0 , 'wspace': _sage_const_0 }, + # sharey=True, + # sharex=True, + ) + for i, sf in enumerate(sf_list): + col = i % cols + row = (i - col)/cols + sf.plot(subplot=True, + ax=axes_matrix[row][col], + title=sf.plot_title) + + fig.suptitle(title) + plt.tight_layout() + + cls.show_and_save(save_path) + + @classmethod + def plot_sum_of_two(cls, sf1, sf2, save_path=None, title=''): + + sf = sf1 + sf2 + fig, axes_matrix = plt.subplots(_sage_const_2 , _sage_const_2 , sharey=True, figsize=(_sage_const_10 ,_sage_const_5 )) + + sf1.plot(subplot=True, + ax=axes_matrix[_sage_const_0 ][_sage_const_1 ]) + + sf2.plot(subplot=True, + ax=axes_matrix[_sage_const_1 ][_sage_const_0 ], + color='red', + linestyle='dotted') + + sf.plot(subplot=True, + ax=axes_matrix[_sage_const_0 ][_sage_const_0 ], + color='black') + + sf1.plot(subplot=True, + ax=axes_matrix[_sage_const_1 ][_sage_const_1 ], + alpha=_sage_const_0p3 ) + + sf2.plot(subplot=True, + ax=axes_matrix[_sage_const_1 ][_sage_const_1 ], + color='red', alpha=_sage_const_0p3 , + linestyle='dotted') + + sf.plot(subplot=True, + ax=axes_matrix[_sage_const_1 ][_sage_const_1 ], + color='black', + alpha=_sage_const_0p7 ,) + + fig.suptitle(title) + plt.tight_layout() + + cls.show_and_save(save_path) + + @classmethod + def plot(cls, sf, subplot=False, ax=None, + save_path=None, + title='', + alpha=_sage_const_1 , + color='blue', + linestyle='solid', + special_point=None, + special_label='', + extraticks=None, + ylabel=''): + + if ax is None: + fig, ax = plt.subplots(_sage_const_1 , _sage_const_1 ) + + keys = sorted(sf.jumps_counter.keys()) + y = [(sf(k) + sf.jumps_counter[k]) for k in keys[:-_sage_const_1 ]] + xmax = keys[_sage_const_1 :] + xmin = keys[:-_sage_const_1 ] + + ax.set(ylabel=ylabel) + ax.set(title=title) + ax.hlines(y, xmin, xmax, color=color, linestyle=linestyle, alpha=alpha) + if special_point is not None: + arg, val = special_point + extraticks = extraticks or [] + plt.xticks(list(plt.xticks()[_sage_const_0 ]) + extraticks) + ext = sf.extremum()[_sage_const_1 ] + ytext = ext/_sage_const_2 + _sage_const_1 /_sage_const_2 + xtext = arg + _sage_const_1 /_sage_const_5 + + ax.annotate(special_label, xy=(arg, val), xytext=(xtext, ytext), + arrowprops=dict(facecolor='black', shrink=_sage_const_0p05 , + alpha=_sage_const_0p7 , width=_sage_const_2 ),) + if subplot: + return ax + + cls.show_and_save(save_path) + + @staticmethod + def show_and_save(save_path): + + if save_path is not None: + save_path = Path(save_path) + save_path = save_path.with_suffix('.png') + plt.savefig(save_path) + + if ipython_info == JUPYTER: + plt.show() + + elif True: # save_path is None: + plt.savefig('tmp.png') + plt.close() + image = Image.open('tmp.png') + image.show() + # msg = "For interactive shell set save_path." + # warnings.warn(msg) + + @staticmethod + def step_function_data(sf): + # Transform the signature jump data to a format understandable + # by the plot function. + result = [(k, sf.sf(k) + sf.jumps_counter[k]) + for k in sorted(sf.jumps_counter.keys())] + return result + + @staticmethod + def tikz_plot(sf, save_as): + plt_sin = plot(sin(x), (x, _sage_const_0 , _sage_const_2 *pi)) + # plt_sin.show() + plt_sin.save("MyPic.pdf") + + return + # Draw the graph of the signature and transform it into TiKz. + # header of the LaTeX file + head = inspect.cleandoc( + r""" + \documentclass{standalone} + \usepackage{tikz} + \usetikzlibrary{calc} + \begin{document} + \begin{tikzpicture} + """) + + body = \ + r""" + %A piecewise linear function is drawn over the interval. + \draw (5,0) -- (6,-4); + %The axes are drawn. + \draw[latex-latex] ($(0,{-4*(2/5)}) +(0pt,-12.5pt)$) -- + ($(0,{4*(2/5)}) +(0pt,12.5pt)$) node[above right]{$y$}; + \draw[latex-latex] ($({-4*(2/5)},0) +(-12.5pt,0pt)$) -- + ($({12*(2/5)},0) +(12.5pt,0pt)$) node[below right]{$x$}; + """ + tail = \ + r""" + \end{tikzpicture} + \end{document} + """ + tikzpicture = re.sub(r' +', ' ', ''.join([head, body, tail])) + tikzpicture = re.sub(r'\n ', '\n', tikzpicture) + + with open("tmp.tex", "w") as f: + f.write(tikzpicture) + + data = self.step_function_data() + with open(save_as, "w") as f: + head = \ + r""" + \documentclass[tikz]{{standalone}} + %\usepackage{{tikz}} + \usetikzlibrary{{datavisualization}} + \usetikzlibrary{{datavisualization.formats.functions}} + %\usetikzlibrary{{calc}} + \begin{{document}} + \begin{{tikzpicture}} + \datavisualization[scientific axes, visualize as smooth line, + x axis={{ticks={{none,major={{at={{, {arg0} " as \\( {val0} \\ + %] + """.format(arg0=str(N(data[_sage_const_0 ][_sage_const_0 ] ,digits=_sage_const_4 )), val0=str(data[_sage_const_0 ][_sage_const_0 ])) + f.write(head) + + + # f.write(", " + str(N(data[0][0],digits=4)) + " as \\(" + \ + # str(data[0][0]) + "\\)") + for jump_arg, jump in data[_sage_const_1 :_sage_const_3 ]: + f.write(", " + str(N(jump_arg,digits=_sage_const_4 )) + + " as \\(" + str(jump_arg) + "\\)") + f.write("}}}}\n") + f.write(" ]\n") + f.write("data [format=function]{\n") + f.write("var x : interval [0:1];\n") + f.write("func y = \\value x;\n") + f.write("};\n") + # close LaTeX enviroments + tail = \ + r""" + %}; + \end{tikzpicture} + \end{document} + """ + f.write(tail) + + +SignatureFunction.__doc__ = \ + """ + This simple class encodes twisted and untwisted signature functions + of knots. Since the signature function is entirely encoded by its signature + jump, the class stores only information about signature jumps + in a dictionary self.jumps_counter. + The dictionary stores data of the signature jump as a key/values pair, + where the key is the argument at which the functions jumps + and value encodes the value of the jump. Remember that we treat + signature functions as defined on the interval [0,1). + """ + diff --git a/cagosig/signature.sage b/gaknot/signature.sage similarity index 99% rename from cagosig/signature.sage rename to gaknot/signature.sage index 531d505..f5af7c9 100644 --- a/cagosig/signature.sage +++ b/gaknot/signature.sage @@ -1,5 +1,8 @@ #!/usr/bin/env sage -python +import sys +import os + from collections import Counter import matplotlib.pyplot as plt import inspect @@ -8,11 +11,6 @@ from pathlib import Path import warnings from .utility import mod_one -# 9.11 (9.8) -# 9.15 (9.9) -import sys -import os - JUPYTER = 'ipykernel' IPy_TERMINAL = 'IPython' @@ -27,6 +25,10 @@ def get_ipython_info(): global ipython_info ipython_info = get_ipython_info() +# 9.11 (9.8) +# 9.15 (9.9) + + class SignatureFunction: diff --git a/cagosig/utility.py b/gaknot/utility.py similarity index 100% rename from cagosig/utility.py rename to gaknot/utility.py