mapFolding 0.15.3__py3-none-any.whl → 0.16.0__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/__init__.py +22 -20
- mapFolding/_theSSOT.py +56 -62
- mapFolding/_theTypes.py +66 -4
- mapFolding/algorithms/__init__.py +1 -0
- mapFolding/{daoOfMapFolding.py → algorithms/daoOfMapFolding.py} +1 -2
- mapFolding/algorithms/getBucketsTotal.py +137 -0
- mapFolding/algorithms/matrixMeanders.py +519 -0
- mapFolding/algorithms/oeisIDbyFormula.py +347 -0
- mapFolding/algorithms/zCuzDocStoopidoeisIDbyFormula.py +84 -0
- mapFolding/basecamp.py +151 -14
- mapFolding/dataBaskets.py +74 -0
- mapFolding/oeis.py +43 -56
- mapFolding/reference/A000682facts.py +662 -0
- mapFolding/reference/A005316facts.py +62 -0
- mapFolding/reference/matrixMeandersAnalysis/__init__.py +1 -0
- mapFolding/reference/matrixMeandersAnalysis/evenEven.py +144 -0
- mapFolding/reference/matrixMeandersAnalysis/oddEven.py +54 -0
- mapFolding/{_oeisFormulas/matrixMeanders64.py → reference/meandersDumpingGround/matrixMeanders64retired.py} +37 -29
- mapFolding/someAssemblyRequired/A007822/A007822rawMaterials.py +55 -0
- mapFolding/someAssemblyRequired/A007822/__init__.py +0 -0
- mapFolding/someAssemblyRequired/A007822/makeA007822AsynchronousModules.py +185 -0
- mapFolding/someAssemblyRequired/A007822/makeA007822Modules.py +71 -0
- mapFolding/someAssemblyRequired/RecipeJob.py +2 -2
- 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 +1 -1
- mapFolding/someAssemblyRequired/makeJobTheorem2codon.py +5 -2
- mapFolding/someAssemblyRequired/makingModules_count.py +301 -0
- mapFolding/someAssemblyRequired/makingModules_doTheNeedful.py +120 -0
- mapFolding/someAssemblyRequired/mapFolding/__init__.py +0 -0
- mapFolding/someAssemblyRequired/mapFolding/makeMapFoldingModules.py +220 -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/A007822/asynchronous.py +148 -0
- mapFolding/syntheticModules/A007822/asynchronousAnnex.py +68 -0
- mapFolding/syntheticModules/A007822/asynchronousTheorem2.py +53 -0
- mapFolding/syntheticModules/A007822/asynchronousTrimmed.py +47 -0
- mapFolding/syntheticModules/dataPackingA007822.py +1 -1
- mapFolding/tests/conftest.py +28 -9
- mapFolding/tests/test_computations.py +32 -10
- mapFolding/tests/test_oeis.py +2 -20
- mapFolding/trim_memory.py +62 -0
- mapFolding/zCuzDocStoopid/__init__.py +1 -0
- mapFolding/zCuzDocStoopid/makeDocstrings.py +63 -0
- {mapfolding-0.15.3.dist-info → mapfolding-0.16.0.dist-info}/METADATA +9 -2
- mapfolding-0.16.0.dist-info/RECORD +100 -0
- {mapfolding-0.15.3.dist-info → mapfolding-0.16.0.dist-info}/entry_points.txt +0 -1
- mapFolding/_oeisFormulas/A000136.py +0 -4
- mapFolding/_oeisFormulas/A000560.py +0 -4
- mapFolding/_oeisFormulas/A000682.py +0 -85
- mapFolding/_oeisFormulas/A001010.py +0 -19
- mapFolding/_oeisFormulas/A001011.py +0 -5
- mapFolding/_oeisFormulas/A005315.py +0 -4
- mapFolding/_oeisFormulas/A005316.py +0 -10
- mapFolding/_oeisFormulas/A223094.py +0 -7
- mapFolding/_oeisFormulas/A259702.py +0 -4
- mapFolding/_oeisFormulas/A301620.py +0 -6
- mapFolding/_oeisFormulas/Z0Z_aOFn.py +0 -34
- mapFolding/_oeisFormulas/Z0Z_notes.py +0 -16
- mapFolding/_oeisFormulas/Z0Z_oeisMeanders.py +0 -74
- mapFolding/_oeisFormulas/Z0Z_symmetry.py +0 -131
- mapFolding/_oeisFormulas/__init__.py +0 -1
- mapFolding/_oeisFormulas/matrixMeanders.py +0 -134
- mapFolding/_oeisFormulas/matrixMeandersAnnex.py +0 -84
- mapFolding/someAssemblyRequired/A007822rawMaterials.py +0 -46
- mapFolding/someAssemblyRequired/makeAllModules.py +0 -764
- mapfolding-0.15.3.dist-info/RECORD +0 -92
- /mapFolding/reference/{A005316JavaPort.py → meandersDumpingGround/A005316JavaPort.py} +0 -0
- /mapFolding/reference/{A005316imperative.py → meandersDumpingGround/A005316imperative.py} +0 -0
- /mapFolding/reference/{A005316intOptimized.py → meandersDumpingGround/A005316intOptimized.py} +0 -0
- /mapFolding/reference/{A005316optimized128bit.py → meandersDumpingGround/A005316optimized128bit.py} +0 -0
- /mapFolding/reference/{A005316primitiveOptimized.py → meandersDumpingGround/A005316primitiveOptimized.py} +0 -0
- /mapFolding/reference/{A005316redis.py → meandersDumpingGround/A005316redis.py} +0 -0
- /mapFolding/reference/{A005316write2disk.py → meandersDumpingGround/A005316write2disk.py} +0 -0
- /mapFolding/reference/{matrixMeandersBaseline.py → meandersDumpingGround/matrixMeandersBaseline.py} +0 -0
- /mapFolding/reference/{matrixMeandersBaselineAnnex.py → meandersDumpingGround/matrixMeandersBaselineAnnex.py} +0 -0
- /mapFolding/reference/{matrixMeandersBaselineV2.py → meandersDumpingGround/matrixMeandersBaselineV2.py} +0 -0
- /mapFolding/reference/{matrixMeandersSimpleQueue.py → meandersDumpingGround/matrixMeandersSimpleQueue.py} +0 -0
- /mapFolding/reference/{matrixMeandersSlicePop.py → meandersDumpingGround/matrixMeandersSlicePop.py} +0 -0
- /mapFolding/syntheticModules/{algorithmA007822.py → A007822/algorithm.py} +0 -0
- /mapFolding/syntheticModules/{algorithmA007822Numba.py → A007822/algorithmNumba.py} +0 -0
- /mapFolding/syntheticModules/{initializeStateA007822.py → A007822/initializeState.py} +0 -0
- /mapFolding/syntheticModules/{theorem2A007822.py → A007822/theorem2.py} +0 -0
- /mapFolding/syntheticModules/{theorem2A007822Numba.py → A007822/theorem2Numba.py} +0 -0
- /mapFolding/syntheticModules/{theorem2A007822Trimmed.py → A007822/theorem2Trimmed.py} +0 -0
- {mapfolding-0.15.3.dist-info → mapfolding-0.16.0.dist-info}/WHEEL +0 -0
- {mapfolding-0.15.3.dist-info → mapfolding-0.16.0.dist-info}/licenses/LICENSE +0 -0
- {mapfolding-0.15.3.dist-info → mapfolding-0.16.0.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
from mapFolding.dataBaskets import MapFoldingState
|
|
2
|
+
from mapFolding.syntheticModules.A007822.asynchronousAnnex import filterAsymmetricFolds, getAsymmetricFoldsTotal
|
|
3
|
+
|
|
4
|
+
def count(state: MapFoldingState) -> MapFoldingState:
|
|
5
|
+
while state.leaf1ndex > 4:
|
|
6
|
+
if state.leafBelow[0] == 1:
|
|
7
|
+
if state.leaf1ndex > state.leavesTotal:
|
|
8
|
+
filterAsymmetricFolds(state.leafBelow)
|
|
9
|
+
else:
|
|
10
|
+
state.dimensionsUnconstrained = state.dimensionsTotal
|
|
11
|
+
state.gap1ndexCeiling = state.gapRangeStart[state.leaf1ndex - 1]
|
|
12
|
+
state.indexDimension = 0
|
|
13
|
+
while state.indexDimension < state.dimensionsTotal:
|
|
14
|
+
state.leafConnectee = state.connectionGraph[state.indexDimension, state.leaf1ndex, state.leaf1ndex]
|
|
15
|
+
if state.leafConnectee == state.leaf1ndex:
|
|
16
|
+
state.dimensionsUnconstrained -= 1
|
|
17
|
+
else:
|
|
18
|
+
while state.leafConnectee != state.leaf1ndex:
|
|
19
|
+
state.gapsWhere[state.gap1ndexCeiling] = state.leafConnectee
|
|
20
|
+
if state.countDimensionsGapped[state.leafConnectee] == 0:
|
|
21
|
+
state.gap1ndexCeiling += 1
|
|
22
|
+
state.countDimensionsGapped[state.leafConnectee] += 1
|
|
23
|
+
state.leafConnectee = state.connectionGraph[state.indexDimension, state.leaf1ndex, state.leafBelow[state.leafConnectee]]
|
|
24
|
+
state.indexDimension += 1
|
|
25
|
+
if not state.dimensionsUnconstrained:
|
|
26
|
+
state.indexLeaf = 0
|
|
27
|
+
while state.indexLeaf < state.leaf1ndex:
|
|
28
|
+
state.gapsWhere[state.gap1ndexCeiling] = state.indexLeaf
|
|
29
|
+
state.gap1ndexCeiling += 1
|
|
30
|
+
state.indexLeaf += 1
|
|
31
|
+
state.indexMiniGap = state.gap1ndex
|
|
32
|
+
while state.indexMiniGap < state.gap1ndexCeiling:
|
|
33
|
+
state.gapsWhere[state.gap1ndex] = state.gapsWhere[state.indexMiniGap]
|
|
34
|
+
if state.countDimensionsGapped[state.gapsWhere[state.indexMiniGap]] == state.dimensionsUnconstrained:
|
|
35
|
+
state.gap1ndex += 1
|
|
36
|
+
state.countDimensionsGapped[state.gapsWhere[state.indexMiniGap]] = 0
|
|
37
|
+
state.indexMiniGap += 1
|
|
38
|
+
while state.gap1ndex == state.gapRangeStart[state.leaf1ndex - 1]:
|
|
39
|
+
state.leaf1ndex -= 1
|
|
40
|
+
state.leafBelow[state.leafAbove[state.leaf1ndex]] = state.leafBelow[state.leaf1ndex]
|
|
41
|
+
state.leafAbove[state.leafBelow[state.leaf1ndex]] = state.leafAbove[state.leaf1ndex]
|
|
42
|
+
state.gap1ndex -= 1
|
|
43
|
+
state.leafAbove[state.leaf1ndex] = state.gapsWhere[state.gap1ndex]
|
|
44
|
+
state.leafBelow[state.leaf1ndex] = state.leafBelow[state.leafAbove[state.leaf1ndex]]
|
|
45
|
+
state.leafBelow[state.leafAbove[state.leaf1ndex]] = state.leaf1ndex
|
|
46
|
+
state.leafAbove[state.leafBelow[state.leaf1ndex]] = state.leaf1ndex
|
|
47
|
+
state.gapRangeStart[state.leaf1ndex] = state.gap1ndex
|
|
48
|
+
state.leaf1ndex += 1
|
|
49
|
+
else:
|
|
50
|
+
state.groupsOfFolds = getAsymmetricFoldsTotal()
|
|
51
|
+
state.groupsOfFolds *= 2
|
|
52
|
+
state.groupsOfFolds = (state.groupsOfFolds + 1) // 2
|
|
53
|
+
return state
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
from mapFolding.dataBaskets import MapFoldingState
|
|
2
|
+
from mapFolding.syntheticModules.A007822.asynchronousAnnex import filterAsymmetricFolds, getAsymmetricFoldsTotal
|
|
3
|
+
|
|
4
|
+
def count(state: MapFoldingState) -> MapFoldingState:
|
|
5
|
+
while state.leaf1ndex > 4:
|
|
6
|
+
if state.leafBelow[0] == 1:
|
|
7
|
+
if state.leaf1ndex > state.leavesTotal:
|
|
8
|
+
filterAsymmetricFolds(state.leafBelow)
|
|
9
|
+
else:
|
|
10
|
+
state.dimensionsUnconstrained = state.dimensionsTotal
|
|
11
|
+
state.gap1ndexCeiling = state.gapRangeStart[state.leaf1ndex - 1]
|
|
12
|
+
state.indexDimension = 0
|
|
13
|
+
while state.indexDimension < state.dimensionsTotal:
|
|
14
|
+
state.leafConnectee = state.connectionGraph[state.indexDimension, state.leaf1ndex, state.leaf1ndex]
|
|
15
|
+
if state.leafConnectee == state.leaf1ndex:
|
|
16
|
+
state.dimensionsUnconstrained -= 1
|
|
17
|
+
else:
|
|
18
|
+
while state.leafConnectee != state.leaf1ndex:
|
|
19
|
+
state.gapsWhere[state.gap1ndexCeiling] = state.leafConnectee
|
|
20
|
+
if state.countDimensionsGapped[state.leafConnectee] == 0:
|
|
21
|
+
state.gap1ndexCeiling += 1
|
|
22
|
+
state.countDimensionsGapped[state.leafConnectee] += 1
|
|
23
|
+
state.leafConnectee = state.connectionGraph[state.indexDimension, state.leaf1ndex, state.leafBelow[state.leafConnectee]]
|
|
24
|
+
state.indexDimension += 1
|
|
25
|
+
state.indexMiniGap = state.gap1ndex
|
|
26
|
+
while state.indexMiniGap < state.gap1ndexCeiling:
|
|
27
|
+
state.gapsWhere[state.gap1ndex] = state.gapsWhere[state.indexMiniGap]
|
|
28
|
+
if state.countDimensionsGapped[state.gapsWhere[state.indexMiniGap]] == state.dimensionsUnconstrained:
|
|
29
|
+
state.gap1ndex += 1
|
|
30
|
+
state.countDimensionsGapped[state.gapsWhere[state.indexMiniGap]] = 0
|
|
31
|
+
state.indexMiniGap += 1
|
|
32
|
+
while state.gap1ndex == state.gapRangeStart[state.leaf1ndex - 1]:
|
|
33
|
+
state.leaf1ndex -= 1
|
|
34
|
+
state.leafBelow[state.leafAbove[state.leaf1ndex]] = state.leafBelow[state.leaf1ndex]
|
|
35
|
+
state.leafAbove[state.leafBelow[state.leaf1ndex]] = state.leafAbove[state.leaf1ndex]
|
|
36
|
+
state.gap1ndex -= 1
|
|
37
|
+
state.leafAbove[state.leaf1ndex] = state.gapsWhere[state.gap1ndex]
|
|
38
|
+
state.leafBelow[state.leaf1ndex] = state.leafBelow[state.leafAbove[state.leaf1ndex]]
|
|
39
|
+
state.leafBelow[state.leafAbove[state.leaf1ndex]] = state.leaf1ndex
|
|
40
|
+
state.leafAbove[state.leafBelow[state.leaf1ndex]] = state.leaf1ndex
|
|
41
|
+
state.gapRangeStart[state.leaf1ndex] = state.gap1ndex
|
|
42
|
+
state.leaf1ndex += 1
|
|
43
|
+
else:
|
|
44
|
+
state.groupsOfFolds = getAsymmetricFoldsTotal()
|
|
45
|
+
state.groupsOfFolds *= 2
|
|
46
|
+
state.groupsOfFolds = (state.groupsOfFolds + 1) // 2
|
|
47
|
+
return state
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from mapFolding.dataBaskets import Array1DElephino, Array1DLeavesTotal, Array3DLeavesTotal, DatatypeElephino, DatatypeFoldsTotal, DatatypeLeavesTotal, MapFoldingState
|
|
2
|
-
from mapFolding.syntheticModules.
|
|
2
|
+
from mapFolding.syntheticModules.A007822.theorem2Numba import count
|
|
3
3
|
|
|
4
4
|
def sequential(state: MapFoldingState) -> MapFoldingState:
|
|
5
5
|
mapShape: tuple[DatatypeLeavesTotal, ...] = state.mapShape
|
mapFolding/tests/conftest.py
CHANGED
|
@@ -25,7 +25,7 @@ research domain.
|
|
|
25
25
|
|
|
26
26
|
from collections.abc import Callable, Generator, Sequence
|
|
27
27
|
from mapFolding import _theSSOT, getLeavesTotal, makeDataContainer, packageSettings, validateListDimensions
|
|
28
|
-
from mapFolding.oeis import
|
|
28
|
+
from mapFolding.oeis import dictionaryOEISMapFolding, dictionaryOEISMeanders, oeisIDsImplemented
|
|
29
29
|
from pathlib import Path
|
|
30
30
|
from typing import Any
|
|
31
31
|
import numpy
|
|
@@ -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(dictionaryOEISMapFolding[oeisID_1random]['valuesTestValidation'])
|
|
216
216
|
if n < 2:
|
|
217
217
|
continue
|
|
218
|
-
listDimensionsCandidate = list(
|
|
218
|
+
listDimensionsCandidate = list(dictionaryOEISMapFolding[oeisID_1random]['getMapShape'](n))
|
|
219
219
|
|
|
220
220
|
try:
|
|
221
221
|
return validateListDimensions(listDimensionsCandidate)
|
|
@@ -239,10 +239,10 @@ def mapShapeTestCountFolds(oeisID: str) -> tuple[int, ...]:
|
|
|
239
239
|
|
|
240
240
|
"""
|
|
241
241
|
while True:
|
|
242
|
-
n = random.choice(
|
|
242
|
+
n = random.choice(dictionaryOEISMapFolding[oeisID]['valuesTestValidation'])
|
|
243
243
|
if n < 2:
|
|
244
244
|
continue
|
|
245
|
-
listDimensionsCandidate = list(
|
|
245
|
+
listDimensionsCandidate = list(dictionaryOEISMapFolding[oeisID]['getMapShape'](n))
|
|
246
246
|
|
|
247
247
|
try:
|
|
248
248
|
return validateListDimensions(listDimensionsCandidate)
|
|
@@ -267,10 +267,10 @@ def mapShapeTestFunctionality(oeisID_1random: str) -> tuple[int, ...]:
|
|
|
267
267
|
|
|
268
268
|
"""
|
|
269
269
|
while True:
|
|
270
|
-
n = random.choice(
|
|
270
|
+
n = random.choice(dictionaryOEISMapFolding[oeisID_1random]['valuesTestValidation'])
|
|
271
271
|
if n < 2:
|
|
272
272
|
continue
|
|
273
|
-
listDimensionsCandidate = list(
|
|
273
|
+
listDimensionsCandidate = list(dictionaryOEISMapFolding[oeisID_1random]['getMapShape'](n))
|
|
274
274
|
|
|
275
275
|
try:
|
|
276
276
|
return validateListDimensions(listDimensionsCandidate)
|
|
@@ -292,8 +292,8 @@ def mapShapeTestParallelization(oeisID: str) -> tuple[int, ...]:
|
|
|
292
292
|
Map dimensions suitable for testing parallelization features.
|
|
293
293
|
|
|
294
294
|
"""
|
|
295
|
-
n = random.choice(
|
|
296
|
-
return
|
|
295
|
+
n = random.choice(dictionaryOEISMapFolding[oeisID]['valuesTestParallelization'])
|
|
296
|
+
return dictionaryOEISMapFolding[oeisID]['getMapShape'](n)
|
|
297
297
|
|
|
298
298
|
@pytest.fixture
|
|
299
299
|
def mockBenchmarkTimer() -> Generator[unittest.mock.MagicMock | unittest.mock.AsyncMock, Any, None]:
|
|
@@ -350,6 +350,25 @@ def oeisID(request: pytest.FixtureRequest) -> Any:
|
|
|
350
350
|
"""
|
|
351
351
|
return request.param
|
|
352
352
|
|
|
353
|
+
@pytest.fixture(params=tuple(dictionaryOEISMeanders.keys()))
|
|
354
|
+
def oeisIDMeanders(request: pytest.FixtureRequest) -> Any:
|
|
355
|
+
"""Parametrized fixture providing all implemented Meanders OEIS sequence identifiers.
|
|
356
|
+
|
|
357
|
+
(AI generated docstring)
|
|
358
|
+
|
|
359
|
+
Parameters
|
|
360
|
+
----------
|
|
361
|
+
request : pytest.FixtureRequest
|
|
362
|
+
The pytest request object containing the current parameter value.
|
|
363
|
+
|
|
364
|
+
Returns
|
|
365
|
+
-------
|
|
366
|
+
sequenceIdentifier : Any
|
|
367
|
+
OEIS sequence identifier for testing across all implemented Meanders sequences.
|
|
368
|
+
|
|
369
|
+
"""
|
|
370
|
+
return request.param
|
|
371
|
+
|
|
353
372
|
@pytest.fixture
|
|
354
373
|
def oeisID_1random() -> str:
|
|
355
374
|
"""Return one random valid OEIS ID.
|
|
@@ -25,24 +25,26 @@ 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, getFoldsTotalKnown, oeisIDfor_n
|
|
29
|
-
from mapFolding.
|
|
28
|
+
from mapFolding import countFolds, dictionaryOEISMapFolding, dictionaryOEISMeanders, getFoldsTotalKnown, oeisIDfor_n
|
|
29
|
+
from mapFolding.algorithms import oeisIDbyFormula
|
|
30
30
|
from mapFolding.dataBaskets import MapFoldingState
|
|
31
|
-
from mapFolding.oeis import dictionaryOEIS
|
|
32
|
-
from mapFolding.someAssemblyRequired.makeAllModules import parametersNumbaLight
|
|
33
31
|
from mapFolding.someAssemblyRequired.RecipeJob import RecipeJobTheorem2
|
|
32
|
+
from mapFolding.someAssemblyRequired.toolkitNumba import parametersNumbaLight
|
|
34
33
|
from mapFolding.syntheticModules.initializeState import transitionOnGroupsOfFolds
|
|
35
34
|
from mapFolding.tests.conftest import registrarRecordsTemporaryFilesystemObject, standardizedEqualToCallableReturn
|
|
36
35
|
from pathlib import Path, PurePosixPath
|
|
37
|
-
from typing import
|
|
36
|
+
from typing import TYPE_CHECKING
|
|
38
37
|
import importlib.util
|
|
39
38
|
import multiprocessing
|
|
40
39
|
import pytest
|
|
41
40
|
|
|
41
|
+
if TYPE_CHECKING:
|
|
42
|
+
from collections.abc import Callable
|
|
43
|
+
|
|
42
44
|
if __name__ == '__main__':
|
|
43
45
|
multiprocessing.set_start_method('spawn')
|
|
44
46
|
|
|
45
|
-
def
|
|
47
|
+
def test_aOFn_calculate_value_mapFolding(oeisID: str) -> None:
|
|
46
48
|
"""Verify OEIS sequence value calculations against known reference values.
|
|
47
49
|
|
|
48
50
|
Tests the `oeisIDfor_n` function by comparing its calculated output against
|
|
@@ -59,8 +61,28 @@ def test_aOFn_calculate_value(oeisID: str) -> None:
|
|
|
59
61
|
The OEIS sequence identifier to test calculations for.
|
|
60
62
|
|
|
61
63
|
"""
|
|
62
|
-
for n in
|
|
63
|
-
standardizedEqualToCallableReturn(
|
|
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.
|
|
69
|
+
|
|
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.
|
|
72
|
+
|
|
73
|
+
Parameters
|
|
74
|
+
----------
|
|
75
|
+
oeisIDMeanders : str
|
|
76
|
+
The Meanders OEIS sequence identifier to test calculations for.
|
|
77
|
+
|
|
78
|
+
"""
|
|
79
|
+
oeisIDcallable: Callable[[int], int] = getattr(oeisIDbyFormula, oeisIDMeanders)
|
|
80
|
+
for n in dictionaryOEISMeanders[oeisIDMeanders]['valuesTestValidation']:
|
|
81
|
+
standardizedEqualToCallableReturn(
|
|
82
|
+
dictionaryOEISMeanders[oeisIDMeanders]['valuesKnown'][n],
|
|
83
|
+
oeisIDcallable,
|
|
84
|
+
n,
|
|
85
|
+
)
|
|
64
86
|
|
|
65
87
|
@pytest.mark.parametrize('flow', ['daoOfMapFolding', 'numba', 'theorem2', 'theorem2Numba', 'theorem2Trimmed'])
|
|
66
88
|
def test_flowControl(mapShapeTestCountFolds: tuple[int, ...], flow: str) -> None:
|
|
@@ -104,14 +126,14 @@ def test_flowControlByOEISid(oeisID: str, flow: str) -> None:
|
|
|
104
126
|
mapShape = None
|
|
105
127
|
|
|
106
128
|
oeis_n = 2
|
|
107
|
-
for oeis_n in
|
|
129
|
+
for oeis_n in dictionaryOEISMapFolding[oeisID]['valuesTestValidation']:
|
|
108
130
|
if oeis_n < 2:
|
|
109
131
|
continue
|
|
110
132
|
|
|
111
133
|
if oeisID in dictionaryOEISMeanders:
|
|
112
134
|
expected = dictionaryOEISMeanders[oeisID]['valuesKnown'][oeis_n]
|
|
113
135
|
else:
|
|
114
|
-
expected =
|
|
136
|
+
expected = dictionaryOEISMapFolding[oeisID]['valuesKnown'][oeis_n]
|
|
115
137
|
|
|
116
138
|
standardizedEqualToCallableReturn(
|
|
117
139
|
expected
|
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
|
-
_standardizeOEISid,
|
|
29
|
+
_standardizeOEISid, dictionaryOEISMapFolding, 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
|
|
@@ -57,24 +57,6 @@ def test_aOFn_invalid_n(oeisID_1random: str, badN: Any) -> None:
|
|
|
57
57
|
def test_aOFn_zeroDim_A001418() -> None:
|
|
58
58
|
standardizedEqualToCallableReturn(ArithmeticError, oeisIDfor_n, 'A001418', 0)
|
|
59
59
|
|
|
60
|
-
# ===== OEIS Cache Tests =====
|
|
61
|
-
@pytest.mark.parametrize("cacheExists", [True, False])
|
|
62
|
-
@unittest.mock.patch('pathlib.Path.exists')
|
|
63
|
-
@unittest.mock.patch('pathlib.Path.unlink')
|
|
64
|
-
def test_clearOEIScache(mock_unlink: unittest.mock.MagicMock, mock_exists: unittest.mock.MagicMock, cacheExists: bool) -> None:
|
|
65
|
-
"""Test OEIS cache clearing with both existing and non-existing cache."""
|
|
66
|
-
mock_exists.return_value = cacheExists
|
|
67
|
-
clearOEIScache()
|
|
68
|
-
|
|
69
|
-
if cacheExists:
|
|
70
|
-
# Each OEIS ID has two cache files
|
|
71
|
-
expected_calls = len(dictionaryOEIS) * 2
|
|
72
|
-
assert mock_unlink.call_count == expected_calls
|
|
73
|
-
mock_unlink.assert_has_calls([unittest.mock.call(missing_ok=True)] * expected_calls)
|
|
74
|
-
else:
|
|
75
|
-
mock_exists.assert_called_once()
|
|
76
|
-
mock_unlink.assert_not_called()
|
|
77
|
-
|
|
78
60
|
# ===== Command Line Interface Tests =====
|
|
79
61
|
def testHelpText() -> None:
|
|
80
62
|
"""Test that help text is complete and examples are valid."""
|
|
@@ -87,7 +69,7 @@ def testHelpText() -> None:
|
|
|
87
69
|
# Verify content
|
|
88
70
|
for oeisID in oeisIDsImplemented:
|
|
89
71
|
assert oeisID in helpText
|
|
90
|
-
assert
|
|
72
|
+
assert dictionaryOEISMapFolding[oeisID]['description'] in helpText
|
|
91
73
|
|
|
92
74
|
# Extract and verify examples
|
|
93
75
|
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"""Memory management utilities.
|
|
2
|
+
|
|
3
|
+
https://github.com/pandas-dev/pandas/issues/2659#issuecomment-2452943964
|
|
4
|
+
"""
|
|
5
|
+
import ctypes
|
|
6
|
+
import ctypes.wintypes
|
|
7
|
+
import gc
|
|
8
|
+
import logging
|
|
9
|
+
import platform
|
|
10
|
+
|
|
11
|
+
logger = logging.getLogger(__name__)
|
|
12
|
+
|
|
13
|
+
def trim_windows_process_memory(pid: int | None = None) -> bool:
|
|
14
|
+
"""Cause effects similar to malloc_trim on -nix."""
|
|
15
|
+
# Define SIZE_T based on the platform (32-bit or 64-bit)
|
|
16
|
+
if ctypes.sizeof(ctypes.c_void_p) == 4:
|
|
17
|
+
SIZE_T = ctypes.c_uint32
|
|
18
|
+
else:
|
|
19
|
+
SIZE_T = ctypes.c_uint64
|
|
20
|
+
|
|
21
|
+
# Get a handle to the current process
|
|
22
|
+
if not pid:
|
|
23
|
+
pid = ctypes.windll.kernel32.GetCurrentProcess()
|
|
24
|
+
|
|
25
|
+
# Define argument and return types for SetProcessWorkingSetSizeEx
|
|
26
|
+
ctypes.windll.kernel32.SetProcessWorkingSetSizeEx.argtypes = [
|
|
27
|
+
ctypes.wintypes.HANDLE, # Process handle
|
|
28
|
+
SIZE_T, # Minimum working set size
|
|
29
|
+
SIZE_T, # Maximum working set size
|
|
30
|
+
ctypes.wintypes.DWORD, # Flags
|
|
31
|
+
]
|
|
32
|
+
ctypes.windll.kernel32.SetProcessWorkingSetSizeEx.restype = ctypes.wintypes.BOOL
|
|
33
|
+
|
|
34
|
+
# Define constants for SetProcessWorkingSetSizeEx
|
|
35
|
+
QUOTA_LIMITS_HARDWS_MIN_DISABLE = 0x00000002
|
|
36
|
+
|
|
37
|
+
# Attempt to set the working set size
|
|
38
|
+
result = ctypes.windll.kernel32.SetProcessWorkingSetSizeEx(pid, SIZE_T(-1), SIZE_T(-1), QUOTA_LIMITS_HARDWS_MIN_DISABLE)
|
|
39
|
+
|
|
40
|
+
if result == 0:
|
|
41
|
+
# Retrieve the error code
|
|
42
|
+
error_code = ctypes.windll.kernel32.GetLastError()
|
|
43
|
+
message = f"SetProcessWorkingSetSizeEx failed with error code: {error_code}"
|
|
44
|
+
logger.error(message)
|
|
45
|
+
return False
|
|
46
|
+
else:
|
|
47
|
+
return True
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def trim_ram() -> None:
|
|
51
|
+
"""Force python garbage collection.
|
|
52
|
+
|
|
53
|
+
Most importantly, calls malloc_trim/SetProcessWorkingSetSizeEx, which fixes pandas/libc (?) memory leak.
|
|
54
|
+
"""
|
|
55
|
+
gc.collect()
|
|
56
|
+
if platform.system() == "Windows":
|
|
57
|
+
trim_windows_process_memory()
|
|
58
|
+
else:
|
|
59
|
+
try:
|
|
60
|
+
ctypes.CDLL("libc.so.6").malloc_trim(0)
|
|
61
|
+
except Exception:
|
|
62
|
+
logger.exception("malloc_trim attempt failed")
|
|
@@ -0,0 +1 @@
|
|
|
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."""
|
|
@@ -0,0 +1,63 @@
|
|
|
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 dictionaryOEISMapFolding, dictionaryOEISMeanders, packageSettings
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
import ast
|
|
8
|
+
|
|
9
|
+
sourcePrefix: str = 'zCuzDocStoopid'
|
|
10
|
+
|
|
11
|
+
pathRoot: Path = packageSettings.pathPackage / "algorithms"
|
|
12
|
+
|
|
13
|
+
pathFilenameSource: Path = next(iter(pathRoot.glob(f"{sourcePrefix}*.py"))).absolute()
|
|
14
|
+
pathFilenameWrite: Path = pathFilenameSource.with_stem(pathFilenameSource.stem.removeprefix(sourcePrefix))
|
|
15
|
+
|
|
16
|
+
astModule: ast.Module = parsePathFilename2astModule(pathFilenameSource)
|
|
17
|
+
dictionaryFunctionDef: dict[str, ast.FunctionDef] = makeDictionaryFunctionDef(astModule)
|
|
18
|
+
|
|
19
|
+
moduleWarning = """
|
|
20
|
+
NOTE: This is a generated file; edit the source file.
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
oeisID = 'Error during transformation' # `ast.FunctionDef.name` of function in `pathFilenameSource`.
|
|
24
|
+
functionOf: str = 'Error during transformation' # The value of `functionOf` is in the docstring of function `oeisID` in `pathFilenameSource`.
|
|
25
|
+
|
|
26
|
+
for oeisID, FunctionDef in dictionaryFunctionDef.items():
|
|
27
|
+
dictionaryOEIS = dictionaryOEISMapFolding if oeisID in dictionaryOEISMapFolding else dictionaryOEISMeanders
|
|
28
|
+
functionOf = raiseIfNone(ast.get_docstring(FunctionDef))
|
|
29
|
+
|
|
30
|
+
ImaDocstring= f"""
|
|
31
|
+
Compute {oeisID}(n) as a function of {functionOf}.
|
|
32
|
+
|
|
33
|
+
*The On-Line Encyclopedia of Integer Sequences* (OEIS) description of {oeisID} is: "{dictionaryOEIS[oeisID]['description']}"
|
|
34
|
+
|
|
35
|
+
The domain of {oeisID} starts at {dictionaryOEIS[oeisID]['offset']}, therefore for values of `n` < {dictionaryOEIS[oeisID]['offset']}, a(n) is undefined. The smallest value of n for which a(n)
|
|
36
|
+
has not yet been computed is {dictionaryOEIS[oeisID]['valueUnknown']}.
|
|
37
|
+
|
|
38
|
+
Parameters
|
|
39
|
+
----------
|
|
40
|
+
n : int
|
|
41
|
+
Index (n-dex) for a(n) in the sequence of values. "n" (lower case) and "a(n)" are conventions in mathematics.
|
|
42
|
+
|
|
43
|
+
Returns
|
|
44
|
+
-------
|
|
45
|
+
a(n) : int
|
|
46
|
+
{dictionaryOEIS[oeisID]['description']}
|
|
47
|
+
|
|
48
|
+
Would You Like to Know More?
|
|
49
|
+
----------------------------
|
|
50
|
+
OEIS : webpage
|
|
51
|
+
https://oeis.org/{oeisID}
|
|
52
|
+
"""
|
|
53
|
+
|
|
54
|
+
astExprDocstring = Make.Expr(Make.Constant(ImaDocstring))
|
|
55
|
+
|
|
56
|
+
NodeChanger(
|
|
57
|
+
findThis = IfThis.isFunctionDefIdentifier(oeisID)
|
|
58
|
+
, doThat = Grab.bodyAttribute(Grab.index(0, Then.replaceWith(astExprDocstring)))
|
|
59
|
+
).visit(astModule)
|
|
60
|
+
|
|
61
|
+
ast.fix_missing_locations(astModule)
|
|
62
|
+
|
|
63
|
+
writeStringToHere((ast.unparse(astModule)+"\n"), pathFilenameWrite)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mapFolding
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.16.0
|
|
4
4
|
Summary: Map folding, meanders, stamp folding, semi-meanders. Experiment with algorithm transformations and code optimization.
|
|
5
5
|
Author-email: Hunter Hogan <HunterHogan@pm.me>
|
|
6
6
|
License: CC-BY-NC-4.0
|
|
@@ -8,7 +8,7 @@ Project-URL: Donate, https://www.patreon.com/integrated
|
|
|
8
8
|
Project-URL: Homepage, https://github.com/hunterhogan/mapFolding
|
|
9
9
|
Project-URL: Issues, https://github.com/hunterhogan/mapFolding/issues
|
|
10
10
|
Project-URL: Repository, https://github.com/hunterhogan/mapFolding.git
|
|
11
|
-
Keywords: A000136,A000560,A000682,A001010,A001011,A001415,A001416,A001417,A001418,A005315,A005316,A007822,A195646,A223094,A259702,A301620,AST manipulation,GPU acceleration,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
|
|
11
|
+
Keywords: A000136,A000560,A000682,A001010,A001011,A001415,A001416,A001417,A001418,A005315,A005316,A007822,A178961,A195646,A223094,A259702,A301620,AST manipulation,GPU acceleration,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
12
|
Classifier: Development Status :: 4 - Beta
|
|
13
13
|
Classifier: Environment :: Console
|
|
14
14
|
Classifier: Intended Audience :: Developers
|
|
@@ -35,6 +35,7 @@ Requires-Python: >=3.12
|
|
|
35
35
|
Description-Content-Type: text/markdown
|
|
36
36
|
License-File: LICENSE
|
|
37
37
|
Requires-Dist: astToolkit
|
|
38
|
+
Requires-Dist: autoflake
|
|
38
39
|
Requires-Dist: hunterMakesPy
|
|
39
40
|
Requires-Dist: numpy
|
|
40
41
|
Requires-Dist: platformdirs
|
|
@@ -47,8 +48,14 @@ Requires-Dist: setuptools-scm; extra == "development"
|
|
|
47
48
|
Provides-Extra: numba
|
|
48
49
|
Requires-Dist: numba; extra == "numba"
|
|
49
50
|
Requires-Dist: numba_progress; extra == "numba"
|
|
51
|
+
Provides-Extra: pandas
|
|
52
|
+
Requires-Dist: pandas; extra == "pandas"
|
|
53
|
+
Requires-Dist: pyarrow; extra == "pandas"
|
|
54
|
+
Requires-Dist: pyarrow-stubs; extra == "pandas"
|
|
50
55
|
Provides-Extra: testing
|
|
51
56
|
Requires-Dist: numba; extra == "testing"
|
|
57
|
+
Requires-Dist: pandas; extra == "testing"
|
|
58
|
+
Requires-Dist: pyarrow; extra == "testing"
|
|
52
59
|
Requires-Dist: pytest-cov; extra == "testing"
|
|
53
60
|
Requires-Dist: pytest-env; extra == "testing"
|
|
54
61
|
Requires-Dist: pytest-xdist; extra == "testing"
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
mapFolding/__init__.py,sha256=TDo9hax941LW-ea0hyAZsq0NEdhizAXXlNrWj8qX6dE,4012
|
|
2
|
+
mapFolding/_theSSOT.py,sha256=aZsdI_PPWB8S0wrLDs7HqVvL88OIPOti0STrYG776gg,5279
|
|
3
|
+
mapFolding/_theTypes.py,sha256=F2pCHexrlbHTgMpQn58jDhkwAMFUSBp28gQp21n86o0,6559
|
|
4
|
+
mapFolding/basecamp.py,sha256=x13ZipCO0G-6rZSWEqgInWlMDKC5TtH-n_V-wB7lfac,18795
|
|
5
|
+
mapFolding/beDRY.py,sha256=iYATcrYrAWkKaAecjA_awELBtZP5Q3snU4053dIsEwU,13941
|
|
6
|
+
mapFolding/dataBaskets.py,sha256=myijFYlgJuRXYPGpMSQN7Kg7mzLp7LuRgZZqDfQJku8,18088
|
|
7
|
+
mapFolding/filesystemToolkit.py,sha256=Ex5tyugRQurXIgUNVtkQYfWMq8fM4e-izX01MBXU5_8,11006
|
|
8
|
+
mapFolding/oeis.py,sha256=wtvCGXNkSduvf9RGUCJv8qOQoyNH1P8EYHxD_tf6ANU,18652
|
|
9
|
+
mapFolding/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10
|
+
mapFolding/trim_memory.py,sha256=Do5oPwkMvqbrJ6oS7-7aegB9hVD03S1uLPlWXFrCF2c,2042
|
|
11
|
+
mapFolding/algorithms/__init__.py,sha256=gARPqfySaeSWMfApQ5wSxzy7ZdgLdKYsLqsRSEYWwWI,28
|
|
12
|
+
mapFolding/algorithms/daoOfMapFolding.py,sha256=ncTIiBfTsM8SNVx9qefZ0bBcBtviWLSk4iPv3Z9nGiE,5442
|
|
13
|
+
mapFolding/algorithms/getBucketsTotal.py,sha256=5JCgOb_bC4E5ol45TSs1dQtBWWX04aN3DIkonNU9Nh4,5966
|
|
14
|
+
mapFolding/algorithms/matrixMeanders.py,sha256=DLrzdJzkUiylaIX5yG-xZ7Jq75-St6aFIj_3acs8kQc,21750
|
|
15
|
+
mapFolding/algorithms/oeisIDbyFormula.py,sha256=ia79A1GlNS_7cUFs50B_zBB-F35Kf1Ljviy31XWpqnM,11372
|
|
16
|
+
mapFolding/algorithms/zCuzDocStoopidoeisIDbyFormula.py,sha256=zShTDbRgqBXpMrrdNdQ9ZO9rTV4Fq6X8zSO3YPPiIA4,2068
|
|
17
|
+
mapFolding/reference/A000682facts.py,sha256=AAIdA-YttdbOw6msEH3bgFxPcvKZn075ONOtPIQGjxU,14873
|
|
18
|
+
mapFolding/reference/A005316facts.py,sha256=Bavx1EIZ-uKc5xcp0XNC6lzMheXkapIGE5y-gugwryw,1281
|
|
19
|
+
mapFolding/reference/__init__.py,sha256=GKcSgYE49NcTISx-JZbELXyq-eRkMeTL5g4DXInWFw0,2206
|
|
20
|
+
mapFolding/reference/flattened.py,sha256=0eHgLFIeIeVUsI5zF5oSy5iWYrjOMzxr7KjDxiTe01k,16078
|
|
21
|
+
mapFolding/reference/hunterNumba.py,sha256=iLfyqwGdAh6c5GbapnKsWhAsNsR3O-fyGGHAdohluLw,7258
|
|
22
|
+
mapFolding/reference/irvineJavaPort.py,sha256=XnsL4g33LRrYwAhcrAVt-ujsP6QD6fbyCsGYzcm9g_k,3724
|
|
23
|
+
mapFolding/reference/jaxCount.py,sha256=t8ons45zyWNJQ-nmn1qbhNsTkTnRzf7ATauaYvIlkRI,14853
|
|
24
|
+
mapFolding/reference/lunnonNumpy.py,sha256=mMgrgbrBpe4nmo72ThEI-MGH0OwEHmfMPczSXHp2qKo,4357
|
|
25
|
+
mapFolding/reference/lunnonWhile.py,sha256=ZL8GAQtPs5nJZSgoDl5USrLSS_zs03y98y1Z9E4jOmQ,3799
|
|
26
|
+
mapFolding/reference/rotatedEntryPoint.py,sha256=3IJU7Hc2PDSE71wmSkDs4Z3t0Px9NBSzmCsVrgQuQyU,10274
|
|
27
|
+
mapFolding/reference/total_countPlus1vsPlusN.py,sha256=yJZAVLVdoXqHag2_N6_6CT-Q6HXBgRro-eny93-Rlpw,9307
|
|
28
|
+
mapFolding/reference/jobsCompleted/__init__.py,sha256=TU93ZGUW1xEkT6d9mQFn_rp5DvRy0ZslEB2Q6MF5ZDc,2596
|
|
29
|
+
mapFolding/reference/jobsCompleted/[2x19]/p2x19.py,sha256=_tvYtfzMWVo2VtUbIAieoscb4N8FFflgTdW4-ljBUuA,19626
|
|
30
|
+
mapFolding/reference/jobsCompleted/p2x19/p2x19.py,sha256=eZEw4Me4ocTt6VXoK2-Sbd5SowZtxRIbN9dZmc7OCVg,6395
|
|
31
|
+
mapFolding/reference/matrixMeandersAnalysis/__init__.py,sha256=FQbR63_z3_zd3HMrpUxx3_YIcn9znzA0RIggcMntSC8,35
|
|
32
|
+
mapFolding/reference/matrixMeandersAnalysis/evenEven.py,sha256=KfP9G9AG9Qd0kOG67JyLnauHxGmBqMvGVADxqSAHwTk,5009
|
|
33
|
+
mapFolding/reference/matrixMeandersAnalysis/oddEven.py,sha256=igZLaavoFtQCWAtIepPHohD1dVrLyfg-3rY0m4NFpGc,1759
|
|
34
|
+
mapFolding/reference/meandersDumpingGround/A005316JavaPort.py,sha256=6qqTzbD3PTwYGtqaywEURGXtNFx1lp8ofEwpQeEvAHc,4899
|
|
35
|
+
mapFolding/reference/meandersDumpingGround/A005316imperative.py,sha256=hhjUxELOktNBmHrwIoxVA-mcFsOWgg01p780OBeqL04,3816
|
|
36
|
+
mapFolding/reference/meandersDumpingGround/A005316intOptimized.py,sha256=oO9ktdYeFwtosVp5KliwH8JmCSxfjapjBM1iMECuDAc,4121
|
|
37
|
+
mapFolding/reference/meandersDumpingGround/A005316optimized128bit.py,sha256=6JxmVBIQnN0rH0MQIZtu_wgY1Wbms8hZCWarMe5NLLU,3416
|
|
38
|
+
mapFolding/reference/meandersDumpingGround/A005316primitiveOptimized.py,sha256=iFig6Edv1E774xrlVUFLyscC40DqDhV-oh4hOnG2DLI,4116
|
|
39
|
+
mapFolding/reference/meandersDumpingGround/A005316redis.py,sha256=MPeiobrs3VsNZOOKYBg52oVp0OjVDzLEdsRKfrZ9LrU,4328
|
|
40
|
+
mapFolding/reference/meandersDumpingGround/A005316write2disk.py,sha256=NMVrdhe5KhnXQfaQ5Xr7Pwl5oXYEOM1DrMISDDOCVVw,5633
|
|
41
|
+
mapFolding/reference/meandersDumpingGround/matrixMeanders64retired.py,sha256=oRVgf6zkWRjk7dWR-Px41M_5spdvKy_Pich0qd7oxVA,9270
|
|
42
|
+
mapFolding/reference/meandersDumpingGround/matrixMeandersBaseline.py,sha256=8Z98MMfhTCdoa75HWZz4DO166EiHZCu5eHeFzhgK42s,3003
|
|
43
|
+
mapFolding/reference/meandersDumpingGround/matrixMeandersBaselineAnnex.py,sha256=d2Oh4JZxz53ox_ArhIxpMTOuA7rtE9wnEPojpFcnlfc,5817
|
|
44
|
+
mapFolding/reference/meandersDumpingGround/matrixMeandersBaselineV2.py,sha256=VpRiIGhnk-DbxwsHwCeCwXqcKLSNyHl-iRGLDH9ZGMY,7674
|
|
45
|
+
mapFolding/reference/meandersDumpingGround/matrixMeandersSimpleQueue.py,sha256=pOfaS315OKIBG9GSqSJwUDcEhfnV2XduM9IPqHrBvJg,4083
|
|
46
|
+
mapFolding/reference/meandersDumpingGround/matrixMeandersSlicePop.py,sha256=XyiesSQAH1dRplYx_CdR1FzcXvgmmxzj27V4aIqPp7o,5353
|
|
47
|
+
mapFolding/someAssemblyRequired/RecipeJob.py,sha256=3lMDeb5sU1hkJYwaEMBFtl79xu8WCXca4sjndcQD9Ho,9866
|
|
48
|
+
mapFolding/someAssemblyRequired/__init__.py,sha256=3IF8HFIgFisJBQ1i4sx7Nz2iOqVoAG78jwjNJ9q531U,6272
|
|
49
|
+
mapFolding/someAssemblyRequired/_toolIfThis.py,sha256=QC2cmCea18BZ_WpoWoErYCWhROvmd40_i_nBO7YFRaE,6378
|
|
50
|
+
mapFolding/someAssemblyRequired/_toolkitContainers.py,sha256=RJThCzIBWSk-dUO75QhRJgaJk6xz5Pf4-LBN1wv7hxo,13545
|
|
51
|
+
mapFolding/someAssemblyRequired/getLLVMforNoReason.py,sha256=tY0-2K0BFkwLAAjSrFJLPoG8CevDHOFc3OH3TxXANzg,2806
|
|
52
|
+
mapFolding/someAssemblyRequired/infoBooth.py,sha256=ZWFH37S2jMGRbNlmjhNvoaezIk8abS3DvHhy7qVOaQM,2139
|
|
53
|
+
mapFolding/someAssemblyRequired/makeJobTheorem2Numba.py,sha256=MMB3is5IrKwZbx83OSndvCqtxJgTV1YGLjYpv25K_0g,17197
|
|
54
|
+
mapFolding/someAssemblyRequired/makeJobTheorem2codon.py,sha256=_V5Y5X_Wpwx0XEKdr4FWDsOu8SosH2uMCdaqL9OX4u0,11747
|
|
55
|
+
mapFolding/someAssemblyRequired/makingModules_count.py,sha256=ykTyroYhk2_M20FgDskuX4xEos-ecbZtQ7EytxGA0B0,14489
|
|
56
|
+
mapFolding/someAssemblyRequired/makingModules_doTheNeedful.py,sha256=T5i75G2ZnybITeKLLnyEOJVekNlcM_zFHFdhdjAOO-s,6356
|
|
57
|
+
mapFolding/someAssemblyRequired/toolkitMakeModules.py,sha256=ZzoDENTHbOoSSMq7fbF7jYPlbsgtPcNekSHoTIAB6os,7638
|
|
58
|
+
mapFolding/someAssemblyRequired/toolkitNumba.py,sha256=3ujtBaA27CX8yVApnfNRzFpZd3GvsHv1H1vyTiiJIZk,14905
|
|
59
|
+
mapFolding/someAssemblyRequired/transformationTools.py,sha256=LmyUPy-xADrQVjvWx_ufX_nclVOyJdhpF-htR9-nk7M,11513
|
|
60
|
+
mapFolding/someAssemblyRequired/A007822/A007822rawMaterials.py,sha256=FtDnxoMwbNP9C-fnKYHH6q_2qwhjdPHaVlja3d3pk6c,2955
|
|
61
|
+
mapFolding/someAssemblyRequired/A007822/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
62
|
+
mapFolding/someAssemblyRequired/A007822/makeA007822AsynchronousModules.py,sha256=MZD_SgFdIrnG_-mHYYsgsQuhqbbiPkam7iT5XmTcbM0,8389
|
|
63
|
+
mapFolding/someAssemblyRequired/A007822/makeA007822Modules.py,sha256=wIy2qSTp4HDBOLuEQ-81aAuo5LsiWriYNg96BWybqEA,4032
|
|
64
|
+
mapFolding/someAssemblyRequired/mapFolding/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
65
|
+
mapFolding/someAssemblyRequired/mapFolding/makeMapFoldingModules.py,sha256=SNU7Dpqu1agOmSX9DG3Kv8357mirzZiSvvKxn8XjtnM,16716
|
|
66
|
+
mapFolding/syntheticModules/__init__.py,sha256=evVFqhCGa-WZKDiLcnQWjs-Bj34eRnfSLqz_d7dFYZY,83
|
|
67
|
+
mapFolding/syntheticModules/countParallelNumba.py,sha256=6sHWzGc6ch3HjKVB8krvaBec_KoHv3gpfN_F5Vl1SP8,7870
|
|
68
|
+
mapFolding/syntheticModules/daoOfMapFoldingNumba.py,sha256=5oMb8pttNKslN6wss9JIQXSnmjgE2q_2-3fIrh1pEW0,6033
|
|
69
|
+
mapFolding/syntheticModules/dataPacking.py,sha256=SzRmDNr2OZP6Xk4krLqxTuWAUtUJxBDXmHEqlBHzNPI,2407
|
|
70
|
+
mapFolding/syntheticModules/dataPackingA007822.py,sha256=VA9rDEQfaSVNpgbMAXUvckSmU-5PBY6jPmEETnqH-vc,2469
|
|
71
|
+
mapFolding/syntheticModules/initializeState.py,sha256=OTiVi1Ywnlwk8tbwSIFjPJa_yBCINoapaCzGXDAJq_k,3121
|
|
72
|
+
mapFolding/syntheticModules/theorem2.py,sha256=QeXkBScihDatBk4iEMOMSntvhyJISb0G8zwZMQe7JFc,3031
|
|
73
|
+
mapFolding/syntheticModules/theorem2Numba.py,sha256=AFe-KI97ilPgPFA22ASAhfUetaTA249K7By_vqu1Crs,3416
|
|
74
|
+
mapFolding/syntheticModules/theorem2Trimmed.py,sha256=geKX3So1SqhENlKeEO2dV6S3rGsxBp-AItB4hRbwbBI,2699
|
|
75
|
+
mapFolding/syntheticModules/A007822/__init__.py,sha256=evVFqhCGa-WZKDiLcnQWjs-Bj34eRnfSLqz_d7dFYZY,83
|
|
76
|
+
mapFolding/syntheticModules/A007822/algorithm.py,sha256=rJHwImwcFGAysYoNME79qmNhoa3ebRgXb7ktKZLtSZ8,7074
|
|
77
|
+
mapFolding/syntheticModules/A007822/algorithmNumba.py,sha256=k7w-TicOkjV05bYPNK5s0kzWrBzS3EfVfQafZxBBa1Q,7222
|
|
78
|
+
mapFolding/syntheticModules/A007822/asynchronous.py,sha256=1L-5aa7Ivs-QM8DDI3I9Ulfi8AkJ3fd2KdNS6g7YBLE,6270
|
|
79
|
+
mapFolding/syntheticModules/A007822/asynchronousAnnex.py,sha256=m4k0Z_tlmWWgdalaW2SldLprqioVJtKf4oXAGSZf_6M,2644
|
|
80
|
+
mapFolding/syntheticModules/A007822/asynchronousTheorem2.py,sha256=wp6igfkIs54zqPudRMjYiue0UZE4QAu4QlHGbTLnj5U,3271
|
|
81
|
+
mapFolding/syntheticModules/A007822/asynchronousTrimmed.py,sha256=2m86hM0qlbyAjEks20e_KzxfVyjjQIB0iQkLPaFqo8M,2939
|
|
82
|
+
mapFolding/syntheticModules/A007822/initializeState.py,sha256=qizwxyNqKSgnF4MyBWU8Nca9IRbTnp-rrUAirF-ZL-E,4344
|
|
83
|
+
mapFolding/syntheticModules/A007822/theorem2.py,sha256=HflJuuOj6b_cF6zEKmLy74Nzv_7jFrqLmjsN05XM4KQ,4254
|
|
84
|
+
mapFolding/syntheticModules/A007822/theorem2Numba.py,sha256=GppP_WntOrcFSIpIk6jP7PlAb4PlskzEBqfKOJaisSA,4637
|
|
85
|
+
mapFolding/syntheticModules/A007822/theorem2Trimmed.py,sha256=ekbKQ_FIZgaQ9m7NrxDimx5dM2PBDIReGBtpv23jpNc,3922
|
|
86
|
+
mapFolding/tests/__init__.py,sha256=QVCHSMFVvTxV3mAyYOLkMFAFyBJ514zdoVnDmpBJnTo,1336
|
|
87
|
+
mapFolding/tests/conftest.py,sha256=fLBZFStVJEIfbt6PQNVyAEdMVyck_lwhEB0eZYgQSwU,15255
|
|
88
|
+
mapFolding/tests/test_computations.py,sha256=m0JJq71oSQ0ol-rE99SDLwN9LWXp7yamfkFA3-fY0x0,8286
|
|
89
|
+
mapFolding/tests/test_filesystem.py,sha256=0rYQ62f4e3HOoymXrxDWbqNEBJQ7DGN8RUOMI84tE2Q,3892
|
|
90
|
+
mapFolding/tests/test_oeis.py,sha256=qwi9z_BnpeGO4QwTHj_WOiP21gf2rUgDdxhc90zWsl8,4754
|
|
91
|
+
mapFolding/tests/test_other.py,sha256=ScBiJ78LnyAaW-RhxcouX6Xw10wgpSdqfvT4LO3WjnQ,4766
|
|
92
|
+
mapFolding/tests/test_tasks.py,sha256=_pr9JRWjjNKA7sww70XvkJJdGPruBVzubM63RmD_Du0,4013
|
|
93
|
+
mapFolding/zCuzDocStoopid/__init__.py,sha256=kgbAVyTTSsRBvIOOpO6TMSnrJ06JP4-aLA5AlhUwxEI,136
|
|
94
|
+
mapFolding/zCuzDocStoopid/makeDocstrings.py,sha256=Bq9QLptQ8vxdivTemKNU90ZINTKixFL5EBHijqaVhxA,2593
|
|
95
|
+
mapfolding-0.16.0.dist-info/licenses/LICENSE,sha256=NxH5Y8BdC-gNU-WSMwim3uMbID2iNDXJz7fHtuTdXhk,19346
|
|
96
|
+
mapfolding-0.16.0.dist-info/METADATA,sha256=pxPw3oi1Fn2htgavXy2whDt43OX8f0S3D0eY6GxEUGg,5506
|
|
97
|
+
mapfolding-0.16.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
98
|
+
mapfolding-0.16.0.dist-info/entry_points.txt,sha256=-mH9DjW9tDRMPaeoSWKKywG35cR28m12H_jtmrB4eY8,98
|
|
99
|
+
mapfolding-0.16.0.dist-info/top_level.txt,sha256=aG3bjFBoxxuaV3Iu1wZAd241Ubs3cdaJtKYBQBDIjsg,11
|
|
100
|
+
mapfolding-0.16.0.dist-info/RECORD,,
|