sage import
This commit is contained in:
parent
b2feb908e1
commit
85478f7e1a
@ -8,20 +8,18 @@ from typing import Iterable
|
|||||||
from collections import Counter
|
from collections import Counter
|
||||||
from sage.arith.functions import LCM_list
|
from sage.arith.functions import LCM_list
|
||||||
import importlib
|
import importlib
|
||||||
from .utility import import_sage
|
from .utility import import_sage, mod_one
|
||||||
|
from . import signature as sig
|
||||||
|
|
||||||
SIGMA = 0
|
SIGMA = 0
|
||||||
SIGNATURE = 1
|
SIGNATURE = 1
|
||||||
|
|
||||||
package = __name__.split('.')[0]
|
|
||||||
path = os.path.dirname(__file__)
|
|
||||||
sig = import_sage('signature', package=package, path=path)
|
|
||||||
|
|
||||||
|
|
||||||
# #############################################################################
|
# #############################################################################
|
||||||
# 9.11 (9.8)
|
# 9.11 (9.8)
|
||||||
# 9.15 (9.9)
|
# 9.15 (9.9)
|
||||||
PLOTS_DIR = "plots"
|
PLOTS_DIR = "../plots"
|
||||||
|
|
||||||
class CableSummand:
|
class CableSummand:
|
||||||
|
|
||||||
@ -343,8 +341,8 @@ class CableSum:
|
|||||||
else:
|
else:
|
||||||
save_path = None
|
save_path = None
|
||||||
|
|
||||||
for theta, knot in zip(thetas, self.knot_summands):
|
# for theta, knot in zip(thetas, self.knot_summands):
|
||||||
knot.plot_summand_for_theta(thetas, save_path=save_path)
|
# knot.plot_summand_for_theta(thetas, save_path=save_path)
|
||||||
|
|
||||||
# pp, sp, sf = self.signature_as_function_of_theta(*thetas)
|
# pp, sp, sf = self.signature_as_function_of_theta(*thetas)
|
||||||
# title = self.knot_description + ", thetas = " + str(thetas)
|
# title = self.knot_description + ", thetas = " + str(thetas)
|
||||||
@ -670,8 +668,6 @@ class CableTemplate:
|
|||||||
return CableTemplate(knot_formula)
|
return CableTemplate(knot_formula)
|
||||||
|
|
||||||
|
|
||||||
def mod_one(n):
|
|
||||||
return n - floor(n)
|
|
||||||
|
|
||||||
|
|
||||||
CableSum.get_signature_as_function_of_theta.__doc__ = \
|
CableSum.get_signature_as_function_of_theta.__doc__ = \
|
||||||
|
@ -13,11 +13,11 @@ import re
|
|||||||
import numpy as np
|
import numpy as np
|
||||||
import importlib
|
import importlib
|
||||||
from .utility import import_sage
|
from .utility import import_sage
|
||||||
|
from . import signature as sig
|
||||||
|
from . import cable_signature as cs
|
||||||
|
|
||||||
package = __name__.split('.')[0]
|
package = __name__.split('.')[0]
|
||||||
path = os.path.dirname(__file__)
|
path = os.path.dirname(__file__)
|
||||||
sig = import_sage('signature', package=package, path=path)
|
|
||||||
cs = import_sage('cable_signature', package=package, path=path)
|
|
||||||
|
|
||||||
|
|
||||||
class Config:
|
class Config:
|
||||||
@ -266,45 +266,3 @@ if __name__ == '__main__':
|
|||||||
# "[-k[0], -k[5], -k[7]]]"
|
# "[-k[0], -k[5], -k[7]]]"
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
|
|
||||||
"""
|
|
||||||
This script calculates signature functions for knots (cable sums).
|
|
||||||
|
|
||||||
The script can be run as a sage script from the terminal
|
|
||||||
or used in interactive mode.
|
|
||||||
|
|
||||||
A knot (cable sum) is encoded as a list where each element (also a list)
|
|
||||||
corresponds to a cable knot, e.g. a list
|
|
||||||
[[1, 3], [2], [-1, -2], [-3]] encodes
|
|
||||||
T(2, 3; 2, 7) # T(2, 5) # -T(2, 3; 2, 5) # -T(2, 7).
|
|
||||||
|
|
||||||
To calculate the number of characters for which signature function vanish use
|
|
||||||
the function eval_cable_for_null_signature as shown below.
|
|
||||||
|
|
||||||
sage: eval_cable_for_null_signature([[1, 3], [2], [-1, -2], [-3]])
|
|
||||||
|
|
||||||
T(2, 3; 2, 7) # T(2, 5) # -T(2, 3; 2, 5) # -T(2, 7)
|
|
||||||
Zero cases: 1
|
|
||||||
All cases: 1225
|
|
||||||
Zero theta combinations:
|
|
||||||
(0, 0, 0, 0)
|
|
||||||
|
|
||||||
sage:
|
|
||||||
|
|
||||||
The numbers given to the function eval_cable_for_null_signature are k-values
|
|
||||||
for each component/cable in a direct sum.
|
|
||||||
|
|
||||||
To calculate signature function for a knot and a theta value, use function
|
|
||||||
get_signature_as_function_of_theta (see help/docstring for details).
|
|
||||||
|
|
||||||
About notation:
|
|
||||||
Cables that we work with follow a schema:
|
|
||||||
T(2, q_1; 2, q_2; 2, q_4) # -T(2, q_2; 2, q_4) #
|
|
||||||
# T(2, q_3; 2, q_4) # -T(2, q_1; 2, q_3; 2, q_4)
|
|
||||||
In knot_formula each k[i] is related with some q_i value, where
|
|
||||||
q_i = 2*k[i] + 1.
|
|
||||||
So we can work in the following steps:
|
|
||||||
1) choose a schema/formula by changing the value of knot_formula
|
|
||||||
2) set each q_i all or choose range in which q_i should varry
|
|
||||||
3) choose vector v / theata vector.
|
|
||||||
"""
|
|
||||||
|
@ -6,6 +6,7 @@ import inspect
|
|||||||
from PIL import Image
|
from PIL import Image
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
import warnings
|
import warnings
|
||||||
|
from .utility import mod_one
|
||||||
|
|
||||||
# 9.11 (9.8)
|
# 9.11 (9.8)
|
||||||
# 9.15 (9.9)
|
# 9.15 (9.9)
|
||||||
@ -13,8 +14,6 @@ import sys
|
|||||||
import os
|
import os
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
JUPYTER = 'ipykernel'
|
JUPYTER = 'ipykernel'
|
||||||
IPy_TERMINAL = 'IPython'
|
IPy_TERMINAL = 'IPython'
|
||||||
|
|
||||||
@ -366,8 +365,6 @@ class SignaturePloter:
|
|||||||
"""
|
"""
|
||||||
f.write(tail)
|
f.write(tail)
|
||||||
|
|
||||||
def mod_one(n):
|
|
||||||
return n - floor(n)
|
|
||||||
|
|
||||||
SignatureFunction.__doc__ = \
|
SignatureFunction.__doc__ = \
|
||||||
"""
|
"""
|
||||||
@ -380,19 +377,3 @@ SignatureFunction.__doc__ = \
|
|||||||
and value encodes the value of the jump. Remember that we treat
|
and value encodes the value of the jump. Remember that we treat
|
||||||
signature functions as defined on the interval [0,1).
|
signature functions as defined on the interval [0,1).
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
mod_one.__doc__ = \
|
|
||||||
"""
|
|
||||||
Argument:
|
|
||||||
a number
|
|
||||||
Return:
|
|
||||||
the fractional part of the argument
|
|
||||||
Examples:
|
|
||||||
sage: mod_one(9 + 3/4)
|
|
||||||
3/4
|
|
||||||
sage: mod_one(-9 + 3/4)
|
|
||||||
3/4
|
|
||||||
sage: mod_one(-3/4)
|
|
||||||
1/4
|
|
||||||
"""
|
|
||||||
|
@ -2,25 +2,40 @@ import importlib
|
|||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
import re
|
import re
|
||||||
|
import math
|
||||||
|
|
||||||
|
def mod_one(n):
|
||||||
|
"""
|
||||||
|
Argument:
|
||||||
|
a number
|
||||||
|
Return:
|
||||||
|
the fractional part of the argument
|
||||||
|
Examples:
|
||||||
|
sage: mod_one(9 + 3/4)
|
||||||
|
3/4
|
||||||
|
sage: mod_one(-9 + 3/4)
|
||||||
|
3/4
|
||||||
|
sage: mod_one(-3/4)
|
||||||
|
1/4
|
||||||
|
"""
|
||||||
|
return n - math.floor(n)
|
||||||
|
|
||||||
|
|
||||||
|
def import_sage(module_name, package=None, path=''):
|
||||||
def import_sage(module_name, package=None, path=None):
|
|
||||||
"""
|
"""
|
||||||
Import or reload SageMath modules with preparse if the sage file exist.
|
Import or reload SageMath modules with preparse if the sage file exist.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
sage_name = module_name + ".sage"
|
sage_name = module_name + ".sage"
|
||||||
python_name = module_name + ".sage.py"
|
python_name = module_name + ".sage.py"
|
||||||
|
|
||||||
if package is not None:
|
if package is not None:
|
||||||
path_from_package_name = re.sub(r'\.', r'\\', package)
|
path_from_package_name = re.sub(r'\.', r'\\', package)
|
||||||
file_path = os.path.join('', path, path_from_package_name)
|
path = os.path.join(path, path_from_package_name)
|
||||||
else:
|
|
||||||
file_path = os.path.join('', path)
|
|
||||||
|
|
||||||
sage_path = os.path.join(file_path, sage_name)
|
sage_path = os.path.join(path, sage_name)
|
||||||
python_path = os.path.join(file_path, python_name)
|
python_path = os.path.join(path, python_name)
|
||||||
module_path = os.path.join(file_path, module_name)
|
module_path = os.path.join(path, module_name)
|
||||||
|
|
||||||
if os.path.isfile(sage_path):
|
if os.path.isfile(sage_path):
|
||||||
os.system('sage --preparse {}'.format(sage_path));
|
os.system('sage --preparse {}'.format(sage_path));
|
||||||
|
8
notebooks/path.py
Normal file
8
notebooks/path.py
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
|
||||||
|
module_path = os.path.abspath(os.pardir)
|
||||||
|
if module_path not in sys.path:
|
||||||
|
sys.path.append(module_path)
|
Loading…
Reference in New Issue
Block a user