mapFolding 0.13.1__py3-none-any.whl → 0.14.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.
- mapFolding/_oeisFormulas/A000136.py +4 -0
- mapFolding/_oeisFormulas/A000560.py +4 -0
- mapFolding/_oeisFormulas/A000682.py +17 -0
- mapFolding/_oeisFormulas/A005315.py +4 -0
- mapFolding/_oeisFormulas/A005316.py +10 -0
- mapFolding/_oeisFormulas/A223094.py +7 -0
- mapFolding/_oeisFormulas/A259702.py +4 -0
- mapFolding/_oeisFormulas/A301620.py +6 -0
- mapFolding/_oeisFormulas/Z0Z_aOFn.py +18 -0
- mapFolding/_oeisFormulas/Z0Z_oeisMeanders.py +53 -0
- mapFolding/_oeisFormulas/__init__.py +1 -0
- mapFolding/_oeisFormulas/matrixMeanders.py +79 -0
- mapFolding/_oeisFormulas/matrixMeandersAnnex.py +84 -0
- mapFolding/_theSSOT.py +68 -26
- mapFolding/basecamp.py +2 -2
- mapFolding/beDRY.py +1 -1
- mapFolding/oeis.py +56 -167
- mapFolding/reference/A005316JavaPort.py +134 -0
- mapFolding/reference/A005316imperative.py +101 -0
- mapFolding/reference/A005316intOptimized.py +122 -0
- mapFolding/reference/A005316optimized128bit.py +79 -0
- mapFolding/reference/A005316primitiveOptimized.py +97 -0
- mapFolding/reference/A005316redis.py +118 -0
- mapFolding/reference/A005316write2disk.py +169 -0
- mapFolding/reference/irvineJavaPort.py +4 -8
- mapFolding/reference/matrixMeandersBaseline.py +65 -0
- mapFolding/reference/matrixMeandersBaselineAnnex.py +84 -0
- mapFolding/someAssemblyRequired/makeJobTheorem2codon.py +45 -17
- mapFolding/tests/conftest.py +13 -13
- mapFolding/tests/test_computations.py +4 -4
- mapFolding/tests/test_oeis.py +7 -14
- mapfolding-0.14.1.dist-info/METADATA +77 -0
- {mapfolding-0.13.1.dist-info → mapfolding-0.14.1.dist-info}/RECORD +37 -15
- mapfolding-0.13.1.dist-info/METADATA +0 -154
- {mapfolding-0.13.1.dist-info → mapfolding-0.14.1.dist-info}/WHEEL +0 -0
- {mapfolding-0.13.1.dist-info → mapfolding-0.14.1.dist-info}/entry_points.txt +0 -0
- {mapfolding-0.13.1.dist-info → mapfolding-0.14.1.dist-info}/licenses/LICENSE +0 -0
- {mapfolding-0.13.1.dist-info → mapfolding-0.14.1.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
from typing import NamedTuple
|
|
2
|
+
import sys
|
|
3
|
+
|
|
4
|
+
class limitLocators(NamedTuple):
|
|
5
|
+
curveLocationsMAXIMUM: int
|
|
6
|
+
bifurcationEvenLocator: int
|
|
7
|
+
bifurcationOddLocator: int
|
|
8
|
+
|
|
9
|
+
curveMaximum: dict[int, limitLocators] = {
|
|
10
|
+
0: limitLocators(16, 0x2a, 0x15),
|
|
11
|
+
1: limitLocators(64, 0xaa, 0x55),
|
|
12
|
+
2: limitLocators(256, 0x2aa, 0x155),
|
|
13
|
+
3: limitLocators(1024, 0xaaa, 0x555),
|
|
14
|
+
4: limitLocators(4096, 0x2aaa, 0x1555),
|
|
15
|
+
5: limitLocators(16384, 0xaaaa, 0x5555),
|
|
16
|
+
6: limitLocators(65536, 0x2aaaa, 0x15555),
|
|
17
|
+
7: limitLocators(262144, 0xaaaaa, 0x55555),
|
|
18
|
+
8: limitLocators(1048576, 0x2aaaaa, 0x155555),
|
|
19
|
+
9: limitLocators(4194304, 0xaaaaaa, 0x555555),
|
|
20
|
+
10: limitLocators(16777216, 0x2aaaaaa, 0x1555555),
|
|
21
|
+
11: limitLocators(67108864, 0xaaaaaaa, 0x5555555),
|
|
22
|
+
12: limitLocators(268435456, 0x2aaaaaaa, 0x15555555),
|
|
23
|
+
13: limitLocators(1073741824, 0xaaaaaaaa, 0x55555555),
|
|
24
|
+
14: limitLocators(4294967296, 0x2aaaaaaaa, 0x155555555),
|
|
25
|
+
15: limitLocators(17179869184, 0xaaaaaaaaa, 0x555555555),
|
|
26
|
+
16: limitLocators(68719476736, 0x2aaaaaaaaa, 0x1555555555),
|
|
27
|
+
17: limitLocators(274877906944, 0xaaaaaaaaaa, 0x5555555555),
|
|
28
|
+
18: limitLocators(1099511627776, 0x2aaaaaaaaaa, 0x15555555555),
|
|
29
|
+
19: limitLocators(4398046511104, 0xaaaaaaaaaaa, 0x55555555555),
|
|
30
|
+
20: limitLocators(17592186044416, 0x2aaaaaaaaaaa, 0x155555555555),
|
|
31
|
+
21: limitLocators(70368744177664, 0xaaaaaaaaaaaa, 0x555555555555),
|
|
32
|
+
22: limitLocators(281474976710656, 0x2aaaaaaaaaaaa, 0x1555555555555),
|
|
33
|
+
23: limitLocators(1125899906842624, 0xaaaaaaaaaaaaa, 0x5555555555555),
|
|
34
|
+
24: limitLocators(4503599627370496, 0x2aaaaaaaaaaaaa, 0x15555555555555),
|
|
35
|
+
25: limitLocators(18014398509481984, 0xaaaaaaaaaaaaaa, 0x55555555555555),
|
|
36
|
+
26: limitLocators(72057594037927936, 0x2aaaaaaaaaaaaaa, 0x155555555555555),
|
|
37
|
+
27: limitLocators(288230376151711744, 0xaaaaaaaaaaaaaaa, 0x555555555555555),
|
|
38
|
+
28: limitLocators(1152921504606846976, 0x2aaaaaaaaaaaaaaa, 0x1555555555555555),
|
|
39
|
+
29: limitLocators(4611686018427387904, 0xaaaaaaaaaaaaaaaa, 0x5555555555555555),
|
|
40
|
+
30: limitLocators(18446744073709551616, 0x2aaaaaaaaaaaaaaaa, 0x15555555555555555),
|
|
41
|
+
31: limitLocators(73786976294838206464, 0xaaaaaaaaaaaaaaaaa, 0x55555555555555555),
|
|
42
|
+
32: limitLocators(295147905179352825856, 0x2aaaaaaaaaaaaaaaaa, 0x155555555555555555),
|
|
43
|
+
33: limitLocators(1180591620717411303424, 0xaaaaaaaaaaaaaaaaaa, 0x555555555555555555),
|
|
44
|
+
34: limitLocators(4722366482869645213696, 0x2aaaaaaaaaaaaaaaaaa, 0x1555555555555555555),
|
|
45
|
+
35: limitLocators(18889465931478580854784, 0xaaaaaaaaaaaaaaaaaaa, 0x5555555555555555555),
|
|
46
|
+
36: limitLocators(75557863725914323419136, 0x2aaaaaaaaaaaaaaaaaaa, 0x15555555555555555555),
|
|
47
|
+
37: limitLocators(302231454903657293676544, 0xaaaaaaaaaaaaaaaaaaaa, 0x55555555555555555555),
|
|
48
|
+
38: limitLocators(1208925819614629174706176, 0x2aaaaaaaaaaaaaaaaaaaa, 0x155555555555555555555),
|
|
49
|
+
39: limitLocators(4835703278458516698824704, 0xaaaaaaaaaaaaaaaaaaaaa, 0x555555555555555555555),
|
|
50
|
+
40: limitLocators(19342813113834066795298816, 0x2aaaaaaaaaaaaaaaaaaaaa, 0x1555555555555555555555),
|
|
51
|
+
41: limitLocators(77371252455336267181195264, 0xaaaaaaaaaaaaaaaaaaaaaa, 0x5555555555555555555555),
|
|
52
|
+
42: limitLocators(309485009821345068724781056, 0x2aaaaaaaaaaaaaaaaaaaaaa, 0x15555555555555555555555),
|
|
53
|
+
43: limitLocators(1237940039285380274899124224, 0xaaaaaaaaaaaaaaaaaaaaaaa, 0x55555555555555555555555),
|
|
54
|
+
44: limitLocators(4951760157141521099596496896, 0x2aaaaaaaaaaaaaaaaaaaaaaa, 0x155555555555555555555555),
|
|
55
|
+
45: limitLocators(19807040628566084398385987584, 0xaaaaaaaaaaaaaaaaaaaaaaaa, 0x555555555555555555555555),
|
|
56
|
+
46: limitLocators(79228162514264337593543950336, 0x2aaaaaaaaaaaaaaaaaaaaaaaa, 0x1555555555555555555555555),
|
|
57
|
+
47: limitLocators(316912650057057350374175801344, 0xaaaaaaaaaaaaaaaaaaaaaaaaa, 0x5555555555555555555555555),
|
|
58
|
+
48: limitLocators(1267650600228229401496703205376, 0x2aaaaaaaaaaaaaaaaaaaaaaaaa, 0x15555555555555555555555555),
|
|
59
|
+
49: limitLocators(5070602400912917605986812821504, 0xaaaaaaaaaaaaaaaaaaaaaaaaaa, 0x55555555555555555555555555),
|
|
60
|
+
50: limitLocators(20282409603651670423947251286016, 0x2aaaaaaaaaaaaaaaaaaaaaaaaaa, 0x155555555555555555555555555),
|
|
61
|
+
51: limitLocators(81129638414606681695789005144064, 0xaaaaaaaaaaaaaaaaaaaaaaaaaaa, 0x555555555555555555555555555),
|
|
62
|
+
52: limitLocators(324518553658426726783156020576256, 0x2aaaaaaaaaaaaaaaaaaaaaaaaaaa, 0x1555555555555555555555555555),
|
|
63
|
+
53: limitLocators(1298074214633706907132624082305024, 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaa, 0x5555555555555555555555555555),
|
|
64
|
+
54: limitLocators(5192296858534827628530496329220096, 0x2aaaaaaaaaaaaaaaaaaaaaaaaaaaa, 0x15555555555555555555555555555),
|
|
65
|
+
55: limitLocators(20769187434139310514121985316880384, 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, 0x55555555555555555555555555555),
|
|
66
|
+
56: limitLocators(83076749736557242056487941267521536, 0x2aaaaaaaaaaaaaaaaaaaaaaaaaaaaa, 0x155555555555555555555555555555),
|
|
67
|
+
57: limitLocators(332306998946228968225951765070086144, 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, 0x555555555555555555555555555555),
|
|
68
|
+
58: limitLocators(1329227995784915872903807060280344576, 0x2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, 0x1555555555555555555555555555555),
|
|
69
|
+
59: limitLocators(5316911983139663491615228241121378304, 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, 0x5555555555555555555555555555555),
|
|
70
|
+
60: limitLocators(21267647932558653966460912964485513216, 0x2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, 0x15555555555555555555555555555555),
|
|
71
|
+
61: limitLocators(85070591730234615865843651857942052864, 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, 0x55555555555555555555555555555555),
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
def makeCurveMaximum() -> None:
|
|
75
|
+
sys.stdout.write("curveMaximum: dict[int, limitLocators] = {\n")
|
|
76
|
+
for n in range(62):
|
|
77
|
+
curveLocationsMAXIMUM = 1 << (2 * n + 4)
|
|
78
|
+
bifurcationOddLocator = int('01' * ((curveLocationsMAXIMUM.bit_length() + 1) // 2), 2)
|
|
79
|
+
sys.stdout.write(f"{n}: limitLocators({curveLocationsMAXIMUM}, {hex(bifurcationOddLocator << 1)}, {hex(bifurcationOddLocator)}),\n")
|
|
80
|
+
sys.stdout.write("}\n")
|
|
81
|
+
|
|
82
|
+
if __name__ == '__main__':
|
|
83
|
+
makeCurveMaximum()
|
|
84
|
+
|
|
@@ -8,22 +8,25 @@ from astToolkit import (
|
|
|
8
8
|
NodeTourist, Then)
|
|
9
9
|
from astToolkit.transformationTools import removeUnusedParameters, write_astModule
|
|
10
10
|
from hunterMakesPy import autoDecodingRLE, raiseIfNone
|
|
11
|
-
from mapFolding import getPathFilenameFoldsTotal, MapFoldingState
|
|
11
|
+
from mapFolding import DatatypeLeavesTotal, getPathFilenameFoldsTotal, MapFoldingState
|
|
12
12
|
from mapFolding.someAssemblyRequired import IfThis
|
|
13
13
|
from mapFolding.someAssemblyRequired.RecipeJob import RecipeJobTheorem2
|
|
14
14
|
from mapFolding.syntheticModules.initializeCount import initializeGroupsOfFolds
|
|
15
15
|
from pathlib import Path, PurePosixPath
|
|
16
|
-
from typing import cast, NamedTuple
|
|
16
|
+
from typing import cast, NamedTuple, TYPE_CHECKING
|
|
17
17
|
import ast
|
|
18
18
|
import subprocess
|
|
19
19
|
import sys
|
|
20
20
|
|
|
21
|
+
if TYPE_CHECKING:
|
|
22
|
+
from io import TextIOBase
|
|
23
|
+
|
|
21
24
|
class DatatypeConfiguration(NamedTuple):
|
|
22
25
|
"""Configuration for mapping framework datatypes to compiled datatypes.
|
|
23
26
|
|
|
24
27
|
This configuration class defines how abstract datatypes used in the map folding framework should be replaced with compiled
|
|
25
|
-
datatypes during code generation. Each configuration specifies the source module, target type name, and optional import
|
|
26
|
-
|
|
28
|
+
datatypes during code generation. Each configuration specifies the source module, target type name, and optional import alias
|
|
29
|
+
for the transformation.
|
|
27
30
|
|
|
28
31
|
Attributes
|
|
29
32
|
----------
|
|
@@ -45,16 +48,17 @@ class DatatypeConfiguration(NamedTuple):
|
|
|
45
48
|
# TODO replace with dynamic system. Probably use `Final` in the dataclass.
|
|
46
49
|
listIdentifiersStaticValuesHARDCODED: list[str] = ['dimensionsTotal', 'leavesTotal']
|
|
47
50
|
|
|
51
|
+
# TODO Dynamically calculate the bitwidth of each datatype.
|
|
48
52
|
listDatatypeConfigurations: list[DatatypeConfiguration] = [
|
|
49
|
-
DatatypeConfiguration(datatypeIdentifier='DatatypeLeavesTotal', typeModule='numpy', typeIdentifier='
|
|
50
|
-
DatatypeConfiguration(datatypeIdentifier='DatatypeElephino', typeModule='numpy', typeIdentifier='
|
|
53
|
+
DatatypeConfiguration(datatypeIdentifier='DatatypeLeavesTotal', typeModule='numpy', typeIdentifier='uint8', type_asname='DatatypeLeavesTotal'),
|
|
54
|
+
DatatypeConfiguration(datatypeIdentifier='DatatypeElephino', typeModule='numpy', typeIdentifier='uint8', type_asname='DatatypeElephino'),
|
|
51
55
|
DatatypeConfiguration(datatypeIdentifier='DatatypeFoldsTotal', typeModule='numpy', typeIdentifier='int64', type_asname='DatatypeFoldsTotal'),
|
|
52
56
|
]
|
|
53
57
|
|
|
54
58
|
listNumPy_dtype: list[DatatypeConfiguration] = [
|
|
55
|
-
DatatypeConfiguration(datatypeIdentifier='Array1DLeavesTotal', typeModule='numpy', typeIdentifier='
|
|
56
|
-
DatatypeConfiguration(datatypeIdentifier='Array1DElephino', typeModule='numpy', typeIdentifier='
|
|
57
|
-
DatatypeConfiguration(datatypeIdentifier='Array3D', typeModule='numpy', typeIdentifier='
|
|
59
|
+
DatatypeConfiguration(datatypeIdentifier='Array1DLeavesTotal', typeModule='numpy', typeIdentifier='uint8', type_asname='Array1DLeavesTotal'),
|
|
60
|
+
DatatypeConfiguration(datatypeIdentifier='Array1DElephino', typeModule='numpy', typeIdentifier='uint8', type_asname='Array1DElephino'),
|
|
61
|
+
DatatypeConfiguration(datatypeIdentifier='Array3D', typeModule='numpy', typeIdentifier='uint8', type_asname='Array3D'),
|
|
58
62
|
]
|
|
59
63
|
|
|
60
64
|
def _addWriteFoldsTotal(ingredientsFunction: IngredientsFunction, job: RecipeJobTheorem2) -> IngredientsFunction:
|
|
@@ -145,9 +149,8 @@ def _move_arg2body(identifier: str, job: RecipeJobTheorem2) -> ast.AnnAssign | a
|
|
|
145
149
|
def makeJob(job: RecipeJobTheorem2) -> None:
|
|
146
150
|
"""Generate an optimized module for map folding calculations.
|
|
147
151
|
|
|
148
|
-
This function orchestrates the complete code transformation assembly line to convert
|
|
149
|
-
|
|
150
|
-
module.
|
|
152
|
+
This function orchestrates the complete code transformation assembly line to convert a generic map folding algorithm into a
|
|
153
|
+
highly optimized, specialized computation module.
|
|
151
154
|
|
|
152
155
|
Parameters
|
|
153
156
|
----------
|
|
@@ -179,18 +182,43 @@ def makeJob(job: RecipeJobTheorem2) -> None:
|
|
|
179
182
|
ingredientsCount, ingredientsModule = _datatypeDefinitions(ingredientsCount, ingredientsModule)
|
|
180
183
|
|
|
181
184
|
ingredientsModule.appendIngredientsFunction(ingredientsCount)
|
|
182
|
-
write_astModule(ingredientsModule, pathFilename=job.pathFilenameModule, packageName=job.packageIdentifier)
|
|
183
185
|
|
|
184
186
|
if sys.platform == 'linux':
|
|
185
187
|
buildCommand: list[str] = ['codon', 'build', '--exe', '--release',
|
|
186
188
|
'--fast-math', '--enable-unsafe-fp-math', '--disable-exceptions',
|
|
187
|
-
|
|
188
|
-
|
|
189
|
+
'--mcpu=native',
|
|
190
|
+
'-o', str(job.pathFilenameModule.with_suffix('')),
|
|
191
|
+
'-']
|
|
192
|
+
streamText = subprocess.Popen(buildCommand, stdin=subprocess.PIPE, text=True)
|
|
193
|
+
if streamText.stdin is not None:
|
|
194
|
+
write_astModule(ingredientsModule, pathFilename=cast('TextIOBase', streamText.stdin), packageName=job.packageIdentifier)
|
|
195
|
+
streamText.stdin.close()
|
|
196
|
+
streamText.wait()
|
|
189
197
|
subprocess.run(['/usr/bin/strip', str(job.pathFilenameModule.with_suffix(''))], check=False)
|
|
198
|
+
sys.stdout.write(f"sudo systemd-run --unit={job.moduleIdentifier} --nice=-10 --property=CPUAffinity=0 {job.pathFilenameModule.with_suffix('')}\n")
|
|
199
|
+
else:
|
|
200
|
+
write_astModule(ingredientsModule, pathFilename=job.pathFilenameModule, packageName=job.packageIdentifier)
|
|
190
201
|
|
|
191
|
-
|
|
192
|
-
|
|
202
|
+
def fromMapShape(mapShape: tuple[DatatypeLeavesTotal, ...]) -> None:
|
|
203
|
+
"""Create a binary executable for a map-folding job from map dimensions.
|
|
204
|
+
|
|
205
|
+
This function initializes a map folding computation state from the given map shape, sets up the necessary file paths, and
|
|
206
|
+
generates an optimized executable for the specific map configuration.
|
|
207
|
+
|
|
208
|
+
Parameters
|
|
209
|
+
----------
|
|
210
|
+
mapShape : tuple[DatatypeLeavesTotal, ...]
|
|
211
|
+
Dimensions of the map as a tuple where each element represents the size
|
|
212
|
+
along one axis.
|
|
213
|
+
|
|
214
|
+
"""
|
|
215
|
+
state = initializeGroupsOfFolds(MapFoldingState(mapShape))
|
|
193
216
|
pathModule = PurePosixPath(Path.home(), 'mapFolding', 'jobs')
|
|
194
217
|
pathFilenameFoldsTotal = PurePosixPath(getPathFilenameFoldsTotal(state.mapShape, pathModule))
|
|
195
218
|
aJob = RecipeJobTheorem2(state, pathModule=pathModule, pathFilenameFoldsTotal=pathFilenameFoldsTotal)
|
|
196
219
|
makeJob(aJob)
|
|
220
|
+
|
|
221
|
+
if __name__ == '__main__':
|
|
222
|
+
mapShape = (2, 21)
|
|
223
|
+
fromMapShape(mapShape)
|
|
224
|
+
|
mapFolding/tests/conftest.py
CHANGED
|
@@ -24,8 +24,8 @@ research domain.
|
|
|
24
24
|
"""
|
|
25
25
|
|
|
26
26
|
from collections.abc import Callable, Generator, Sequence
|
|
27
|
-
from mapFolding import getLeavesTotal, makeDataContainer,
|
|
28
|
-
from mapFolding.oeis import
|
|
27
|
+
from mapFolding import _theSSOT, getLeavesTotal, makeDataContainer, packageSettings, validateListDimensions
|
|
28
|
+
from mapFolding.oeis import dictionaryOEIS, oeisIDsImplemented
|
|
29
29
|
from pathlib import Path
|
|
30
30
|
from typing import Any
|
|
31
31
|
import numpy
|
|
@@ -149,10 +149,10 @@ def pathCacheTesting(path_tmpTesting: Path) -> Generator[Path, Any, None]:
|
|
|
149
149
|
Context manager that provides the temporary cache path and restores original.
|
|
150
150
|
|
|
151
151
|
"""
|
|
152
|
-
pathCacheOriginal =
|
|
153
|
-
|
|
152
|
+
pathCacheOriginal = _theSSOT.pathCache
|
|
153
|
+
_theSSOT.pathCache = path_tmpTesting
|
|
154
154
|
yield path_tmpTesting
|
|
155
|
-
|
|
155
|
+
_theSSOT.pathCache = pathCacheOriginal
|
|
156
156
|
|
|
157
157
|
@pytest.fixture
|
|
158
158
|
def pathFilenameFoldsTotalTesting(path_tmpTesting: Path) -> Path:
|
|
@@ -212,10 +212,10 @@ def oneTestCuzTestsOverwritingTests(oeisID_1random: str) -> tuple[int, ...]:
|
|
|
212
212
|
|
|
213
213
|
"""
|
|
214
214
|
while True:
|
|
215
|
-
n = random.choice(
|
|
215
|
+
n = random.choice(dictionaryOEIS[oeisID_1random]['valuesTestValidation'])
|
|
216
216
|
if n < 2:
|
|
217
217
|
continue
|
|
218
|
-
listDimensionsCandidate = list(
|
|
218
|
+
listDimensionsCandidate = list(dictionaryOEIS[oeisID_1random]['getMapShape'](n))
|
|
219
219
|
|
|
220
220
|
try:
|
|
221
221
|
return validateListDimensions(listDimensionsCandidate)
|
|
@@ -238,10 +238,10 @@ def mapShapeTestCountFolds(oeisID: str) -> tuple[int, ...]:
|
|
|
238
238
|
|
|
239
239
|
"""
|
|
240
240
|
while True:
|
|
241
|
-
n = random.choice(
|
|
241
|
+
n = random.choice(dictionaryOEIS[oeisID]['valuesTestValidation'])
|
|
242
242
|
if n < 2:
|
|
243
243
|
continue
|
|
244
|
-
listDimensionsCandidate = list(
|
|
244
|
+
listDimensionsCandidate = list(dictionaryOEIS[oeisID]['getMapShape'](n))
|
|
245
245
|
|
|
246
246
|
try:
|
|
247
247
|
return validateListDimensions(listDimensionsCandidate)
|
|
@@ -266,10 +266,10 @@ def mapShapeTestFunctionality(oeisID_1random: str) -> tuple[int, ...]:
|
|
|
266
266
|
|
|
267
267
|
"""
|
|
268
268
|
while True:
|
|
269
|
-
n = random.choice(
|
|
269
|
+
n = random.choice(dictionaryOEIS[oeisID_1random]['valuesTestValidation'])
|
|
270
270
|
if n < 2:
|
|
271
271
|
continue
|
|
272
|
-
listDimensionsCandidate = list(
|
|
272
|
+
listDimensionsCandidate = list(dictionaryOEIS[oeisID_1random]['getMapShape'](n))
|
|
273
273
|
|
|
274
274
|
try:
|
|
275
275
|
return validateListDimensions(listDimensionsCandidate)
|
|
@@ -291,8 +291,8 @@ def mapShapeTestParallelization(oeisID: str) -> tuple[int, ...]:
|
|
|
291
291
|
Map dimensions suitable for testing parallelization features.
|
|
292
292
|
|
|
293
293
|
"""
|
|
294
|
-
n = random.choice(
|
|
295
|
-
return
|
|
294
|
+
n = random.choice(dictionaryOEIS[oeisID]['valuesTestParallelization'])
|
|
295
|
+
return dictionaryOEIS[oeisID]['getMapShape'](n)
|
|
296
296
|
|
|
297
297
|
@pytest.fixture
|
|
298
298
|
def mockBenchmarkTimer() -> Generator[unittest.mock.MagicMock | unittest.mock.AsyncMock, Any, None]:
|
|
@@ -27,9 +27,9 @@ which is useful if you're working with the code synthesis features of the packag
|
|
|
27
27
|
|
|
28
28
|
from mapFolding import countFolds, getFoldsTotalKnown, oeisIDfor_n
|
|
29
29
|
from mapFolding.dataBaskets import MapFoldingState
|
|
30
|
-
from mapFolding.oeis import
|
|
31
|
-
from mapFolding.someAssemblyRequired.RecipeJob import RecipeJobTheorem2
|
|
30
|
+
from mapFolding.oeis import dictionaryOEIS
|
|
32
31
|
from mapFolding.someAssemblyRequired.makeAllModules import parametersNumbaLight
|
|
32
|
+
from mapFolding.someAssemblyRequired.RecipeJob import RecipeJobTheorem2
|
|
33
33
|
from mapFolding.syntheticModules.initializeCount import initializeGroupsOfFolds
|
|
34
34
|
from mapFolding.tests.conftest import registrarRecordsTemporaryFilesystemObject, standardizedEqualToCallableReturn
|
|
35
35
|
from pathlib import Path, PurePosixPath
|
|
@@ -83,8 +83,8 @@ def test_aOFn_calculate_value(oeisID: str) -> None:
|
|
|
83
83
|
The OEIS sequence identifier to test calculations for.
|
|
84
84
|
|
|
85
85
|
"""
|
|
86
|
-
for n in
|
|
87
|
-
standardizedEqualToCallableReturn(
|
|
86
|
+
for n in dictionaryOEIS[oeisID]['valuesTestValidation']:
|
|
87
|
+
standardizedEqualToCallableReturn(dictionaryOEIS[oeisID]['valuesKnown'][n], oeisIDfor_n, oeisID, n)
|
|
88
88
|
|
|
89
89
|
@pytest.mark.parametrize('pathFilename_tmpTesting', ['.py'], indirect=True)
|
|
90
90
|
def test_writeJobNumba(oneTestCuzTestsOverwritingTests: tuple[int, ...], pathFilename_tmpTesting: Path) -> None:
|
mapFolding/tests/test_oeis.py
CHANGED
|
@@ -26,7 +26,7 @@ which is crucial for maintaining package reliability in production environments.
|
|
|
26
26
|
|
|
27
27
|
from contextlib import redirect_stdout
|
|
28
28
|
from mapFolding.oeis import (
|
|
29
|
-
clearOEIScache, getOEISids, OEIS_for_n, oeisIDfor_n, oeisIDsImplemented
|
|
29
|
+
_standardizeOEISid, clearOEIScache, dictionaryOEIS, getOEISids, OEIS_for_n, oeisIDfor_n, oeisIDsImplemented)
|
|
30
30
|
from mapFolding.tests.conftest import standardizedEqualToCallableReturn, standardizedSystemExit
|
|
31
31
|
from typing import Any
|
|
32
32
|
import io
|
|
@@ -35,20 +35,13 @@ import random
|
|
|
35
35
|
import re as regex
|
|
36
36
|
import unittest.mock
|
|
37
37
|
|
|
38
|
-
@pytest.mark.parametrize("badID", ["A999999", " A999999 ", "A999999extra"])
|
|
39
|
-
def test__validateOEISid_invalid_id(badID: str) -> None:
|
|
40
|
-
standardizedEqualToCallableReturn(KeyError, validateOEISid, badID)
|
|
41
|
-
|
|
42
|
-
def test__validateOEISid_partially_valid(oeisID_1random: str) -> None:
|
|
43
|
-
standardizedEqualToCallableReturn(KeyError, validateOEISid, f"{oeisID_1random}extra")
|
|
44
|
-
|
|
45
38
|
def test__validateOEISid_valid_id(oeisID: str) -> None:
|
|
46
|
-
standardizedEqualToCallableReturn(oeisID,
|
|
39
|
+
standardizedEqualToCallableReturn(oeisID, _standardizeOEISid, oeisID)
|
|
47
40
|
|
|
48
41
|
def test__validateOEISid_valid_id_case_insensitive(oeisID: str) -> None:
|
|
49
|
-
standardizedEqualToCallableReturn(oeisID.upper(),
|
|
50
|
-
standardizedEqualToCallableReturn(oeisID.upper(),
|
|
51
|
-
standardizedEqualToCallableReturn(oeisID.upper(),
|
|
42
|
+
standardizedEqualToCallableReturn(oeisID.upper(), _standardizeOEISid, oeisID.lower())
|
|
43
|
+
standardizedEqualToCallableReturn(oeisID.upper(), _standardizeOEISid, oeisID.upper())
|
|
44
|
+
standardizedEqualToCallableReturn(oeisID.upper(), _standardizeOEISid, oeisID.swapcase())
|
|
52
45
|
|
|
53
46
|
parameters_test_aOFn_invalid_n = [
|
|
54
47
|
(-random.randint(1, 100), "randomNegative"), # noqa: S311
|
|
@@ -75,7 +68,7 @@ def test_clearOEIScache(mock_unlink: unittest.mock.MagicMock, mock_exists: unitt
|
|
|
75
68
|
|
|
76
69
|
if cacheExists:
|
|
77
70
|
# Each OEIS ID has two cache files
|
|
78
|
-
expected_calls = len(
|
|
71
|
+
expected_calls = len(dictionaryOEIS) * 2
|
|
79
72
|
assert mock_unlink.call_count == expected_calls
|
|
80
73
|
mock_unlink.assert_has_calls([unittest.mock.call(missing_ok=True)] * expected_calls)
|
|
81
74
|
else:
|
|
@@ -94,7 +87,7 @@ def testHelpText() -> None:
|
|
|
94
87
|
# Verify content
|
|
95
88
|
for oeisID in oeisIDsImplemented:
|
|
96
89
|
assert oeisID in helpText
|
|
97
|
-
assert
|
|
90
|
+
assert dictionaryOEIS[oeisID]['description'] in helpText
|
|
98
91
|
|
|
99
92
|
# Extract and verify examples
|
|
100
93
|
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: mapFolding
|
|
3
|
+
Version: 0.14.1
|
|
4
|
+
Summary: Map folding, meanders, stamp folding, semi-meanders. Experiment with algorithm transformations and code optimization.
|
|
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,A001415,A001416,A001417,A001418,A005315,A005316,A195646,A223094,A259702,A301620,abstract syntax tree,algorithmic combinatorics,algorithmic optimization,arch configurations,AST manipulation,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,GPU acceleration,high-performance computing,integer sequences,JIT compilation,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,Numba optimization,numerical algorithms,numerical computation,OEIS,open meandric systems,paper folding mathematics,parallel computing,pattern recognition,performance optimization,permutation patterns,permutations,post-setup optimization,pyproject,Python optimization,scientific computing,semi-meanders,sequence analysis,sequence calculator,sequence enumeration,sequence explorer,sequence generation,source code analysis,stamp folding,symbolic computation,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: hunterMakesPy
|
|
39
|
+
Requires-Dist: numpy
|
|
40
|
+
Requires-Dist: platformdirs
|
|
41
|
+
Provides-Extra: development
|
|
42
|
+
Requires-Dist: mypy; extra == "development"
|
|
43
|
+
Requires-Dist: pyupgrade; extra == "development"
|
|
44
|
+
Requires-Dist: py-spy; extra == "development"
|
|
45
|
+
Requires-Dist: setuptools-scm; extra == "development"
|
|
46
|
+
Provides-Extra: numba
|
|
47
|
+
Requires-Dist: numba; extra == "numba"
|
|
48
|
+
Requires-Dist: numba_progress; extra == "numba"
|
|
49
|
+
Provides-Extra: testing
|
|
50
|
+
Requires-Dist: numba; extra == "testing"
|
|
51
|
+
Requires-Dist: pytest-cov; extra == "testing"
|
|
52
|
+
Requires-Dist: pytest-env; extra == "testing"
|
|
53
|
+
Requires-Dist: pytest-xdist; extra == "testing"
|
|
54
|
+
Requires-Dist: pytest; extra == "testing"
|
|
55
|
+
Dynamic: license-file
|
|
56
|
+
|
|
57
|
+
# mapFolding
|
|
58
|
+
|
|
59
|
+
[](https://pypi.org/project/mapFolding/)
|
|
60
|
+
|
|
61
|
+
Map folding, meanders, stamp folding, semi-meanders. Experiment with algorithm transformations and code optimization.
|
|
62
|
+
|
|
63
|
+
Command line:
|
|
64
|
+
|
|
65
|
+
- getOEISids
|
|
66
|
+
- OEIS_for_n
|
|
67
|
+
|
|
68
|
+
The package is focused on mapFolding and stamp folding. But "mapFolding/_oeisFormulas" has some infrastructure for meanders and semi-meanders.
|
|
69
|
+
|
|
70
|
+
There are innovations and insights in the mapFolding stuff.
|
|
71
|
+
|
|
72
|
+
## My recovery
|
|
73
|
+
|
|
74
|
+
[](https://HunterThinks.com/support)
|
|
75
|
+
[](https://www.youtube.com/@HunterHogan)
|
|
76
|
+
|
|
77
|
+
[](https://creativecommons.org/licenses/by-nc/4.0/)
|
|
@@ -1,20 +1,42 @@
|
|
|
1
1
|
mapFolding/__init__.py,sha256=dl3HR2zoipFo0UstEJn3iWTkXlA_XeCQw_zfw2fk4qE,3643
|
|
2
|
-
mapFolding/_theSSOT.py,sha256=
|
|
2
|
+
mapFolding/_theSSOT.py,sha256=3tpmiDAgrN9uZ8IuBx-xbtiRjxP9B9_PjEwK0L5Mxm4,4683
|
|
3
3
|
mapFolding/_theTypes.py,sha256=rT8UTm-I_haMQlUGaJ4yvqIMt6FUOvWH-VUYNud6UN4,5495
|
|
4
|
-
mapFolding/basecamp.py,sha256=
|
|
5
|
-
mapFolding/beDRY.py,sha256=
|
|
4
|
+
mapFolding/basecamp.py,sha256=eG9wz5hPgPIuLLQf9xKizuvTAKyZjFQt1_rbaQJJYO4,9458
|
|
5
|
+
mapFolding/beDRY.py,sha256=JjKrJ97vNg67RIoWfOEKZGGbL55kE3p9B6wrJ1TK-8E,14760
|
|
6
6
|
mapFolding/daoOfMapFolding.py,sha256=ncTIiBfTsM8SNVx9qefZ0bBcBtviWLSk4iPv3Z9nGiE,5442
|
|
7
7
|
mapFolding/dataBaskets.py,sha256=zTpRoGDEysq7ekmgiKCtCV6NOBGzfgs_XMjVngvg3ic,14566
|
|
8
8
|
mapFolding/filesystemToolkit.py,sha256=Ex5tyugRQurXIgUNVtkQYfWMq8fM4e-izX01MBXU5_8,11006
|
|
9
|
-
mapFolding/oeis.py,sha256=
|
|
9
|
+
mapFolding/oeis.py,sha256=_M5Ha0io90apjtm4r1Dd5c38FeirnTymxCtqTFE3h2c,19416
|
|
10
10
|
mapFolding/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
11
|
+
mapFolding/_oeisFormulas/A000136.py,sha256=G_vqOdb6s_YBbrCkHKjQDnlYfOZ4suXRtie6bRI7hhE,105
|
|
12
|
+
mapFolding/_oeisFormulas/A000560.py,sha256=sN5-BAjL0oDk7YXZ2kx7ffBDX-gC28mmOj4CxHkM36c,113
|
|
13
|
+
mapFolding/_oeisFormulas/A000682.py,sha256=_Jmy9-0I1evJS2CybtvXalUiCD3X_pu5aMb3i8u1fTk,551
|
|
14
|
+
mapFolding/_oeisFormulas/A005315.py,sha256=g1P52zUuWCLFbTb_i6U75sVzXfUGaCM3rJonXNRgVr4,109
|
|
15
|
+
mapFolding/_oeisFormulas/A005316.py,sha256=3B4_2TT_ip3CcYngEaFS-rTNDx-x2TZ0r_J0f8IMJbQ,234
|
|
16
|
+
mapFolding/_oeisFormulas/A223094.py,sha256=z7t6RcRQlhXdbYImIER15KwG1_W7iV4MNIRDx9Q_Efs,284
|
|
17
|
+
mapFolding/_oeisFormulas/A259702.py,sha256=9hUs8jzwOnJGmBsueS1yGsLjau4YVa0Yd9lYMG8UFso,123
|
|
18
|
+
mapFolding/_oeisFormulas/A301620.py,sha256=pY0OJsCLhIEDHQUKpeSMTZ2SUFvcqt83uCOPE_lZCsw,225
|
|
19
|
+
mapFolding/_oeisFormulas/Z0Z_aOFn.py,sha256=qTtjahVu733d-9Z86y1-A9VQC3-ge7j75ikNCIqX3HU,507
|
|
20
|
+
mapFolding/_oeisFormulas/Z0Z_oeisMeanders.py,sha256=IDwGgieBJffmC3bAFaCqgIxPC9ZyRmqSxsWJ3VKyY2U,1746
|
|
21
|
+
mapFolding/_oeisFormulas/__init__.py,sha256=n83beVb7HHplXYAM5HveaIAuR7KrJG99OaNHJGMb_uc,44
|
|
22
|
+
mapFolding/_oeisFormulas/matrixMeanders.py,sha256=me0YV5LDH-s5n9QaUTBT2OdVsc4m_EWxpKN_tvpidvI,3694
|
|
23
|
+
mapFolding/_oeisFormulas/matrixMeandersAnnex.py,sha256=4_269UTFwWuxDwHPBYC7rpEUdrivA-imNN3j1C2udY0,5848
|
|
24
|
+
mapFolding/reference/A005316JavaPort.py,sha256=6qqTzbD3PTwYGtqaywEURGXtNFx1lp8ofEwpQeEvAHc,4899
|
|
25
|
+
mapFolding/reference/A005316imperative.py,sha256=hhjUxELOktNBmHrwIoxVA-mcFsOWgg01p780OBeqL04,3816
|
|
26
|
+
mapFolding/reference/A005316intOptimized.py,sha256=oO9ktdYeFwtosVp5KliwH8JmCSxfjapjBM1iMECuDAc,4121
|
|
27
|
+
mapFolding/reference/A005316optimized128bit.py,sha256=G48By4Z0iWFeGPEzac2X0uv6Fp42SqMALJoEunqHUS0,3380
|
|
28
|
+
mapFolding/reference/A005316primitiveOptimized.py,sha256=z9mtfKGlVXLplSwg51Qpmu6njZndCufFIxnPTCOVN2U,4064
|
|
29
|
+
mapFolding/reference/A005316redis.py,sha256=NobSrzm1NuDLKk_v1diSZz6viT_2Q7bO5WU3rJ9q0jk,4292
|
|
30
|
+
mapFolding/reference/A005316write2disk.py,sha256=_XT_3jbOOroCOmXyITKJVs7ZFtpkVI_xCt-051405Rg,5597
|
|
11
31
|
mapFolding/reference/__init__.py,sha256=GKcSgYE49NcTISx-JZbELXyq-eRkMeTL5g4DXInWFw0,2206
|
|
12
32
|
mapFolding/reference/flattened.py,sha256=0eHgLFIeIeVUsI5zF5oSy5iWYrjOMzxr7KjDxiTe01k,16078
|
|
13
33
|
mapFolding/reference/hunterNumba.py,sha256=iLfyqwGdAh6c5GbapnKsWhAsNsR3O-fyGGHAdohluLw,7258
|
|
14
|
-
mapFolding/reference/irvineJavaPort.py,sha256=
|
|
34
|
+
mapFolding/reference/irvineJavaPort.py,sha256=XnsL4g33LRrYwAhcrAVt-ujsP6QD6fbyCsGYzcm9g_k,3724
|
|
15
35
|
mapFolding/reference/jaxCount.py,sha256=TuDNKOnyhQfuixKmIxO9Algv7dvy7KMGhgsV3h96FGE,14853
|
|
16
36
|
mapFolding/reference/lunnonNumpy.py,sha256=mMgrgbrBpe4nmo72ThEI-MGH0OwEHmfMPczSXHp2qKo,4357
|
|
17
37
|
mapFolding/reference/lunnonWhile.py,sha256=ZL8GAQtPs5nJZSgoDl5USrLSS_zs03y98y1Z9E4jOmQ,3799
|
|
38
|
+
mapFolding/reference/matrixMeandersBaseline.py,sha256=0QEzcOTvaOb0-6MiKUe1Uxoi-ESVIG5rlZxUA1e_l_s,2965
|
|
39
|
+
mapFolding/reference/matrixMeandersBaselineAnnex.py,sha256=sl0UWwivpnbzIfi6E5cD0vSpHlSUu-Htw4yb4aN-Eg4,5809
|
|
18
40
|
mapFolding/reference/rotatedEntryPoint.py,sha256=5ughpKUT2JQhoAKgoDUdYNjgWQYPGV8v-7dWEAdDmfE,10274
|
|
19
41
|
mapFolding/reference/total_countPlus1vsPlusN.py,sha256=yJZAVLVdoXqHag2_N6_6CT-Q6HXBgRro-eny93-Rlpw,9307
|
|
20
42
|
mapFolding/reference/jobsCompleted/__init__.py,sha256=TU93ZGUW1xEkT6d9mQFn_rp5DvRy0ZslEB2Q6MF5ZDc,2596
|
|
@@ -28,7 +50,7 @@ mapFolding/someAssemblyRequired/getLLVMforNoReason.py,sha256=tY0-2K0BFkwLAAjSrFJ
|
|
|
28
50
|
mapFolding/someAssemblyRequired/infoBooth.py,sha256=GWiqnHbqk7te_pvVuk4G_gbFa_W2aeSx19w4pakvqfM,2300
|
|
29
51
|
mapFolding/someAssemblyRequired/makeAllModules.py,sha256=o22qQ35N9M3N3kra16IayOpXMI1bkwVNQ5c04_rxMGw,44295
|
|
30
52
|
mapFolding/someAssemblyRequired/makeJobTheorem2Numba.py,sha256=ZSplXKPwRAbvMA2bvEGcXFdgvuYGBk3Ncxajzk-Zy0A,17170
|
|
31
|
-
mapFolding/someAssemblyRequired/makeJobTheorem2codon.py,sha256=
|
|
53
|
+
mapFolding/someAssemblyRequired/makeJobTheorem2codon.py,sha256=Py6WubBaBz__MdpSTTmdtV9VjMciIx8DWiS_h25OVEI,11300
|
|
32
54
|
mapFolding/someAssemblyRequired/toolkitNumba.py,sha256=nCCVsGidAlcKRVAvA__hu4bXtat3B-cO9YloKtqOAc4,14919
|
|
33
55
|
mapFolding/someAssemblyRequired/transformationTools.py,sha256=nPGZsvb5GquaCCxdDh_XzNIZYSiVJpWKd7wfhfRvxnk,11512
|
|
34
56
|
mapFolding/syntheticModules/__init__.py,sha256=evVFqhCGa-WZKDiLcnQWjs-Bj34eRnfSLqz_d7dFYZY,83
|
|
@@ -40,15 +62,15 @@ mapFolding/syntheticModules/theorem2.py,sha256=9jrbZNNX4BWYZW1S0JjvRY2k7RU7I1RNU
|
|
|
40
62
|
mapFolding/syntheticModules/theorem2Numba.py,sha256=-cKjNyxgUMFhEyFVs0VJ7hw4LfrV0WSNK5tPYbQ1oNU,3369
|
|
41
63
|
mapFolding/syntheticModules/theorem2Trimmed.py,sha256=DHW3NxBdtABQYBKm2WRvfQ5kzc2_UwGI2h4ePuYEJoM,2685
|
|
42
64
|
mapFolding/tests/__init__.py,sha256=QVCHSMFVvTxV3mAyYOLkMFAFyBJ514zdoVnDmpBJnTo,1336
|
|
43
|
-
mapFolding/tests/conftest.py,sha256=
|
|
44
|
-
mapFolding/tests/test_computations.py,sha256=
|
|
65
|
+
mapFolding/tests/conftest.py,sha256=VZ9l0Vd2d-hdp6cVBmsTkYA7FZIH0cEgdeJx844oe3A,14624
|
|
66
|
+
mapFolding/tests/test_computations.py,sha256=OjX7zECx2Hr6RsIi0hZZSzaiQJa7GBRLUpiASofNp-A,6541
|
|
45
67
|
mapFolding/tests/test_filesystem.py,sha256=0rYQ62f4e3HOoymXrxDWbqNEBJQ7DGN8RUOMI84tE2Q,3892
|
|
46
|
-
mapFolding/tests/test_oeis.py,sha256=
|
|
68
|
+
mapFolding/tests/test_oeis.py,sha256=ejqaOMB61c1oUEBblPPBG9hFFXffpKuIS0CJMe7Rd1o,5497
|
|
47
69
|
mapFolding/tests/test_other.py,sha256=ScBiJ78LnyAaW-RhxcouX6Xw10wgpSdqfvT4LO3WjnQ,4766
|
|
48
70
|
mapFolding/tests/test_tasks.py,sha256=_pr9JRWjjNKA7sww70XvkJJdGPruBVzubM63RmD_Du0,4013
|
|
49
|
-
mapfolding-0.
|
|
50
|
-
mapfolding-0.
|
|
51
|
-
mapfolding-0.
|
|
52
|
-
mapfolding-0.
|
|
53
|
-
mapfolding-0.
|
|
54
|
-
mapfolding-0.
|
|
71
|
+
mapfolding-0.14.1.dist-info/licenses/LICENSE,sha256=NxH5Y8BdC-gNU-WSMwim3uMbID2iNDXJz7fHtuTdXhk,19346
|
|
72
|
+
mapfolding-0.14.1.dist-info/METADATA,sha256=yu3RbpzV6ly9l-BejCo8RhHhjNO2xQaXldeali2Vxak,5117
|
|
73
|
+
mapfolding-0.14.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
74
|
+
mapfolding-0.14.1.dist-info/entry_points.txt,sha256=F3OUeZR1XDTpoH7k3wXuRb3KF_kXTTeYhu5AGK1SiOQ,146
|
|
75
|
+
mapfolding-0.14.1.dist-info/top_level.txt,sha256=aG3bjFBoxxuaV3Iu1wZAd241Ubs3cdaJtKYBQBDIjsg,11
|
|
76
|
+
mapfolding-0.14.1.dist-info/RECORD,,
|