mapFolding 0.15.4__py3-none-any.whl → 0.16.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- easyRun/A000682.py +25 -0
- easyRun/A005316.py +21 -0
- easyRun/NOTcountingFolds.py +36 -0
- easyRun/__init__.py +0 -0
- easyRun/countFolds.py +41 -0
- easyRun/meanders.py +71 -0
- mapFolding/__init__.py +10 -55
- mapFolding/_dataPacking.py +68 -0
- mapFolding/_theSSOT.py +33 -36
- mapFolding/_theTypes.py +21 -4
- mapFolding/algorithms/daoOfMapFolding.py +1 -2
- mapFolding/algorithms/matrixMeanders.py +101 -348
- mapFolding/algorithms/matrixMeandersBeDry.py +264 -0
- mapFolding/algorithms/matrixMeandersNumPy.py +286 -0
- mapFolding/algorithms/matrixMeandersPandas.py +351 -0
- mapFolding/algorithms/oeisIDbyFormula.py +320 -76
- mapFolding/algorithms/zCuzDocStoopidoeisIDbyFormula.py +92 -0
- mapFolding/basecamp.py +261 -113
- mapFolding/beDRY.py +2 -30
- mapFolding/dataBaskets.py +120 -4
- mapFolding/oeis.py +13 -33
- mapFolding/reference/A000682facts.py +1276 -0
- mapFolding/reference/A005316facts.py +985 -0
- mapFolding/reference/matrixMeandersAnalysis/__init__.py +1 -0
- mapFolding/reference/matrixMeandersAnalysis/prefixNotationNotes.py +15 -0
- mapFolding/reference/meandersDumpingGround/A005316JavaPort.py +1 -1
- mapFolding/reference/meandersDumpingGround/A005316imperative.py +1 -1
- mapFolding/reference/meandersDumpingGround/matrixMeandersNumPyV1finalForm.py +424 -0
- mapFolding/someAssemblyRequired/A007822/A007822rawMaterials.py +54 -0
- mapFolding/someAssemblyRequired/A007822/__init__.py +0 -0
- mapFolding/someAssemblyRequired/A007822/makeA007822AsynchronousModules.py +197 -0
- mapFolding/someAssemblyRequired/A007822/makeA007822Modules.py +74 -0
- mapFolding/someAssemblyRequired/RecipeJob.py +4 -4
- mapFolding/someAssemblyRequired/__init__.py +9 -2
- mapFolding/someAssemblyRequired/_toolIfThis.py +4 -3
- mapFolding/someAssemblyRequired/_toolkitContainers.py +8 -8
- mapFolding/someAssemblyRequired/infoBooth.py +27 -30
- mapFolding/someAssemblyRequired/makeJobTheorem2Numba.py +6 -5
- mapFolding/someAssemblyRequired/makeJobTheorem2codon.py +6 -4
- mapFolding/someAssemblyRequired/makingModules_count.py +294 -0
- mapFolding/someAssemblyRequired/makingModules_doTheNeedful.py +117 -0
- mapFolding/someAssemblyRequired/mapFolding/__init__.py +0 -0
- mapFolding/someAssemblyRequired/mapFolding/makeMapFoldingModules.py +220 -0
- mapFolding/someAssemblyRequired/meanders/__init__.py +0 -0
- mapFolding/someAssemblyRequired/meanders/makeMeandersModules.py +64 -0
- mapFolding/someAssemblyRequired/toolkitMakeModules.py +152 -0
- mapFolding/someAssemblyRequired/toolkitNumba.py +1 -1
- mapFolding/someAssemblyRequired/transformationTools.py +1 -0
- mapFolding/syntheticModules/A007822/__init__.py +1 -0
- mapFolding/syntheticModules/{algorithmA007822.py → A007822/algorithm.py} +2 -3
- mapFolding/syntheticModules/{algorithmA007822Numba.py → A007822/algorithmNumba.py} +3 -6
- mapFolding/syntheticModules/A007822/asynchronous.py +148 -0
- mapFolding/syntheticModules/A007822/asynchronousAnnex.py +66 -0
- mapFolding/syntheticModules/A007822/asynchronousAnnexNumba.py +85 -0
- mapFolding/syntheticModules/A007822/asynchronousNumba.py +52 -0
- mapFolding/syntheticModules/A007822/asynchronousTheorem2.py +53 -0
- mapFolding/syntheticModules/A007822/asynchronousTrimmed.py +47 -0
- mapFolding/syntheticModules/{initializeStateA007822.py → A007822/initializeState.py} +1 -2
- mapFolding/syntheticModules/{theorem2A007822.py → A007822/theorem2.py} +1 -2
- mapFolding/syntheticModules/{theorem2A007822Numba.py → A007822/theorem2Numba.py} +6 -4
- mapFolding/syntheticModules/{theorem2A007822Trimmed.py → A007822/theorem2Trimmed.py} +1 -2
- mapFolding/syntheticModules/countParallelNumba.py +5 -2
- mapFolding/syntheticModules/daoOfMapFoldingNumba.py +4 -2
- mapFolding/syntheticModules/dataPacking.py +4 -2
- mapFolding/syntheticModules/dataPackingA007822.py +92 -26
- mapFolding/syntheticModules/meanders/__init__.py +1 -0
- mapFolding/syntheticModules/meanders/bigInt.py +62 -0
- mapFolding/syntheticModules/theorem2Numba.py +3 -2
- mapFolding/tests/conftest.py +28 -13
- mapFolding/tests/test_computations.py +69 -62
- mapFolding/tests/test_oeis.py +6 -6
- mapFolding/zCuzDocStoopid/__init__.py +4 -0
- mapFolding/zCuzDocStoopid/makeDocstrings.py +68 -0
- mapfolding-0.16.1.dist-info/METADATA +99 -0
- mapfolding-0.16.1.dist-info/RECORD +114 -0
- {mapfolding-0.15.4.dist-info → mapfolding-0.16.1.dist-info}/top_level.txt +1 -0
- mapFolding/someAssemblyRequired/A007822rawMaterials.py +0 -46
- mapFolding/someAssemblyRequired/makeAllModules.py +0 -764
- mapfolding-0.15.4.dist-info/METADATA +0 -78
- mapfolding-0.15.4.dist-info/RECORD +0 -78
- {mapfolding-0.15.4.dist-info → mapfolding-0.16.1.dist-info}/WHEEL +0 -0
- {mapfolding-0.15.4.dist-info → mapfolding-0.16.1.dist-info}/entry_points.txt +0 -0
- {mapfolding-0.15.4.dist-info → mapfolding-0.16.1.dist-info}/licenses/LICENSE +0 -0
|
@@ -25,67 +25,48 @@ The `test_writeJobNumba` function shows how to test dynamically generated code,
|
|
|
25
25
|
which is useful if you're working with the code synthesis features of the package.
|
|
26
26
|
"""
|
|
27
27
|
|
|
28
|
-
from mapFolding import countFolds,
|
|
29
|
-
from mapFolding.
|
|
28
|
+
from mapFolding import countFolds, dictionaryOEIS, dictionaryOEISMapFolding, getFoldsTotalKnown, oeisIDfor_n
|
|
29
|
+
from mapFolding.basecamp import NOTcountingFolds
|
|
30
30
|
from mapFolding.dataBaskets import MapFoldingState
|
|
31
|
-
from mapFolding.someAssemblyRequired.makeAllModules import parametersNumbaLight
|
|
32
31
|
from mapFolding.someAssemblyRequired.RecipeJob import RecipeJobTheorem2
|
|
32
|
+
from mapFolding.someAssemblyRequired.toolkitNumba import parametersNumbaLight
|
|
33
33
|
from mapFolding.syntheticModules.initializeState import transitionOnGroupsOfFolds
|
|
34
34
|
from mapFolding.tests.conftest import registrarRecordsTemporaryFilesystemObject, standardizedEqualToCallableReturn
|
|
35
35
|
from pathlib import Path, PurePosixPath
|
|
36
|
-
from typing import Literal, TYPE_CHECKING
|
|
37
36
|
import importlib.util
|
|
38
37
|
import multiprocessing
|
|
39
38
|
import pytest
|
|
40
39
|
|
|
41
|
-
if TYPE_CHECKING:
|
|
42
|
-
from collections.abc import Callable
|
|
43
|
-
|
|
44
40
|
if __name__ == '__main__':
|
|
45
41
|
multiprocessing.set_start_method('spawn')
|
|
46
42
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
Tests the `oeisIDfor_n` function by comparing its calculated output against
|
|
51
|
-
known correct values from the OEIS database. This ensures that sequence
|
|
52
|
-
value computations remain mathematically accurate across code changes.
|
|
53
|
-
|
|
54
|
-
The test iterates through validation test cases defined in `settingsOEIS`
|
|
55
|
-
for the given OEIS sequence identifier, verifying that each computed value
|
|
56
|
-
matches its corresponding known reference value.
|
|
43
|
+
@pytest.mark.parametrize('flow', ['algorithm', 'asynchronous', 'asynchronousTrimmed', 'numba', 'theorem2', 'theorem2Numba', 'theorem2Trimmed'])
|
|
44
|
+
def test_A007822(flow: str) -> None:
|
|
45
|
+
"""Test A007822 flow options.
|
|
57
46
|
|
|
58
47
|
Parameters
|
|
59
48
|
----------
|
|
60
|
-
|
|
61
|
-
The
|
|
49
|
+
flow : str
|
|
50
|
+
The computational flow algorithm to validate.
|
|
62
51
|
|
|
63
52
|
"""
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
def test_aOFn_calculate_value_meanders(oeisIDMeanders: str) -> None:
|
|
68
|
-
"""Verify Meanders OEIS sequence value calculations against known reference values.
|
|
53
|
+
oeisID = 'A007822'
|
|
54
|
+
CPUlimit = .5
|
|
69
55
|
|
|
70
|
-
|
|
71
|
-
|
|
56
|
+
oeis_n = 2
|
|
57
|
+
for oeis_n in dictionaryOEIS[oeisID]['valuesTestValidation']:
|
|
58
|
+
if oeis_n < 2:
|
|
59
|
+
continue
|
|
72
60
|
|
|
73
|
-
|
|
74
|
-
----------
|
|
75
|
-
oeisIDMeanders : str
|
|
76
|
-
The Meanders OEIS sequence identifier to test calculations for.
|
|
61
|
+
expected = dictionaryOEIS[oeisID]['valuesKnown'][oeis_n]
|
|
77
62
|
|
|
78
|
-
"""
|
|
79
|
-
oeisIDcallable: Callable[[int], int] = getattr(oeisIDbyFormula, oeisIDMeanders)
|
|
80
|
-
for n in dictionaryOEISMeanders[oeisIDMeanders]['valuesTestValidation']:
|
|
81
63
|
standardizedEqualToCallableReturn(
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
)
|
|
64
|
+
expected
|
|
65
|
+
, NOTcountingFolds, oeisID, oeis_n, flow, CPUlimit
|
|
66
|
+
)
|
|
86
67
|
|
|
87
68
|
@pytest.mark.parametrize('flow', ['daoOfMapFolding', 'numba', 'theorem2', 'theorem2Numba', 'theorem2Trimmed'])
|
|
88
|
-
def
|
|
69
|
+
def test_countFolds(mapShapeTestCountFolds: tuple[int, ...], flow: str) -> None:
|
|
89
70
|
"""Validate that different computational flows produce valid results.
|
|
90
71
|
|
|
91
72
|
(AI generated docstring)
|
|
@@ -105,40 +86,66 @@ def test_flowControl(mapShapeTestCountFolds: tuple[int, ...], flow: str) -> None
|
|
|
105
86
|
The computational flow algorithm to validate.
|
|
106
87
|
|
|
107
88
|
"""
|
|
108
|
-
standardizedEqualToCallableReturn(getFoldsTotalKnown(mapShapeTestCountFolds), countFolds, None, None, None, None, mapShapeTestCountFolds,
|
|
89
|
+
standardizedEqualToCallableReturn(getFoldsTotalKnown(mapShapeTestCountFolds), countFolds, None, None, None, None, mapShapeTestCountFolds, flow)
|
|
109
90
|
|
|
110
|
-
@pytest.mark.parametrize('flow', ['
|
|
111
|
-
def
|
|
112
|
-
"""
|
|
91
|
+
@pytest.mark.parametrize('flow', ['matrixNumPy', 'matrixPandas'])
|
|
92
|
+
def test_meanders(oeisIDmeanders: str, flow: str) -> None:
|
|
93
|
+
"""Verify Meanders OEIS sequence value calculations against known reference values.
|
|
94
|
+
|
|
95
|
+
Tests the functions in `mapFolding.algorithms.oeisIDbyFormula` by comparing their
|
|
96
|
+
calculated output against known correct values from the OEIS database for Meanders IDs.
|
|
113
97
|
|
|
114
98
|
Parameters
|
|
115
99
|
----------
|
|
116
|
-
|
|
117
|
-
The OEIS sequence identifier to test.
|
|
118
|
-
flow : str
|
|
119
|
-
The computational flow algorithm to validate.
|
|
100
|
+
oeisIDMeanders : str
|
|
101
|
+
The Meanders OEIS sequence identifier to test calculations for.
|
|
120
102
|
|
|
121
103
|
"""
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
104
|
+
dictionary = dictionaryOEISMapFolding if oeisIDmeanders in dictionaryOEISMapFolding else dictionaryOEIS
|
|
105
|
+
for n in dictionary[oeisIDmeanders]['valuesTestValidation']:
|
|
106
|
+
standardizedEqualToCallableReturn(
|
|
107
|
+
dictionary[oeisIDmeanders]['valuesKnown'][n]
|
|
108
|
+
, NOTcountingFolds, oeisIDmeanders, n, flow, None
|
|
109
|
+
)
|
|
127
110
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
if oeis_n < 2:
|
|
131
|
-
continue
|
|
111
|
+
def test_NOTcountingFolds(oeisIDother: str) -> None:
|
|
112
|
+
"""Verify Meanders OEIS sequence value calculations against known reference values.
|
|
132
113
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
114
|
+
Tests the functions in `mapFolding.algorithms.oeisIDbyFormula` by comparing their
|
|
115
|
+
calculated output against known correct values from the OEIS database for Meanders IDs.
|
|
116
|
+
|
|
117
|
+
Parameters
|
|
118
|
+
----------
|
|
119
|
+
oeisIDMeanders : str
|
|
120
|
+
The Meanders OEIS sequence identifier to test calculations for.
|
|
137
121
|
|
|
122
|
+
"""
|
|
123
|
+
dictionary = dictionaryOEISMapFolding if oeisIDother in dictionaryOEISMapFolding else dictionaryOEIS
|
|
124
|
+
for n in dictionary[oeisIDother]['valuesTestValidation']:
|
|
138
125
|
standardizedEqualToCallableReturn(
|
|
139
|
-
|
|
140
|
-
,
|
|
141
|
-
|
|
126
|
+
dictionary[oeisIDother]['valuesKnown'][n]
|
|
127
|
+
, NOTcountingFolds, oeisIDother, n, None, None
|
|
128
|
+
)
|
|
129
|
+
|
|
130
|
+
def test_oeisIDfor_n(oeisIDmapFolding: str) -> None:
|
|
131
|
+
"""Verify OEIS sequence value calculations against known reference values.
|
|
132
|
+
|
|
133
|
+
Tests the `oeisIDfor_n` function by comparing its calculated output against
|
|
134
|
+
known correct values from the OEIS database. This ensures that sequence
|
|
135
|
+
value computations remain mathematically accurate across code changes.
|
|
136
|
+
|
|
137
|
+
The test iterates through validation test cases defined in `settingsOEIS`
|
|
138
|
+
for the given OEIS sequence identifier, verifying that each computed value
|
|
139
|
+
matches its corresponding known reference value.
|
|
140
|
+
|
|
141
|
+
Parameters
|
|
142
|
+
----------
|
|
143
|
+
oeisID : str
|
|
144
|
+
The OEIS sequence identifier to test calculations for.
|
|
145
|
+
|
|
146
|
+
"""
|
|
147
|
+
for n in dictionaryOEISMapFolding[oeisIDmapFolding]['valuesTestValidation']:
|
|
148
|
+
standardizedEqualToCallableReturn(dictionaryOEISMapFolding[oeisIDmapFolding]['valuesKnown'][n], oeisIDfor_n, oeisIDmapFolding, n)
|
|
142
149
|
|
|
143
150
|
@pytest.mark.parametrize('pathFilename_tmpTesting', ['.py'], indirect=True)
|
|
144
151
|
def test_writeJobNumba(oneTestCuzTestsOverwritingTests: tuple[int, ...], pathFilename_tmpTesting: Path) -> None:
|
mapFolding/tests/test_oeis.py
CHANGED
|
@@ -35,13 +35,13 @@ import random
|
|
|
35
35
|
import re as regex
|
|
36
36
|
import unittest.mock
|
|
37
37
|
|
|
38
|
-
def test__validateOEISid_valid_id(
|
|
39
|
-
standardizedEqualToCallableReturn(
|
|
38
|
+
def test__validateOEISid_valid_id(oeisIDmapFolding: str) -> None:
|
|
39
|
+
standardizedEqualToCallableReturn(oeisIDmapFolding, _standardizeOEISid, oeisIDmapFolding)
|
|
40
40
|
|
|
41
|
-
def test__validateOEISid_valid_id_case_insensitive(
|
|
42
|
-
standardizedEqualToCallableReturn(
|
|
43
|
-
standardizedEqualToCallableReturn(
|
|
44
|
-
standardizedEqualToCallableReturn(
|
|
41
|
+
def test__validateOEISid_valid_id_case_insensitive(oeisIDmapFolding: str) -> None:
|
|
42
|
+
standardizedEqualToCallableReturn(oeisIDmapFolding.upper(), _standardizeOEISid, oeisIDmapFolding.lower())
|
|
43
|
+
standardizedEqualToCallableReturn(oeisIDmapFolding.upper(), _standardizeOEISid, oeisIDmapFolding.upper())
|
|
44
|
+
standardizedEqualToCallableReturn(oeisIDmapFolding.upper(), _standardizeOEISid, oeisIDmapFolding.swapcase())
|
|
45
45
|
|
|
46
46
|
parameters_test_aOFn_invalid_n = [
|
|
47
47
|
(-random.randint(1, 100), "randomNegative"), # noqa: S311
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"""Make docstrings."""
|
|
2
|
+
from astToolkit import Grab, IfThis, Make, NodeChanger, parsePathFilename2astModule, Then
|
|
3
|
+
from astToolkit.transformationTools import makeDictionaryFunctionDef
|
|
4
|
+
from hunterMakesPy import raiseIfNone, writeStringToHere
|
|
5
|
+
from mapFolding import dictionaryOEIS, dictionaryOEISMapFolding, packageSettings
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
import ast
|
|
8
|
+
|
|
9
|
+
# ----------------- General Settings ----------------------------------------------------------------------------------
|
|
10
|
+
sourcePrefix: str = 'zCuzDocStoopid'
|
|
11
|
+
|
|
12
|
+
moduleWarning = "NOTE: This is a generated file; edit the source file."
|
|
13
|
+
|
|
14
|
+
def transformOEISidByFormula(pathFilenameSource: Path) -> None:
|
|
15
|
+
"""Transform the docstrings of functions corresponding to OEIS sequences."""
|
|
16
|
+
pathFilenameWrite: Path = pathFilenameSource.with_stem(pathFilenameSource.stem.removeprefix(sourcePrefix))
|
|
17
|
+
astModule: ast.Module = parsePathFilename2astModule(pathFilenameSource)
|
|
18
|
+
dictionaryFunctionDef: dict[str, ast.FunctionDef] = makeDictionaryFunctionDef(astModule)
|
|
19
|
+
|
|
20
|
+
oeisID = 'Error during transformation' # `ast.FunctionDef.name` of function in `pathFilenameSource`.
|
|
21
|
+
functionOf: str = 'Error during transformation' # The value of `functionOf` is in the docstring of function `oeisID` in `pathFilenameSource`.
|
|
22
|
+
|
|
23
|
+
for oeisID, FunctionDef in dictionaryFunctionDef.items():
|
|
24
|
+
dictionary = dictionaryOEISMapFolding if oeisID in dictionaryOEISMapFolding else dictionaryOEIS
|
|
25
|
+
functionOf = raiseIfNone(ast.get_docstring(FunctionDef))
|
|
26
|
+
|
|
27
|
+
ImaDocstring= f"""
|
|
28
|
+
Compute {oeisID}(n) as a function of {functionOf}.
|
|
29
|
+
|
|
30
|
+
*The On-Line Encyclopedia of Integer Sequences* (OEIS) description of {oeisID} is: "{dictionary[oeisID]['description']}"
|
|
31
|
+
|
|
32
|
+
The domain of {oeisID} starts at {dictionary[oeisID]['offset']}, therefore for values of `n` < {dictionary[oeisID]['offset']}, a(n) is undefined. The smallest value of n for which a(n)
|
|
33
|
+
has not yet been computed is {dictionary[oeisID]['valueUnknown']}.
|
|
34
|
+
|
|
35
|
+
Parameters
|
|
36
|
+
----------
|
|
37
|
+
n : int
|
|
38
|
+
Index (n-dex) for a(n) in the sequence of values. "n" (lower case) and "a(n)" are conventions in mathematics.
|
|
39
|
+
|
|
40
|
+
Returns
|
|
41
|
+
-------
|
|
42
|
+
a(n) : int
|
|
43
|
+
{dictionary[oeisID]['description']}
|
|
44
|
+
|
|
45
|
+
Would You Like to Know More?
|
|
46
|
+
----------------------------
|
|
47
|
+
OEIS : webpage
|
|
48
|
+
https://oeis.org/{oeisID}
|
|
49
|
+
"""
|
|
50
|
+
|
|
51
|
+
astExprDocstring = Make.Expr(Make.Constant(ImaDocstring))
|
|
52
|
+
|
|
53
|
+
NodeChanger(
|
|
54
|
+
findThis = IfThis.isFunctionDefIdentifier(oeisID)
|
|
55
|
+
, doThat = Grab.bodyAttribute(Grab.index(0, Then.replaceWith(astExprDocstring)))
|
|
56
|
+
).visit(astModule)
|
|
57
|
+
|
|
58
|
+
ast.fix_missing_locations(astModule)
|
|
59
|
+
|
|
60
|
+
docstringModule = raiseIfNone(ast.get_docstring(astModule))
|
|
61
|
+
moduleAsString = ast.unparse(astModule) + "\n"
|
|
62
|
+
moduleAsString = moduleAsString.replace(docstringModule,docstringModule + "\n\n" + moduleWarning)
|
|
63
|
+
|
|
64
|
+
writeStringToHere(moduleAsString, pathFilenameWrite)
|
|
65
|
+
|
|
66
|
+
pathRoot: Path = packageSettings.pathPackage / "algorithms"
|
|
67
|
+
pathFilenameSource: Path = next(iter(pathRoot.glob(f"{sourcePrefix}*.py"))).absolute()
|
|
68
|
+
transformOEISidByFormula(pathFilenameSource)
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: mapFolding
|
|
3
|
+
Version: 0.16.1
|
|
4
|
+
Summary: Map folding, meanders, stamp folding, semi-meanders. Experiment with algorithm transformations, and analyze computational states.
|
|
5
|
+
Author-email: Hunter Hogan <HunterHogan@pm.me>
|
|
6
|
+
License: CC-BY-NC-4.0
|
|
7
|
+
Project-URL: Donate, https://www.patreon.com/integrated
|
|
8
|
+
Project-URL: Homepage, https://github.com/hunterhogan/mapFolding
|
|
9
|
+
Project-URL: Issues, https://github.com/hunterhogan/mapFolding/issues
|
|
10
|
+
Project-URL: Repository, https://github.com/hunterhogan/mapFolding.git
|
|
11
|
+
Keywords: A000136,A000560,A000682,A001010,A001011,A001415,A001416,A001417,A001418,A005315,A005316,A007822,A178961,A195646,A223094,A259702,A301620,AST manipulation,JIT compilation,Numba optimization,OEIS,Python optimization,abstract syntax tree,algorithmic combinatorics,algorithmic optimization,arch configurations,automated code generation,bit-packed arrays,bitwise state machines,cache-efficient algorithms,closed meandric numbers,code generation,code optimization,code synthesis,code transformation,codon optimization,combinatorial computing,combinatorial enumeration,combinatorial geometry,combinatorial mathematics,combinatorial problem solver,combinatorics,computational combinatorics,computational geometry,crossing patterns,curve crossings,dataclass transformation,discrete mathematics,dynamic compilation,enumerative combinatorics,folding pattern enumeration,folding problems,high-performance computing,integer sequences,just-in-time compilation,kernel optimization,labeled stamp folding,low-level computation,map folding,mapFolding,mathematical algorithms,mathematical modeling,mathematical optimization,mathematical patterns,mathematical software,mathematical tool,mathematical visualization,meander enumeration,meanders,meandric systems,memory-efficient enumeration,metaprogramming,numerical algorithms,numerical computation,open meandric systems,paper folding mathematics,parallel computing,pattern recognition,performance optimization,permutation patterns,permutations,post-setup optimization,pyproject,scientific computing,semi-meanders,sequence analysis,sequence calculator,sequence enumeration,sequence explorer,sequence generation,source code analysis,stamp folding,symbolic computation,symmetric foldings,topological combinatorics,topological patterns,typed Python
|
|
12
|
+
Classifier: Development Status :: 4 - Beta
|
|
13
|
+
Classifier: Environment :: Console
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: Intended Audience :: Education
|
|
16
|
+
Classifier: Intended Audience :: Science/Research
|
|
17
|
+
Classifier: Natural Language :: English
|
|
18
|
+
Classifier: Operating System :: MacOS
|
|
19
|
+
Classifier: Operating System :: OS Independent
|
|
20
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
21
|
+
Classifier: Programming Language :: Python
|
|
22
|
+
Classifier: Programming Language :: Python :: 3
|
|
23
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
24
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
25
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
26
|
+
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
27
|
+
Classifier: Topic :: Scientific/Engineering :: Information Analysis
|
|
28
|
+
Classifier: Topic :: Scientific/Engineering :: Mathematics
|
|
29
|
+
Classifier: Topic :: Software Development :: Code Generators
|
|
30
|
+
Classifier: Topic :: Software Development :: Compilers
|
|
31
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
32
|
+
Classifier: Topic :: Software Development :: Pre-processors
|
|
33
|
+
Classifier: Typing :: Typed
|
|
34
|
+
Requires-Python: >=3.12
|
|
35
|
+
Description-Content-Type: text/markdown
|
|
36
|
+
License-File: LICENSE
|
|
37
|
+
Requires-Dist: astToolkit
|
|
38
|
+
Requires-Dist: autoflake
|
|
39
|
+
Requires-Dist: hunterMakesPy
|
|
40
|
+
Requires-Dist: isort
|
|
41
|
+
Requires-Dist: numpy
|
|
42
|
+
Requires-Dist: platformdirs
|
|
43
|
+
Provides-Extra: development
|
|
44
|
+
Requires-Dist: memray; sys_platform == "linux" and extra == "development"
|
|
45
|
+
Requires-Dist: mypy; extra == "development"
|
|
46
|
+
Requires-Dist: pyupgrade; extra == "development"
|
|
47
|
+
Requires-Dist: py-spy; extra == "development"
|
|
48
|
+
Requires-Dist: setuptools-scm; extra == "development"
|
|
49
|
+
Provides-Extra: numba
|
|
50
|
+
Requires-Dist: numba; extra == "numba"
|
|
51
|
+
Requires-Dist: numba_progress; extra == "numba"
|
|
52
|
+
Provides-Extra: pandas
|
|
53
|
+
Requires-Dist: pandas; extra == "pandas"
|
|
54
|
+
Requires-Dist: pyarrow; extra == "pandas"
|
|
55
|
+
Requires-Dist: pyarrow-stubs; extra == "pandas"
|
|
56
|
+
Provides-Extra: testing
|
|
57
|
+
Requires-Dist: numba; extra == "testing"
|
|
58
|
+
Requires-Dist: pandas; extra == "testing"
|
|
59
|
+
Requires-Dist: pyarrow; extra == "testing"
|
|
60
|
+
Requires-Dist: pytest-cov; extra == "testing"
|
|
61
|
+
Requires-Dist: pytest-env; extra == "testing"
|
|
62
|
+
Requires-Dist: pytest-xdist; extra == "testing"
|
|
63
|
+
Requires-Dist: pytest; extra == "testing"
|
|
64
|
+
Dynamic: license-file
|
|
65
|
+
|
|
66
|
+
# mapFolding
|
|
67
|
+
|
|
68
|
+
[](https://pypi.org/project/mapFolding/)
|
|
69
|
+
|
|
70
|
+
Map folding, meanders, stamp folding, semi-meanders. Experiment with algorithm transformations and code optimization.
|
|
71
|
+
|
|
72
|
+
I don't know how to write a README.md. Furthermore, the package used to be focused on multidimensional map folding and tools for transforming the algorithm to experiment with optimizations or to explore the algorithm.
|
|
73
|
+
|
|
74
|
+
First, the tools for transforming algorithms became far more sophisticated and powerful than this package. So I moved them to [astToolkit](https://github.com/hunterhogan/astToolkit). But those got so sophisticated, that I create more than half of that package through another layer of meta-programming: [astToolFactory](https://github.com/hunterhogan/astToolFactory).
|
|
75
|
+
|
|
76
|
+
Second, when I finally understood the connections between map folding and meanders, I added meanders to this package, and applied my transformation tools to that algorithm.
|
|
77
|
+
|
|
78
|
+
I used a weaker form of this package to [compute new terms for OEIS A001415](https://oeis.org/A001415), "Number of ways of folding a 2 X n strip of stamps."
|
|
79
|
+
There are cool and powerful tools in here, but as of 2025 September 17, I am dissatisfied with the organization and documentation. It's annoying.
|
|
80
|
+
|
|
81
|
+
## Finding stuff
|
|
82
|
+
|
|
83
|
+
1. At the moment, almost every algorithm version eventually runs through "mapFolding/basecamp.py", so it's sort of an overview and you can work backwards to find more details.
|
|
84
|
+
2. The directory "mapFolding/algorithms" only has "handmade" algorithms. Therefore, most logic for most computations is based on something in that directory.
|
|
85
|
+
3. The directory "mapFolding/syntheticModules" has code that is generated by the transformation tools.
|
|
86
|
+
4. Transformation functions are in "mapFolding/someAssemblyRequired."
|
|
87
|
+
5. The directory "mapFolding/reference" has "reference" materials.
|
|
88
|
+
6. "mapFolding/tests" has the tests, and I have tried to make it easy for you to add _your_ versions of the algorithms to the tests. Is it actually easy? I'll say it this way: if you were to create your own subclass of `ast.AST` it would be impossible for you to add your subclass to all of the `ast` module tests with just a few lines of code. In contrast, it is possible to fully test your algorithm with in my tests by adding between three and 25 lines of code. So, yeah, it's easy.
|
|
89
|
+
|
|
90
|
+
## Math and programming
|
|
91
|
+
|
|
92
|
+
I'm not a mathematician. I don't have training in or professional experience as a programmer. I'm not stupid: I'm ignorant.
|
|
93
|
+
|
|
94
|
+
## My recovery
|
|
95
|
+
|
|
96
|
+
[](https://HunterThinks.com/support)
|
|
97
|
+
[](https://www.youtube.com/@HunterHogan)
|
|
98
|
+
|
|
99
|
+
[](https://creativecommons.org/licenses/by-nc/4.0/)
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
easyRun/A000682.py,sha256=bRRA4afRPcUzJLu0ziIS6RCxNAexJ7rMQ7IZjyVr1oM,622
|
|
2
|
+
easyRun/A005316.py,sha256=aoCDGT9UJFCRv7_iJ2JSL3ptOrRtfK0uVkLbGFySx5E,473
|
|
3
|
+
easyRun/NOTcountingFolds.py,sha256=rISJTwgdeRQ-DodqEi1SN9G8-vLuXDFZb1m4OHz6cEI,796
|
|
4
|
+
easyRun/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
|
+
easyRun/countFolds.py,sha256=piPyd7Z_D9ulvQv7iP2JwS7uam2CbVTIZyF_1a3ZELw,1181
|
|
6
|
+
easyRun/meanders.py,sha256=PmktwS6P8wllec2Q6G3O9QJM_dpymAM7XyK59XcZgSA,1743
|
|
7
|
+
mapFolding/__init__.py,sha256=OxFw-BmIomKuRv_YWHAekLJasfFo3LfBxQpS3gHi6K0,1867
|
|
8
|
+
mapFolding/_dataPacking.py,sha256=zNRzXxAeg1a0DjlAB9IWeG82Rq7ALLEUzNfQDgoj2oA,3440
|
|
9
|
+
mapFolding/_theSSOT.py,sha256=n3Y_cEFS385N8MaS5fMYgYSGmDyngOrmWcY8pK58OYo,5244
|
|
10
|
+
mapFolding/_theTypes.py,sha256=_5yMvUDhEOe1bZSYB3IDipOnUNbFg6xENpoKd1h372c,7075
|
|
11
|
+
mapFolding/basecamp.py,sha256=alqgMHgdDLKDeu7koz7gpuMgKWKl2Pc9IQzRoICfCUM,19976
|
|
12
|
+
mapFolding/beDRY.py,sha256=0vJwnsvz6_jR8gfuU38vW9KoMTnRqyaYaAwbJcKLhFI,12674
|
|
13
|
+
mapFolding/dataBaskets.py,sha256=eGMv78P7WCk7Jh-J9gx971XZNnBLSmolqV5xX3Vf3vk,20723
|
|
14
|
+
mapFolding/filesystemToolkit.py,sha256=Ex5tyugRQurXIgUNVtkQYfWMq8fM4e-izX01MBXU5_8,11006
|
|
15
|
+
mapFolding/oeis.py,sha256=wRKRvDG2mChrwQOMMLuL5xvU0zUYA0PhHbpJynwOKpY,17661
|
|
16
|
+
mapFolding/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
17
|
+
mapFolding/algorithms/__init__.py,sha256=gARPqfySaeSWMfApQ5wSxzy7ZdgLdKYsLqsRSEYWwWI,28
|
|
18
|
+
mapFolding/algorithms/daoOfMapFolding.py,sha256=ncTIiBfTsM8SNVx9qefZ0bBcBtviWLSk4iPv3Z9nGiE,5442
|
|
19
|
+
mapFolding/algorithms/matrixMeanders.py,sha256=4zymuBmNCepXc_LGvtURkKC9Z6diminT503MrVrxMzk,4036
|
|
20
|
+
mapFolding/algorithms/matrixMeandersBeDry.py,sha256=vnRt23wNCH2p9sMWDUbLy9_KrCovS9chhjbT7P0_S6U,11259
|
|
21
|
+
mapFolding/algorithms/matrixMeandersNumPy.py,sha256=C3RdgnN4IifBnh-226MUFy42A7I78hN_umlAA6QcmJM,12539
|
|
22
|
+
mapFolding/algorithms/matrixMeandersPandas.py,sha256=Wsc70mnCKGV9FUo6ZqFtNPc8wFB5jYAy-Hb6bj-nsgA,12821
|
|
23
|
+
mapFolding/algorithms/oeisIDbyFormula.py,sha256=moMnVR8G8TZdPdOrLaDQr_yaU33MByKE_TTTSvDqj5I,11593
|
|
24
|
+
mapFolding/algorithms/zCuzDocStoopidoeisIDbyFormula.py,sha256=R9qczYY9X_KmNtd7SRqsGTM2rs4Ut7_JlRUmiSMrmGM,2198
|
|
25
|
+
mapFolding/reference/A000682facts.py,sha256=u09DX-MUyO1NXS50QngAnjO8rM6R_tfZwKm2JN3tQhI,26080
|
|
26
|
+
mapFolding/reference/A005316facts.py,sha256=hz6B7goIL1xT1c-XqPhLomePEMDb0lALyUz1ksuQPoo,12518
|
|
27
|
+
mapFolding/reference/__init__.py,sha256=GKcSgYE49NcTISx-JZbELXyq-eRkMeTL5g4DXInWFw0,2206
|
|
28
|
+
mapFolding/reference/flattened.py,sha256=0eHgLFIeIeVUsI5zF5oSy5iWYrjOMzxr7KjDxiTe01k,16078
|
|
29
|
+
mapFolding/reference/hunterNumba.py,sha256=iLfyqwGdAh6c5GbapnKsWhAsNsR3O-fyGGHAdohluLw,7258
|
|
30
|
+
mapFolding/reference/irvineJavaPort.py,sha256=XnsL4g33LRrYwAhcrAVt-ujsP6QD6fbyCsGYzcm9g_k,3724
|
|
31
|
+
mapFolding/reference/jaxCount.py,sha256=t8ons45zyWNJQ-nmn1qbhNsTkTnRzf7ATauaYvIlkRI,14853
|
|
32
|
+
mapFolding/reference/lunnonNumpy.py,sha256=mMgrgbrBpe4nmo72ThEI-MGH0OwEHmfMPczSXHp2qKo,4357
|
|
33
|
+
mapFolding/reference/lunnonWhile.py,sha256=ZL8GAQtPs5nJZSgoDl5USrLSS_zs03y98y1Z9E4jOmQ,3799
|
|
34
|
+
mapFolding/reference/rotatedEntryPoint.py,sha256=3IJU7Hc2PDSE71wmSkDs4Z3t0Px9NBSzmCsVrgQuQyU,10274
|
|
35
|
+
mapFolding/reference/total_countPlus1vsPlusN.py,sha256=yJZAVLVdoXqHag2_N6_6CT-Q6HXBgRro-eny93-Rlpw,9307
|
|
36
|
+
mapFolding/reference/jobsCompleted/__init__.py,sha256=TU93ZGUW1xEkT6d9mQFn_rp5DvRy0ZslEB2Q6MF5ZDc,2596
|
|
37
|
+
mapFolding/reference/jobsCompleted/[2x19]/p2x19.py,sha256=_tvYtfzMWVo2VtUbIAieoscb4N8FFflgTdW4-ljBUuA,19626
|
|
38
|
+
mapFolding/reference/jobsCompleted/p2x19/p2x19.py,sha256=eZEw4Me4ocTt6VXoK2-Sbd5SowZtxRIbN9dZmc7OCVg,6395
|
|
39
|
+
mapFolding/reference/matrixMeandersAnalysis/__init__.py,sha256=FQbR63_z3_zd3HMrpUxx3_YIcn9znzA0RIggcMntSC8,35
|
|
40
|
+
mapFolding/reference/matrixMeandersAnalysis/prefixNotationNotes.py,sha256=R9MUdS0vLEyaVdCio2AAfxEpBz6FDp7cZotEE47nFdU,1001
|
|
41
|
+
mapFolding/reference/meandersDumpingGround/A005316JavaPort.py,sha256=syMHicfioP-0GrOq7GnEpuAFSNvRwnbGim0mqV862sA,4885
|
|
42
|
+
mapFolding/reference/meandersDumpingGround/A005316imperative.py,sha256=UEbXPkORngVo0UrwS81SY2gwz1XWAaMZ0rgA7HMiVYk,3793
|
|
43
|
+
mapFolding/reference/meandersDumpingGround/A005316intOptimized.py,sha256=oO9ktdYeFwtosVp5KliwH8JmCSxfjapjBM1iMECuDAc,4121
|
|
44
|
+
mapFolding/reference/meandersDumpingGround/A005316optimized128bit.py,sha256=6JxmVBIQnN0rH0MQIZtu_wgY1Wbms8hZCWarMe5NLLU,3416
|
|
45
|
+
mapFolding/reference/meandersDumpingGround/A005316primitiveOptimized.py,sha256=iFig6Edv1E774xrlVUFLyscC40DqDhV-oh4hOnG2DLI,4116
|
|
46
|
+
mapFolding/reference/meandersDumpingGround/A005316redis.py,sha256=MPeiobrs3VsNZOOKYBg52oVp0OjVDzLEdsRKfrZ9LrU,4328
|
|
47
|
+
mapFolding/reference/meandersDumpingGround/A005316write2disk.py,sha256=NMVrdhe5KhnXQfaQ5Xr7Pwl5oXYEOM1DrMISDDOCVVw,5633
|
|
48
|
+
mapFolding/reference/meandersDumpingGround/matrixMeanders64retired.py,sha256=oRVgf6zkWRjk7dWR-Px41M_5spdvKy_Pich0qd7oxVA,9270
|
|
49
|
+
mapFolding/reference/meandersDumpingGround/matrixMeandersBaseline.py,sha256=8Z98MMfhTCdoa75HWZz4DO166EiHZCu5eHeFzhgK42s,3003
|
|
50
|
+
mapFolding/reference/meandersDumpingGround/matrixMeandersBaselineAnnex.py,sha256=d2Oh4JZxz53ox_ArhIxpMTOuA7rtE9wnEPojpFcnlfc,5817
|
|
51
|
+
mapFolding/reference/meandersDumpingGround/matrixMeandersBaselineV2.py,sha256=VpRiIGhnk-DbxwsHwCeCwXqcKLSNyHl-iRGLDH9ZGMY,7674
|
|
52
|
+
mapFolding/reference/meandersDumpingGround/matrixMeandersNumPyV1finalForm.py,sha256=G4358jHFr7hdOa709c8nYdR3eMMZjUqcxbS-L2aAOqw,24428
|
|
53
|
+
mapFolding/reference/meandersDumpingGround/matrixMeandersSimpleQueue.py,sha256=pOfaS315OKIBG9GSqSJwUDcEhfnV2XduM9IPqHrBvJg,4083
|
|
54
|
+
mapFolding/reference/meandersDumpingGround/matrixMeandersSlicePop.py,sha256=XyiesSQAH1dRplYx_CdR1FzcXvgmmxzj27V4aIqPp7o,5353
|
|
55
|
+
mapFolding/someAssemblyRequired/RecipeJob.py,sha256=9gLalEg3HeJb-HOUy38Uwm7oO-DdRX6q1Q2S58e4FKI,9899
|
|
56
|
+
mapFolding/someAssemblyRequired/__init__.py,sha256=3IF8HFIgFisJBQ1i4sx7Nz2iOqVoAG78jwjNJ9q531U,6272
|
|
57
|
+
mapFolding/someAssemblyRequired/_toolIfThis.py,sha256=QC2cmCea18BZ_WpoWoErYCWhROvmd40_i_nBO7YFRaE,6378
|
|
58
|
+
mapFolding/someAssemblyRequired/_toolkitContainers.py,sha256=RJThCzIBWSk-dUO75QhRJgaJk6xz5Pf4-LBN1wv7hxo,13545
|
|
59
|
+
mapFolding/someAssemblyRequired/getLLVMforNoReason.py,sha256=tY0-2K0BFkwLAAjSrFJLPoG8CevDHOFc3OH3TxXANzg,2806
|
|
60
|
+
mapFolding/someAssemblyRequired/infoBooth.py,sha256=ZWFH37S2jMGRbNlmjhNvoaezIk8abS3DvHhy7qVOaQM,2139
|
|
61
|
+
mapFolding/someAssemblyRequired/makeJobTheorem2Numba.py,sha256=xv3Dz9rblDtUnv7ebBcPMDVUPWDF5JkaPV-4-4Kh2T0,17276
|
|
62
|
+
mapFolding/someAssemblyRequired/makeJobTheorem2codon.py,sha256=J8QJXijA39wu87YsB-WaPj0eYTRkE17SnWVd_FrUgf8,11542
|
|
63
|
+
mapFolding/someAssemblyRequired/makingModules_count.py,sha256=Xkkd9AQ3b0UlrFfWwzY8CBtij51RNZz6_j64X9XfGPY,14340
|
|
64
|
+
mapFolding/someAssemblyRequired/makingModules_doTheNeedful.py,sha256=wCCh_i4-LzhPgyaVrvc89DMHPLt60L017P5VjOliJ64,6372
|
|
65
|
+
mapFolding/someAssemblyRequired/toolkitMakeModules.py,sha256=fzOsKkTHA_ecQprKbr9gjkg9gm74mWz_gLpIeY2a6jM,8000
|
|
66
|
+
mapFolding/someAssemblyRequired/toolkitNumba.py,sha256=3ujtBaA27CX8yVApnfNRzFpZd3GvsHv1H1vyTiiJIZk,14905
|
|
67
|
+
mapFolding/someAssemblyRequired/transformationTools.py,sha256=LmyUPy-xADrQVjvWx_ufX_nclVOyJdhpF-htR9-nk7M,11513
|
|
68
|
+
mapFolding/someAssemblyRequired/A007822/A007822rawMaterials.py,sha256=9prjzhx6D65SdOvo-3rn4G4fj84XFVxrkr4XeSvOVis,2946
|
|
69
|
+
mapFolding/someAssemblyRequired/A007822/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
70
|
+
mapFolding/someAssemblyRequired/A007822/makeA007822AsynchronousModules.py,sha256=hCljHCdy462V47EhM1taufkg6cnPluEMm0KARbhpc24,9297
|
|
71
|
+
mapFolding/someAssemblyRequired/A007822/makeA007822Modules.py,sha256=_BVd9FByctKkbyLY5h6sb_i59BZi6p3O7V9KkuJzXWI,4169
|
|
72
|
+
mapFolding/someAssemblyRequired/mapFolding/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
73
|
+
mapFolding/someAssemblyRequired/mapFolding/makeMapFoldingModules.py,sha256=SNU7Dpqu1agOmSX9DG3Kv8357mirzZiSvvKxn8XjtnM,16716
|
|
74
|
+
mapFolding/someAssemblyRequired/meanders/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
75
|
+
mapFolding/someAssemblyRequired/meanders/makeMeandersModules.py,sha256=dTqlSzmR3EFxOij8nKCl_O8fQ7YwTeyYY6HhsfaQBHo,3331
|
|
76
|
+
mapFolding/syntheticModules/__init__.py,sha256=evVFqhCGa-WZKDiLcnQWjs-Bj34eRnfSLqz_d7dFYZY,83
|
|
77
|
+
mapFolding/syntheticModules/countParallelNumba.py,sha256=nhB3Z9Jl4NffJrXCAl4_EHp-ERqP0KoWFeToKlBwB7A,7877
|
|
78
|
+
mapFolding/syntheticModules/daoOfMapFoldingNumba.py,sha256=r7Mih6KuRAVAIU0fXVSNlwNUPxYtXYkLVRVLIaqSr5M,6039
|
|
79
|
+
mapFolding/syntheticModules/dataPacking.py,sha256=ZsEtbT3UCH2gscpK_N5ypGGUAyFA9_SrQaAnhr3BqjI,2413
|
|
80
|
+
mapFolding/syntheticModules/dataPackingA007822.py,sha256=Jxk3sQKRye65qfsWur2l--afzQPyG_4I86eYJKPWauI,6244
|
|
81
|
+
mapFolding/syntheticModules/initializeState.py,sha256=OTiVi1Ywnlwk8tbwSIFjPJa_yBCINoapaCzGXDAJq_k,3121
|
|
82
|
+
mapFolding/syntheticModules/theorem2.py,sha256=QeXkBScihDatBk4iEMOMSntvhyJISb0G8zwZMQe7JFc,3031
|
|
83
|
+
mapFolding/syntheticModules/theorem2Numba.py,sha256=QpOpNdgjXTqlkgamgEKYSUxm3W9WXIUuci6HN-ZeHd0,3421
|
|
84
|
+
mapFolding/syntheticModules/theorem2Trimmed.py,sha256=geKX3So1SqhENlKeEO2dV6S3rGsxBp-AItB4hRbwbBI,2699
|
|
85
|
+
mapFolding/syntheticModules/A007822/__init__.py,sha256=evVFqhCGa-WZKDiLcnQWjs-Bj34eRnfSLqz_d7dFYZY,83
|
|
86
|
+
mapFolding/syntheticModules/A007822/algorithm.py,sha256=Nq-8GuNSWBJmPcnETcINYXP7wX4zQFHmuAkfYAkGclI,7057
|
|
87
|
+
mapFolding/syntheticModules/A007822/algorithmNumba.py,sha256=ZpaDVxT8bsGiItn34kmIwXj-yrhdi4KQE8Mu4ZTaYnM,7192
|
|
88
|
+
mapFolding/syntheticModules/A007822/asynchronous.py,sha256=1L-5aa7Ivs-QM8DDI3I9Ulfi8AkJ3fd2KdNS6g7YBLE,6270
|
|
89
|
+
mapFolding/syntheticModules/A007822/asynchronousAnnex.py,sha256=9c259Pi1oq-W_YkM0AC1YAlwK7zWbeJ6VSIyq5eisuQ,2630
|
|
90
|
+
mapFolding/syntheticModules/A007822/asynchronousAnnexNumba.py,sha256=EqHYyC9wOSjeKBbf7JyZEzqoyEy795-PDbMaZlezbQE,2943
|
|
91
|
+
mapFolding/syntheticModules/A007822/asynchronousNumba.py,sha256=LPJdK2-zBITd_OGT7gcdfvHW_2Z7yov5Ml0jbASObvE,3768
|
|
92
|
+
mapFolding/syntheticModules/A007822/asynchronousTheorem2.py,sha256=wp6igfkIs54zqPudRMjYiue0UZE4QAu4QlHGbTLnj5U,3271
|
|
93
|
+
mapFolding/syntheticModules/A007822/asynchronousTrimmed.py,sha256=2m86hM0qlbyAjEks20e_KzxfVyjjQIB0iQkLPaFqo8M,2939
|
|
94
|
+
mapFolding/syntheticModules/A007822/initializeState.py,sha256=YzI2D1PoPsESF-JarzYx3xlTzdrc0YSUJ2nKIIZRfnY,4314
|
|
95
|
+
mapFolding/syntheticModules/A007822/theorem2.py,sha256=UzexH3IkPdBkRP1i81UrazK02desrWptv0einFNOZRY,4224
|
|
96
|
+
mapFolding/syntheticModules/A007822/theorem2Numba.py,sha256=Fme4u9Vj5S-dECmikuAOi5_UDnuK8mEjeQgxRfS6LSw,4722
|
|
97
|
+
mapFolding/syntheticModules/A007822/theorem2Trimmed.py,sha256=2Ndl-q7mGLXnIbsnVgg-5pFRAnqqo4eGxJVQqY-KQBg,3892
|
|
98
|
+
mapFolding/syntheticModules/meanders/__init__.py,sha256=evVFqhCGa-WZKDiLcnQWjs-Bj34eRnfSLqz_d7dFYZY,83
|
|
99
|
+
mapFolding/syntheticModules/meanders/bigInt.py,sha256=r64Qf3LJaD7K1VNsJO0rqXnzoE0yhTnig-LVWvS4mXg,3418
|
|
100
|
+
mapFolding/tests/__init__.py,sha256=QVCHSMFVvTxV3mAyYOLkMFAFyBJ514zdoVnDmpBJnTo,1336
|
|
101
|
+
mapFolding/tests/conftest.py,sha256=5vV_Vy5ZrV3uoP9bQ8B-Kqc0zMrL7KAhsPJwchMDb6w,15700
|
|
102
|
+
mapFolding/tests/test_computations.py,sha256=BJ0nB82pGjsbZdh1MSRRFXiZYvmbmEVATasc0FKfhVk,8631
|
|
103
|
+
mapFolding/tests/test_filesystem.py,sha256=0rYQ62f4e3HOoymXrxDWbqNEBJQ7DGN8RUOMI84tE2Q,3892
|
|
104
|
+
mapFolding/tests/test_oeis.py,sha256=M4Fb0e4_h9QTX9Oy6l5-M1UQfNqeonoGVOn0DJI9huE,4854
|
|
105
|
+
mapFolding/tests/test_other.py,sha256=ScBiJ78LnyAaW-RhxcouX6Xw10wgpSdqfvT4LO3WjnQ,4766
|
|
106
|
+
mapFolding/tests/test_tasks.py,sha256=_pr9JRWjjNKA7sww70XvkJJdGPruBVzubM63RmD_Du0,4013
|
|
107
|
+
mapFolding/zCuzDocStoopid/__init__.py,sha256=uKcGXsaYKH9kQUGHjaY0EtWtU6qybb9Fs09ZYKEFMNs,236
|
|
108
|
+
mapFolding/zCuzDocStoopid/makeDocstrings.py,sha256=twVorEBlyjpdhrOrZtX2QGCd18RImb3qirHdSOHonmU,3123
|
|
109
|
+
mapfolding-0.16.1.dist-info/licenses/LICENSE,sha256=NxH5Y8BdC-gNU-WSMwim3uMbID2iNDXJz7fHtuTdXhk,19346
|
|
110
|
+
mapfolding-0.16.1.dist-info/METADATA,sha256=leGiuUNuhMwzcK0X7dCK_bOa3BAz-V8wslX1EXw7keY,7570
|
|
111
|
+
mapfolding-0.16.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
112
|
+
mapfolding-0.16.1.dist-info/entry_points.txt,sha256=-mH9DjW9tDRMPaeoSWKKywG35cR28m12H_jtmrB4eY8,98
|
|
113
|
+
mapfolding-0.16.1.dist-info/top_level.txt,sha256=jNj7ccwEy_9uqs0hsQCO_rPXgaGn8-IMqXePQN6nZTY,19
|
|
114
|
+
mapfolding-0.16.1.dist-info/RECORD,,
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
from astToolkit import extractFunctionDef # noqa: D100
|
|
2
|
-
from hunterMakesPy import raiseIfNone
|
|
3
|
-
from mapFolding.someAssemblyRequired.infoBooth import (
|
|
4
|
-
dataclassInstanceIdentifierDEFAULT, sourceCallableIdentifierDEFAULT, theCountingIdentifierDEFAULT)
|
|
5
|
-
import ast
|
|
6
|
-
|
|
7
|
-
Z0Z_identifier = 'filterAsymmetricFolds'
|
|
8
|
-
ImaString = f"""
|
|
9
|
-
def {Z0Z_identifier}(state: MapFoldingState) -> MapFoldingState:
|
|
10
|
-
state.indexLeaf = 0
|
|
11
|
-
leafConnectee = 0
|
|
12
|
-
while leafConnectee < state.leavesTotal + 1:
|
|
13
|
-
leafNumber = int(state.leafBelow[state.indexLeaf])
|
|
14
|
-
state.leafComparison[leafConnectee] = (leafNumber - state.indexLeaf + state.leavesTotal) % state.leavesTotal
|
|
15
|
-
state.indexLeaf = leafNumber
|
|
16
|
-
leafConnectee += 1
|
|
17
|
-
|
|
18
|
-
indexInMiddle = state.leavesTotal // 2
|
|
19
|
-
state.indexMiniGap = 0
|
|
20
|
-
while state.indexMiniGap < state.leavesTotal + 1:
|
|
21
|
-
ImaSymmetricFold = True
|
|
22
|
-
leafConnectee = 0
|
|
23
|
-
while leafConnectee < indexInMiddle:
|
|
24
|
-
if state.leafComparison[(state.indexMiniGap + leafConnectee) % (state.leavesTotal + 1)] != state.leafComparison[(state.indexMiniGap + state.leavesTotal - 1 - leafConnectee) % (state.leavesTotal + 1)]:
|
|
25
|
-
ImaSymmetricFold = False
|
|
26
|
-
break
|
|
27
|
-
leafConnectee += 1
|
|
28
|
-
if ImaSymmetricFold:
|
|
29
|
-
state.groupsOfFolds += 1
|
|
30
|
-
state.indexMiniGap += 1
|
|
31
|
-
|
|
32
|
-
return state
|
|
33
|
-
"""
|
|
34
|
-
|
|
35
|
-
FunctionDef_filterAsymmetricFolds: ast.FunctionDef = raiseIfNone(extractFunctionDef(ast.parse(ImaString), Z0Z_identifier))
|
|
36
|
-
del ImaString
|
|
37
|
-
|
|
38
|
-
ImaString = f"{dataclassInstanceIdentifierDEFAULT} = {Z0Z_identifier}({dataclassInstanceIdentifierDEFAULT})"
|
|
39
|
-
Z0Z_incrementCount = ast.parse(ImaString).body[0]
|
|
40
|
-
del ImaString
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
ImaString = 'state.groupsOfFolds = (state.groupsOfFolds + 1) // 2'
|
|
44
|
-
Z0Z_adjustFoldsTotal = ast.parse(ImaString).body[0]
|
|
45
|
-
del ImaString
|
|
46
|
-
|