fix import_sage usage (part2)
This commit is contained in:
parent
a9784f4948
commit
ebfc944e4e
@ -4,8 +4,6 @@ r"""
|
|||||||
This package contains calculations of signature functions for knots (cable sums)
|
This package contains calculations of signature functions for knots (cable sums)
|
||||||
|
|
||||||
|
|
||||||
It 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)
|
A knot (cable sum) is encoded as a list where each element (also a list)
|
||||||
corresponds to a cable knot, e.g. a list
|
corresponds to a cable knot, e.g. a list
|
||||||
[[1, 3], [2], [-1, -2], [-3]] encodes
|
[[1, 3], [2], [-1, -2], [-3]] encodes
|
||||||
|
@ -7,11 +7,21 @@ import re
|
|||||||
from typing import Iterable
|
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 . import signature as sig
|
# preparsing sage script and import as module
|
||||||
|
if __name__ == '__main__': # TBD - check is this is optimal
|
||||||
|
from utility import import_sage
|
||||||
|
package = None
|
||||||
|
path = ''
|
||||||
|
else: # called from package
|
||||||
|
from .utility import import_sage
|
||||||
|
package = os.path.join( __name__.split('.')[0])
|
||||||
|
path = '../'
|
||||||
|
sg = import_sage('signature', package=package, path=path)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
SIGMA = 0
|
SIGMA = 0
|
||||||
@ -101,14 +111,14 @@ class CableSummand:
|
|||||||
results.append((e * ksi, -1 * sgn(k_n)))
|
results.append((e * ksi, -1 * sgn(k_n)))
|
||||||
results.append((1 - e * ksi, 1 * sgn(k_n)))
|
results.append((1 - e * ksi, 1 * sgn(k_n)))
|
||||||
|
|
||||||
return sig.SignatureFunction(values=results)
|
return sg.SignatureFunction(values=results)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_satellite_part(cls, *knot_as_k_values, theta=0):
|
def get_satellite_part(cls, *knot_as_k_values, theta=0):
|
||||||
patt_k = knot_as_k_values[-1]
|
patt_k = knot_as_k_values[-1]
|
||||||
ksi = 1/(2 * abs(patt_k) + 1)
|
ksi = 1/(2 * abs(patt_k) + 1)
|
||||||
|
|
||||||
satellite_part = sig.SignatureFunction()
|
satellite_part = sg.SignatureFunction()
|
||||||
# For each knot summand consider k values in reversed order,
|
# For each knot summand consider k values in reversed order,
|
||||||
# ommit k value for pattern.
|
# ommit k value for pattern.
|
||||||
for layer_num, k in enumerate(knot_as_k_values[:-1][::-1]):
|
for layer_num, k in enumerate(knot_as_k_values[:-1][::-1]):
|
||||||
@ -141,7 +151,7 @@ class CableSummand:
|
|||||||
for a in range(k)})
|
for a in range(k)})
|
||||||
counter.update(Counter({(2 * a + 1)/(2 * q): signum
|
counter.update(Counter({(2 * a + 1)/(2 * q): signum
|
||||||
for a in range(k + 1, q)}))
|
for a in range(k + 1, q)}))
|
||||||
return sig.SignatureFunction(counter=counter)
|
return sg.SignatureFunction(counter=counter)
|
||||||
|
|
||||||
def get_summand_signature_as_theta_function(self):
|
def get_summand_signature_as_theta_function(self):
|
||||||
# knot_as_k_values = self.knot_as_k_values
|
# knot_as_k_values = self.knot_as_k_values
|
||||||
@ -189,7 +199,7 @@ class CableSummand:
|
|||||||
if save_path is not None:
|
if save_path is not None:
|
||||||
file_name = self.get_file_name_for_summand_plot(theta)
|
file_name = self.get_file_name_for_summand_plot(theta)
|
||||||
save_path = os.path.join(save_path, file_name)
|
save_path = os.path.join(save_path, file_name)
|
||||||
sig.SignaturePloter.plot_sum_of_two(pp, sp, title=title,
|
sg.SignaturePloter.plot_sum_of_two(pp, sp, title=title,
|
||||||
save_path=save_path)
|
save_path=save_path)
|
||||||
|
|
||||||
def plot_summand_sigma(self):
|
def plot_summand_sigma(self):
|
||||||
@ -352,18 +362,18 @@ class CableSum:
|
|||||||
# file_name = re.sub(r', ', '_', str(thetas))
|
# file_name = re.sub(r', ', '_', str(thetas))
|
||||||
# file_name = re.sub(r'[\[\]]', '', str(file_name))
|
# file_name = re.sub(r'[\[\]]', '', str(file_name))
|
||||||
# file_path = os.path.join(save_path, file_name)
|
# file_path = os.path.join(save_path, file_name)
|
||||||
# sig.SignaturePloter.plot_sum_of_two(pp, sp, title=title,
|
# sg.SignaturePloter.plot_sum_of_two(pp, sp, title=title,
|
||||||
# save_path=file_path)
|
# save_path=file_path)
|
||||||
#
|
#
|
||||||
# if save_path is not None:
|
# if save_path is not None:
|
||||||
# file_path = os.path.join(save_path, "all_" + file_name)
|
# file_path = os.path.join(save_path, "all_" + file_name)
|
||||||
# sf_list = [knot.signature_as_function_of_theta(thetas[i])[2]
|
# sf_list = [knot.signature_as_function_of_theta(thetas[i])[2]
|
||||||
# for i, knot in enumerate(self.knot_summands)]
|
# for i, knot in enumerate(self.knot_summands)]
|
||||||
# sig.SignaturePloter.plot_many(*sf_list, cols=2)
|
# sg.SignaturePloter.plot_many(*sf_list, cols=2)
|
||||||
# pp, sp, sf = knot.signature_as_function_of_theta(thetas[i])
|
# pp, sp, sf = knot.signature_as_function_of_theta(thetas[i])
|
||||||
# (pp + sp) = sp.plot
|
# (pp + sp) = sp.plot
|
||||||
#
|
#
|
||||||
# sig.SignatureFunction.plot_sum_of_two(pp, sp, title=title,
|
# sg.SignatureFunction.plot_sum_of_two(pp, sp, title=title,
|
||||||
# save_path=file_path)
|
# save_path=file_path)
|
||||||
|
|
||||||
|
|
||||||
@ -443,8 +453,8 @@ class CableSum:
|
|||||||
verbose = kwargs['verbose']
|
verbose = kwargs['verbose']
|
||||||
thetas = self.parse_thetas(*thetas)
|
thetas = self.parse_thetas(*thetas)
|
||||||
|
|
||||||
satellite_part = sig.SignatureFunction()
|
satellite_part = sg.SignatureFunction()
|
||||||
pattern_part = sig.SignatureFunction()
|
pattern_part = sg.SignatureFunction()
|
||||||
|
|
||||||
# for each cable knot (summand) in cable sum apply theta
|
# for each cable knot (summand) in cable sum apply theta
|
||||||
for th, knot in zip(thetas, self.knot_summands):
|
for th, knot in zip(thetas, self.knot_summands):
|
||||||
@ -682,7 +692,7 @@ CableSum.get_signature_as_function_of_theta.__doc__ = \
|
|||||||
k - parameters for a cable: parameters k_i (i=1,.., n-1) for satelit knots
|
k - parameters for a cable: parameters k_i (i=1,.., n-1) for satelit knots
|
||||||
T(2, 2k_i + 1) and - the last one - k_n for a pattern knot T(2, 2k_n + 1).
|
T(2, 2k_i + 1) and - the last one - k_n for a pattern knot T(2, 2k_n + 1).
|
||||||
Returns a function that will take theta vector as an argument and return
|
Returns a function that will take theta vector as an argument and return
|
||||||
an object sig.SignatureFunction.
|
an object sg.SignatureFunction.
|
||||||
|
|
||||||
To calculate signature function for a cable sum and a theta values vector,
|
To calculate signature function for a cable sum and a theta values vector,
|
||||||
use as below.
|
use as below.
|
||||||
@ -728,7 +738,7 @@ CableSum.get_signature_as_function_of_theta.__doc__ = \
|
|||||||
|
|
||||||
get_summand_signture_function_docsting = \
|
get_summand_signture_function_docsting = \
|
||||||
"""
|
"""
|
||||||
This function returns sig.SignatureFunction for previously defined single
|
This function returns sg.SignatureFunction for previously defined single
|
||||||
cable T_(2, q) and a theta given as an argument.
|
cable T_(2, q) and a theta given as an argument.
|
||||||
The cable was defined by calling function
|
The cable was defined by calling function
|
||||||
get_summand_signature_as_theta_function(*arg)
|
get_summand_signature_as_theta_function(*arg)
|
||||||
@ -743,7 +753,7 @@ signature_as_function_of_theta_docstring = \
|
|||||||
"""
|
"""
|
||||||
Arguments:
|
Arguments:
|
||||||
|
|
||||||
Returns object of sig.SignatureFunction class for a previously defined
|
Returns object of sg.SignatureFunction class for a previously defined
|
||||||
connected sum of len(arg) cables.
|
connected sum of len(arg) cables.
|
||||||
Accept len(arg) arguments: for each cable one theta parameter.
|
Accept len(arg) arguments: for each cable one theta parameter.
|
||||||
If call with no arguments, all theta parameters are set to be 0.
|
If call with no arguments, all theta parameters are set to be 0.
|
||||||
@ -756,7 +766,7 @@ signature_as_function_of_theta_docstring = \
|
|||||||
# T(2, q_n) is a pattern knot for a single cable from a cable sum
|
# T(2, q_n) is a pattern knot for a single cable from a cable sum
|
||||||
# theta: twist/character for the cable (value form v vector)
|
# theta: twist/character for the cable (value form v vector)
|
||||||
# Return:
|
# Return:
|
||||||
# sig.SignatureFunction created for pattern signature function
|
# sg.SignatureFunction created for pattern signature function
|
||||||
# for a given cable and theta/character
|
# for a given cable and theta/character
|
||||||
# Based on:
|
# Based on:
|
||||||
# Proposition 9.8. in Twisted Blanchfield Pairing
|
# Proposition 9.8. in Twisted Blanchfield Pairing
|
||||||
@ -769,6 +779,6 @@ signature_as_function_of_theta_docstring = \
|
|||||||
# n integers that encode a single cable, i.e.
|
# n integers that encode a single cable, i.e.
|
||||||
# values of q_i for T(2,q_0; 2,q_1; ... 2, q_n)
|
# values of q_i for T(2,q_0; 2,q_1; ... 2, q_n)
|
||||||
# Return:
|
# Return:
|
||||||
# a function that returns sig.SignatureFunction for this single cable
|
# a function that returns sg.SignatureFunction for this single cable
|
||||||
# and a theta given as an argument
|
# and a theta given as an argument
|
||||||
# """
|
# """
|
||||||
|
@ -38,9 +38,11 @@ def import_sage(module_name, package=None, path=''):
|
|||||||
module_path = os.path.join(path, module_name)
|
module_path = os.path.join(path, module_name)
|
||||||
|
|
||||||
if os.path.isfile(sage_path):
|
if os.path.isfile(sage_path):
|
||||||
|
# print("\nPreparsing sage file " + sage_name + ".")
|
||||||
os.system('sage --preparse {}'.format(sage_path));
|
os.system('sage --preparse {}'.format(sage_path));
|
||||||
os.system('mv {} {}.py'.format(python_path, module_path))
|
os.system('mv {} {}.py'.format(python_path, module_path))
|
||||||
|
|
||||||
|
|
||||||
if package is not None:
|
if package is not None:
|
||||||
module_name = package + "." + module_name
|
module_name = package + "." + module_name
|
||||||
|
|
||||||
@ -48,6 +50,7 @@ def import_sage(module_name, package=None, path=''):
|
|||||||
return importlib.reload(sys.modules[module_name])
|
return importlib.reload(sys.modules[module_name])
|
||||||
return importlib.import_module(module_name, package=package)
|
return importlib.import_module(module_name, package=package)
|
||||||
|
|
||||||
|
|
||||||
def parse_sage(module_name):
|
def parse_sage(module_name):
|
||||||
|
|
||||||
dir = os.path.dirname(__file__)
|
dir = os.path.dirname(__file__)
|
||||||
|
269546
notebooks/main.ipynb
269546
notebooks/main.ipynb
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user