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.
Files changed (83) hide show
  1. easyRun/A000682.py +25 -0
  2. easyRun/A005316.py +21 -0
  3. easyRun/NOTcountingFolds.py +36 -0
  4. easyRun/__init__.py +0 -0
  5. easyRun/countFolds.py +41 -0
  6. easyRun/meanders.py +71 -0
  7. mapFolding/__init__.py +10 -55
  8. mapFolding/_dataPacking.py +68 -0
  9. mapFolding/_theSSOT.py +33 -36
  10. mapFolding/_theTypes.py +21 -4
  11. mapFolding/algorithms/daoOfMapFolding.py +1 -2
  12. mapFolding/algorithms/matrixMeanders.py +101 -348
  13. mapFolding/algorithms/matrixMeandersBeDry.py +264 -0
  14. mapFolding/algorithms/matrixMeandersNumPy.py +286 -0
  15. mapFolding/algorithms/matrixMeandersPandas.py +351 -0
  16. mapFolding/algorithms/oeisIDbyFormula.py +320 -76
  17. mapFolding/algorithms/zCuzDocStoopidoeisIDbyFormula.py +92 -0
  18. mapFolding/basecamp.py +261 -113
  19. mapFolding/beDRY.py +2 -30
  20. mapFolding/dataBaskets.py +120 -4
  21. mapFolding/oeis.py +13 -33
  22. mapFolding/reference/A000682facts.py +1276 -0
  23. mapFolding/reference/A005316facts.py +985 -0
  24. mapFolding/reference/matrixMeandersAnalysis/__init__.py +1 -0
  25. mapFolding/reference/matrixMeandersAnalysis/prefixNotationNotes.py +15 -0
  26. mapFolding/reference/meandersDumpingGround/A005316JavaPort.py +1 -1
  27. mapFolding/reference/meandersDumpingGround/A005316imperative.py +1 -1
  28. mapFolding/reference/meandersDumpingGround/matrixMeandersNumPyV1finalForm.py +424 -0
  29. mapFolding/someAssemblyRequired/A007822/A007822rawMaterials.py +54 -0
  30. mapFolding/someAssemblyRequired/A007822/__init__.py +0 -0
  31. mapFolding/someAssemblyRequired/A007822/makeA007822AsynchronousModules.py +197 -0
  32. mapFolding/someAssemblyRequired/A007822/makeA007822Modules.py +74 -0
  33. mapFolding/someAssemblyRequired/RecipeJob.py +4 -4
  34. mapFolding/someAssemblyRequired/__init__.py +9 -2
  35. mapFolding/someAssemblyRequired/_toolIfThis.py +4 -3
  36. mapFolding/someAssemblyRequired/_toolkitContainers.py +8 -8
  37. mapFolding/someAssemblyRequired/infoBooth.py +27 -30
  38. mapFolding/someAssemblyRequired/makeJobTheorem2Numba.py +6 -5
  39. mapFolding/someAssemblyRequired/makeJobTheorem2codon.py +6 -4
  40. mapFolding/someAssemblyRequired/makingModules_count.py +294 -0
  41. mapFolding/someAssemblyRequired/makingModules_doTheNeedful.py +117 -0
  42. mapFolding/someAssemblyRequired/mapFolding/__init__.py +0 -0
  43. mapFolding/someAssemblyRequired/mapFolding/makeMapFoldingModules.py +220 -0
  44. mapFolding/someAssemblyRequired/meanders/__init__.py +0 -0
  45. mapFolding/someAssemblyRequired/meanders/makeMeandersModules.py +64 -0
  46. mapFolding/someAssemblyRequired/toolkitMakeModules.py +152 -0
  47. mapFolding/someAssemblyRequired/toolkitNumba.py +1 -1
  48. mapFolding/someAssemblyRequired/transformationTools.py +1 -0
  49. mapFolding/syntheticModules/A007822/__init__.py +1 -0
  50. mapFolding/syntheticModules/{algorithmA007822.py → A007822/algorithm.py} +2 -3
  51. mapFolding/syntheticModules/{algorithmA007822Numba.py → A007822/algorithmNumba.py} +3 -6
  52. mapFolding/syntheticModules/A007822/asynchronous.py +148 -0
  53. mapFolding/syntheticModules/A007822/asynchronousAnnex.py +66 -0
  54. mapFolding/syntheticModules/A007822/asynchronousAnnexNumba.py +85 -0
  55. mapFolding/syntheticModules/A007822/asynchronousNumba.py +52 -0
  56. mapFolding/syntheticModules/A007822/asynchronousTheorem2.py +53 -0
  57. mapFolding/syntheticModules/A007822/asynchronousTrimmed.py +47 -0
  58. mapFolding/syntheticModules/{initializeStateA007822.py → A007822/initializeState.py} +1 -2
  59. mapFolding/syntheticModules/{theorem2A007822.py → A007822/theorem2.py} +1 -2
  60. mapFolding/syntheticModules/{theorem2A007822Numba.py → A007822/theorem2Numba.py} +6 -4
  61. mapFolding/syntheticModules/{theorem2A007822Trimmed.py → A007822/theorem2Trimmed.py} +1 -2
  62. mapFolding/syntheticModules/countParallelNumba.py +5 -2
  63. mapFolding/syntheticModules/daoOfMapFoldingNumba.py +4 -2
  64. mapFolding/syntheticModules/dataPacking.py +4 -2
  65. mapFolding/syntheticModules/dataPackingA007822.py +92 -26
  66. mapFolding/syntheticModules/meanders/__init__.py +1 -0
  67. mapFolding/syntheticModules/meanders/bigInt.py +62 -0
  68. mapFolding/syntheticModules/theorem2Numba.py +3 -2
  69. mapFolding/tests/conftest.py +28 -13
  70. mapFolding/tests/test_computations.py +69 -62
  71. mapFolding/tests/test_oeis.py +6 -6
  72. mapFolding/zCuzDocStoopid/__init__.py +4 -0
  73. mapFolding/zCuzDocStoopid/makeDocstrings.py +68 -0
  74. mapfolding-0.16.1.dist-info/METADATA +99 -0
  75. mapfolding-0.16.1.dist-info/RECORD +114 -0
  76. {mapfolding-0.15.4.dist-info → mapfolding-0.16.1.dist-info}/top_level.txt +1 -0
  77. mapFolding/someAssemblyRequired/A007822rawMaterials.py +0 -46
  78. mapFolding/someAssemblyRequired/makeAllModules.py +0 -764
  79. mapfolding-0.15.4.dist-info/METADATA +0 -78
  80. mapfolding-0.15.4.dist-info/RECORD +0 -78
  81. {mapfolding-0.15.4.dist-info → mapfolding-0.16.1.dist-info}/WHEEL +0 -0
  82. {mapfolding-0.15.4.dist-info → mapfolding-0.16.1.dist-info}/entry_points.txt +0 -0
  83. {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, dictionaryOEISMapFolding, dictionaryOEISMeanders, getFoldsTotalKnown, oeisIDfor_n
29
- from mapFolding.algorithms import oeisIDbyFormula
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
- def test_aOFn_calculate_value_mapFolding(oeisID: str) -> None:
48
- """Verify OEIS sequence value calculations against known reference values.
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
- oeisID : str
61
- The OEIS sequence identifier to test calculations for.
49
+ flow : str
50
+ The computational flow algorithm to validate.
62
51
 
63
52
  """
64
- for n in dictionaryOEISMapFolding[oeisID]['valuesTestValidation']:
65
- standardizedEqualToCallableReturn(dictionaryOEISMapFolding[oeisID]['valuesKnown'][n], oeisIDfor_n, oeisID, n)
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
- Tests the functions in `mapFolding.algorithms.oeisIDbyFormula` by comparing their
71
- calculated output against known correct values from the OEIS database for Meanders IDs.
56
+ oeis_n = 2
57
+ for oeis_n in dictionaryOEIS[oeisID]['valuesTestValidation']:
58
+ if oeis_n < 2:
59
+ continue
72
60
 
73
- Parameters
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
- dictionaryOEISMeanders[oeisIDMeanders]['valuesKnown'][n],
83
- oeisIDcallable,
84
- n,
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 test_flowControl(mapShapeTestCountFolds: tuple[int, ...], flow: str) -> None:
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, None, None, flow)
89
+ standardizedEqualToCallableReturn(getFoldsTotalKnown(mapShapeTestCountFolds), countFolds, None, None, None, None, mapShapeTestCountFolds, flow)
109
90
 
110
- @pytest.mark.parametrize('flow', ['daoOfMapFolding', 'numba', 'theorem2', 'theorem2Numba', 'theorem2Trimmed'])
111
- def test_flowControlByOEISid(oeisID: str, flow: str) -> None:
112
- """Validate that different flow paths using oeisID produce valid results.
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
- oeisID : str
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
- listDimensions = None
123
- pathLikeWriteFoldsTotal = None
124
- computationDivisions = None
125
- CPUlimit = None
126
- mapShape = None
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
- oeis_n = 2
129
- for oeis_n in dictionaryOEISMapFolding[oeisID]['valuesTestValidation']:
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
- if oeisID in dictionaryOEISMeanders:
134
- expected = dictionaryOEISMeanders[oeisID]['valuesKnown'][oeis_n]
135
- else:
136
- expected = dictionaryOEISMapFolding[oeisID]['valuesKnown'][oeis_n]
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
- expected
140
- , countFolds, listDimensions, pathLikeWriteFoldsTotal, computationDivisions, CPUlimit, mapShape
141
- , oeisID, oeis_n, flow)
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:
@@ -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(oeisID: str) -> None:
39
- standardizedEqualToCallableReturn(oeisID, _standardizeOEISid, oeisID)
38
+ def test__validateOEISid_valid_id(oeisIDmapFolding: str) -> None:
39
+ standardizedEqualToCallableReturn(oeisIDmapFolding, _standardizeOEISid, oeisIDmapFolding)
40
40
 
41
- def test__validateOEISid_valid_id_case_insensitive(oeisID: str) -> None:
42
- standardizedEqualToCallableReturn(oeisID.upper(), _standardizeOEISid, oeisID.lower())
43
- standardizedEqualToCallableReturn(oeisID.upper(), _standardizeOEISid, oeisID.upper())
44
- standardizedEqualToCallableReturn(oeisID.upper(), _standardizeOEISid, oeisID.swapcase())
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,4 @@
1
+ """I mean, you must write docstrings after you write the code because you don't know what the code will do until after you write it.
2
+
3
+ I strongly suspect this directory will slowly evolve into an entire ecosystem of docstring tools.
4
+ """
@@ -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
+ [![pip install mapFolding](https://img.shields.io/badge/pip%20install-mapFolding-gray.svg?colorB=3b434b)](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
+ [![Static Badge](https://img.shields.io/badge/2011_August-Homeless_since-blue?style=flat)](https://HunterThinks.com/support)
97
+ [![YouTube Channel Subscribers](https://img.shields.io/youtube/channel/subscribers/UC3Gx7kz61009NbhpRtPP7tw)](https://www.youtube.com/@HunterHogan)
98
+
99
+ [![CC-BY-NC-4.0](https://github.com/hunterhogan/mapFolding/blob/main/CC-BY-NC-4.0.png)](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
-