mapFolding 0.7.1__py3-none-any.whl → 0.8.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 (48) hide show
  1. mapFolding/__init__.py +33 -4
  2. mapFolding/basecamp.py +14 -0
  3. mapFolding/beDRY.py +93 -82
  4. mapFolding/filesystem.py +124 -90
  5. mapFolding/noHomeYet.py +14 -2
  6. mapFolding/oeis.py +18 -3
  7. mapFolding/reference/flattened.py +46 -45
  8. mapFolding/reference/hunterNumba.py +4 -4
  9. mapFolding/reference/irvineJavaPort.py +1 -1
  10. mapFolding/reference/lunnanNumpy.py +3 -4
  11. mapFolding/reference/lunnanWhile.py +5 -7
  12. mapFolding/reference/rotatedEntryPoint.py +2 -3
  13. mapFolding/someAssemblyRequired/__init__.py +33 -3
  14. mapFolding/someAssemblyRequired/getLLVMforNoReason.py +32 -15
  15. mapFolding/someAssemblyRequired/ingredientsNumba.py +108 -2
  16. mapFolding/someAssemblyRequired/synthesizeNumbaFlow.py +196 -0
  17. mapFolding/someAssemblyRequired/{synthesizeNumbaJob.py → synthesizeNumbaJobVESTIGIAL.py} +19 -23
  18. mapFolding/someAssemblyRequired/transformDataStructures.py +162 -0
  19. mapFolding/someAssemblyRequired/transformationTools.py +607 -252
  20. mapFolding/syntheticModules/numbaCount_doTheNeedful.py +197 -12
  21. mapFolding/theDao.py +37 -16
  22. mapFolding/theSSOT.py +47 -44
  23. {mapfolding-0.7.1.dist-info → mapfolding-0.8.1.dist-info}/METADATA +51 -46
  24. mapfolding-0.8.1.dist-info/RECORD +39 -0
  25. {mapfolding-0.7.1.dist-info → mapfolding-0.8.1.dist-info}/WHEEL +1 -1
  26. tests/conftest.py +2 -3
  27. tests/test_filesystem.py +0 -2
  28. tests/test_other.py +2 -3
  29. tests/test_tasks.py +0 -4
  30. mapFolding/reference/lunnan.py +0 -153
  31. mapFolding/someAssemblyRequired/Z0Z_workbench.py +0 -33
  32. mapFolding/someAssemblyRequired/synthesizeCountingFunctions.py +0 -7
  33. mapFolding/someAssemblyRequired/synthesizeDataConverters.py +0 -135
  34. mapFolding/someAssemblyRequired/synthesizeNumba.py +0 -91
  35. mapFolding/someAssemblyRequired/synthesizeNumbaModules.py +0 -91
  36. mapFolding/someAssemblyRequired/whatWillBe.py +0 -357
  37. mapFolding/syntheticModules/dataNamespaceFlattened.py +0 -30
  38. mapFolding/syntheticModules/multiprocessingCount_doTheNeedful.py +0 -216
  39. mapFolding/syntheticModules/numbaCount.py +0 -90
  40. mapFolding/syntheticModules/numbaCountExample.py +0 -158
  41. mapFolding/syntheticModules/numbaCountSequential.py +0 -111
  42. mapFolding/syntheticModules/numba_doTheNeedful.py +0 -12
  43. mapFolding/syntheticModules/numba_doTheNeedfulExample.py +0 -13
  44. mapfolding-0.7.1.dist-info/RECORD +0 -51
  45. /mapFolding/{syntheticModules → reference}/__init__.py +0 -0
  46. {mapfolding-0.7.1.dist-info → mapfolding-0.8.1.dist-info}/entry_points.txt +0 -0
  47. {mapfolding-0.7.1.dist-info → mapfolding-0.8.1.dist-info/licenses}/LICENSE +0 -0
  48. {mapfolding-0.7.1.dist-info → mapfolding-0.8.1.dist-info}/top_level.txt +0 -0
@@ -1,216 +0,0 @@
1
- from concurrent.futures import ProcessPoolExecutor
2
- from mapFolding.theSSOT import ComputationState
3
- import concurrent.futures
4
- import copy
5
- import multiprocessing
6
-
7
- def activeLeafConnectedToItself(state: ComputationState) -> bool:
8
- return state.leafConnectee == state.leaf1ndex
9
-
10
- def activeLeafGreaterThan0(state: ComputationState) -> bool:
11
- return state.leaf1ndex > 0
12
-
13
- def activeLeafGreaterThanLeavesTotal(state: ComputationState) -> bool:
14
- return state.leaf1ndex > state.leavesTotal
15
-
16
- def activeLeafIsTheFirstLeaf(state: ComputationState) -> bool:
17
- return state.leaf1ndex <= 1
18
-
19
- def allDimensionsAreUnconstrained(state: ComputationState) -> bool:
20
- return not state.dimensionsUnconstrained
21
-
22
- def backtrack(state: ComputationState) -> ComputationState:
23
- state.leaf1ndex -= 1
24
- state.leafBelow[state.leafAbove[state.leaf1ndex]] = state.leafBelow[state.leaf1ndex]
25
- state.leafAbove[state.leafBelow[state.leaf1ndex]] = state.leafAbove[state.leaf1ndex]
26
- return state
27
-
28
- def countGaps(state: ComputationState) -> ComputationState:
29
- state.gapsWhere[state.gap1ndexCeiling] = state.leafConnectee
30
- if state.countDimensionsGapped[state.leafConnectee] == 0:
31
- state = incrementGap1ndexCeiling(state)
32
- state.countDimensionsGapped[state.leafConnectee] += 1
33
- return state
34
-
35
- def decrementDimensionsUnconstrained(state: ComputationState) -> ComputationState:
36
- state.dimensionsUnconstrained -= 1
37
- return state
38
-
39
- def dimensionsUnconstrainedCondition(state: ComputationState) -> bool:
40
- return state.connectionGraph[state.indexDimension, state.leaf1ndex, state.leaf1ndex] == state.leaf1ndex
41
-
42
- def filterCommonGaps(state: ComputationState) -> ComputationState:
43
- state.gapsWhere[state.gap1ndex] = state.gapsWhere[state.indexMiniGap]
44
- if state.countDimensionsGapped[state.gapsWhere[state.indexMiniGap]] == state.dimensionsUnconstrained:
45
- state = incrementActiveGap(state)
46
- state.countDimensionsGapped[state.gapsWhere[state.indexMiniGap]] = 0
47
- return state
48
-
49
- def incrementActiveGap(state: ComputationState) -> ComputationState:
50
- state.gap1ndex += 1
51
- return state
52
-
53
- def incrementGap1ndexCeiling(state: ComputationState) -> ComputationState:
54
- state.gap1ndexCeiling += 1
55
- return state
56
-
57
- def incrementIndexDimension(state: ComputationState) -> ComputationState:
58
- state.indexDimension += 1
59
- return state
60
-
61
- def incrementIndexMiniGap(state: ComputationState) -> ComputationState:
62
- state.indexMiniGap += 1
63
- return state
64
-
65
- def initializeIndexMiniGap(state: ComputationState) -> ComputationState:
66
- state.indexMiniGap = state.gap1ndex
67
- return state
68
-
69
- def initializeLeafConnectee(state: ComputationState) -> ComputationState:
70
- state.leafConnectee = state.connectionGraph[state.indexDimension, state.leaf1ndex, state.leaf1ndex]
71
- return state
72
-
73
- def initializeVariablesToFindGaps(state: ComputationState) -> ComputationState:
74
- state.dimensionsUnconstrained = state.dimensionsTotal
75
- state.gap1ndexCeiling = state.gapRangeStart[state.leaf1ndex - 1]
76
- state.indexDimension = 0
77
- return state
78
-
79
- def insertUnconstrainedLeaf(state: ComputationState) -> ComputationState:
80
- indexLeaf = 0
81
- while indexLeaf < state.leaf1ndex:
82
- state.gapsWhere[state.gap1ndexCeiling] = indexLeaf
83
- state.gap1ndexCeiling += 1
84
- indexLeaf += 1
85
- return state
86
-
87
- def leafBelowSentinelIs1(state: ComputationState) -> bool:
88
- return state.leafBelow[0] == 1
89
-
90
- def loopingLeavesConnectedToActiveLeaf(state: ComputationState) -> bool:
91
- return state.leafConnectee != state.leaf1ndex
92
-
93
- def loopingToActiveGapCeiling(state: ComputationState) -> bool:
94
- return state.indexMiniGap < state.gap1ndexCeiling
95
-
96
- def loopUpToDimensionsTotal(state: ComputationState) -> bool:
97
- return state.indexDimension < state.dimensionsTotal
98
-
99
- def noGapsHere(state: ComputationState) -> bool:
100
- return (state.leaf1ndex > 0) and (state.gap1ndex == state.gapRangeStart[state.leaf1ndex - 1])
101
-
102
- def placeLeaf(state: ComputationState) -> ComputationState:
103
- state.gap1ndex -= 1
104
- state.leafAbove[state.leaf1ndex] = state.gapsWhere[state.gap1ndex]
105
- state.leafBelow[state.leaf1ndex] = state.leafBelow[state.leafAbove[state.leaf1ndex]]
106
- state.leafBelow[state.leafAbove[state.leaf1ndex]] = state.leaf1ndex
107
- state.leafAbove[state.leafBelow[state.leaf1ndex]] = state.leaf1ndex
108
- state.gapRangeStart[state.leaf1ndex] = state.gap1ndex
109
- state.leaf1ndex += 1
110
- return state
111
-
112
- def thereIsAnActiveLeaf(state: ComputationState) -> bool:
113
- return state.leaf1ndex > 0
114
-
115
- def thisIsMyTaskIndex(state: ComputationState) -> bool:
116
- return (state.leaf1ndex != state.taskDivisions) or (state.leafConnectee % state.taskDivisions == state.taskIndex)
117
-
118
- def updateLeafConnectee(state: ComputationState) -> ComputationState:
119
- state.leafConnectee = state.connectionGraph[state.indexDimension, state.leaf1ndex, state.leafBelow[state.leafConnectee]]
120
- return state
121
-
122
- def countInitialize(state: ComputationState) -> ComputationState:
123
- while activeLeafGreaterThan0(state):
124
- if activeLeafIsTheFirstLeaf(state) or leafBelowSentinelIs1(state):
125
- state = initializeVariablesToFindGaps(state)
126
- while loopUpToDimensionsTotal(state):
127
- state = initializeLeafConnectee(state)
128
- if activeLeafConnectedToItself(state):
129
- state = decrementDimensionsUnconstrained(state)
130
- else:
131
- while loopingLeavesConnectedToActiveLeaf(state):
132
- state = countGaps(state)
133
- state = updateLeafConnectee(state)
134
- state = incrementIndexDimension(state)
135
- if allDimensionsAreUnconstrained(state):
136
- state = insertUnconstrainedLeaf(state)
137
- state = initializeIndexMiniGap(state)
138
- while loopingToActiveGapCeiling(state):
139
- state = filterCommonGaps(state)
140
- state = incrementIndexMiniGap(state)
141
- if thereIsAnActiveLeaf(state):
142
- state = placeLeaf(state)
143
- if state.gap1ndex > 0:
144
- break
145
- return state
146
-
147
- def countParallel(state: ComputationState) -> ComputationState:
148
- while activeLeafGreaterThan0(state):
149
- if activeLeafIsTheFirstLeaf(state) or leafBelowSentinelIs1(state):
150
- if activeLeafGreaterThanLeavesTotal(state):
151
- state.groupsOfFolds += 1
152
- else:
153
- state = initializeVariablesToFindGaps(state)
154
- while loopUpToDimensionsTotal(state):
155
- if dimensionsUnconstrainedCondition(state):
156
- state = decrementDimensionsUnconstrained(state)
157
- else:
158
- state = initializeLeafConnectee(state)
159
- while loopingLeavesConnectedToActiveLeaf(state):
160
- if thisIsMyTaskIndex(state):
161
- state = countGaps(state)
162
- state = updateLeafConnectee(state)
163
- state = incrementIndexDimension(state)
164
- state = initializeIndexMiniGap(state)
165
- while loopingToActiveGapCeiling(state):
166
- state = filterCommonGaps(state)
167
- state = incrementIndexMiniGap(state)
168
- while noGapsHere(state):
169
- state = backtrack(state)
170
- if thereIsAnActiveLeaf(state):
171
- state = placeLeaf(state)
172
- state.foldGroups[state.taskIndex] = state.groupsOfFolds
173
- return state
174
-
175
- def countSequential(state: ComputationState) -> ComputationState:
176
- while activeLeafGreaterThan0(state):
177
- if activeLeafIsTheFirstLeaf(state) or leafBelowSentinelIs1(state):
178
- if activeLeafGreaterThanLeavesTotal(state):
179
- state.groupsOfFolds += 1
180
- else:
181
- state = initializeVariablesToFindGaps(state)
182
- while loopUpToDimensionsTotal(state):
183
- state = initializeLeafConnectee(state)
184
- if activeLeafConnectedToItself(state):
185
- state = decrementDimensionsUnconstrained(state)
186
- else:
187
- while loopingLeavesConnectedToActiveLeaf(state):
188
- state = countGaps(state)
189
- state = updateLeafConnectee(state)
190
- state = incrementIndexDimension(state)
191
- state = initializeIndexMiniGap(state)
192
- while loopingToActiveGapCeiling(state):
193
- state = filterCommonGaps(state)
194
- state = incrementIndexMiniGap(state)
195
- while noGapsHere(state):
196
- state = backtrack(state)
197
- if thereIsAnActiveLeaf(state):
198
- state = placeLeaf(state)
199
- state.foldGroups[state.taskIndex] = state.groupsOfFolds
200
- return state
201
-
202
- def doTheNeedful(state: ComputationState) -> ComputationState:
203
- state = countInitialize(state)
204
- if state.taskDivisions > 0:
205
- multiprocessing.set_start_method('spawn')
206
- dictionaryConcurrency: dict[int, concurrent.futures.Future[ComputationState]] = {}
207
- with ProcessPoolExecutor() as concurrencyManager:
208
- for indexSherpa in range(state.taskDivisions):
209
- stateParallel = copy.deepcopy(state)
210
- stateParallel.taskIndex = indexSherpa
211
- dictionaryConcurrency[indexSherpa] = concurrencyManager.submit(countParallel, stateParallel)
212
- for indexSherpa in range(state.taskDivisions):
213
- state.foldGroups[indexSherpa] = dictionaryConcurrency[indexSherpa].result().foldGroups[indexSherpa]
214
- return state
215
- else:
216
- return countSequential(state)
@@ -1,90 +0,0 @@
1
- from import , ,
2
- from mapFolding.theSSOT import ComputationState, ComputationState, ComputationState
3
- import copy
4
-
5
- @(ComputationState(ComputationState), _nrt=True, boundscheck=False, cache=True, error_model='numpy', fastmath=True, forceinline=True, inline='always', looplift=False, no_cfunc_wrapper=True, no_cpython_wrapper=True, nopython=True, parallel=True)
6
- def countParallel(statePARALLEL: ComputationState) -> ComputationState:
7
- stateComplete = copy.deepcopy(statePARALLEL)
8
- for indexSherpa in range(statePARALLEL.taskDivisions):
9
- state = copy.deepcopy(statePARALLEL)
10
- state.taskIndex = indexSherpa
11
- while state.leaf1ndex > 0:
12
- if state.leaf1ndex <= 1 or state.leafBelow[0] == 1:
13
- if state.leaf1ndex > state.leavesTotal:
14
- state.groupsOfFolds += 1
15
- else:
16
- state = state
17
- while state.indexDimension < state.dimensionsTotal:
18
- if state.connectionGraph[state.indexDimension, state.leaf1ndex, state.leaf1ndex] == state.leaf1ndex:
19
- state = state
20
- else:
21
- state = state
22
- while state.leafConnectee != state.leaf1ndex:
23
- if state.leaf1ndex != state.taskDivisions or state.leafConnectee % state.taskDivisions == state.taskIndex:
24
- state = state
25
- state = state
26
- state = state
27
- state = state
28
- while state.indexMiniGap < state.gap1ndexCeiling:
29
- state = state
30
- state = state
31
- while state.leaf1ndex > 0 and state.gap1ndex == state.gapRangeStart[state.leaf1ndex - 1]:
32
- state = state
33
- if state.leaf1ndex > 0:
34
- state = state
35
- stateComplete.foldGroups[state.taskIndex] = state.groupsOfFolds
36
- return stateComplete
37
-
38
- @(ComputationState(ComputationState), _nrt=True, boundscheck=False, cache=True, error_model='numpy', fastmath=True, forceinline=True, inline='always', looplift=False, no_cfunc_wrapper=True, no_cpython_wrapper=True, nopython=True, parallel=False)
39
- def countSequential(state: ComputationState) -> ComputationState:
40
- while state.leaf1ndex > 0:
41
- if state.leaf1ndex <= 1 or state.leafBelow[0] == 1:
42
- if state.leaf1ndex > state.leavesTotal:
43
- state.groupsOfFolds += 1
44
- else:
45
- state = state
46
- while state.indexDimension < state.dimensionsTotal:
47
- state = state
48
- if state.leafConnectee == state.leaf1ndex:
49
- state = state
50
- else:
51
- while state.leafConnectee != state.leaf1ndex:
52
- state = state
53
- state = state
54
- state = state
55
- state = state
56
- while state.indexMiniGap < state.gap1ndexCeiling:
57
- state = state
58
- state = state
59
- while state.leaf1ndex > 0 and state.gap1ndex == state.gapRangeStart[state.leaf1ndex - 1]:
60
- state = state
61
- if state.leaf1ndex > 0:
62
- state = state
63
- state.foldGroups[state.taskIndex] = state.groupsOfFolds
64
- return state
65
-
66
- @(ComputationState(ComputationState), _nrt=True, boundscheck=False, cache=True, error_model='numpy', fastmath=True, forceinline=True, inline='always', looplift=False, no_cfunc_wrapper=False, no_cpython_wrapper=False, nopython=True, parallel=False)
67
- def countInitialize(state: ComputationState) -> ComputationState:
68
- while state.leaf1ndex > 0:
69
- if state.leaf1ndex <= 1 or state.leafBelow[0] == 1:
70
- state = state
71
- while state.indexDimension < state.dimensionsTotal:
72
- state = state
73
- if state.leafConnectee == state.leaf1ndex:
74
- state = state
75
- else:
76
- while state.leafConnectee != state.leaf1ndex:
77
- state = state
78
- state = state
79
- state = state
80
- if not state.dimensionsUnconstrained:
81
- state = state
82
- state = state
83
- while state.indexMiniGap < state.gap1ndexCeiling:
84
- state = state
85
- state = state
86
- if state.leaf1ndex > 0:
87
- state = state
88
- if state.gap1ndex > 0:
89
- break
90
- return state
@@ -1,158 +0,0 @@
1
- from mapFolding.theSSOT import indexMy, indexTrack
2
- from numba import uint16, prange, int64, jit
3
- from numpy import ndarray, dtype, integer
4
- from typing import Any
5
-
6
- @jit((uint16[:, :, ::1], uint16[::1], uint16[::1], uint16[:, ::1]), _nrt=True, boundscheck=False, cache=True, error_model='numpy', fastmath=True, forceinline=True, inline='always', looplift=False, no_cfunc_wrapper=False, no_cpython_wrapper=False, nopython=True, parallel=False)
7
- def countInitialize(connectionGraph: ndarray[tuple[int, int, int], dtype[integer[Any]]], gapsWhere: ndarray[tuple[int], dtype[integer[Any]]], my: ndarray[tuple[int], dtype[integer[Any]]], track: ndarray[tuple[int, int], dtype[integer[Any]]]) -> None:
8
- while my[indexMy.leaf1ndex] > 0:
9
- if my[indexMy.leaf1ndex] <= 1 or track[indexTrack.leafBelow, 0] == 1:
10
- my[indexMy.dimensionsUnconstrained] = my[indexMy.dimensionsTotal]
11
- my[indexMy.gap1ndexCeiling] = track[indexTrack.gapRangeStart, my[indexMy.leaf1ndex] - 1]
12
- my[indexMy.indexDimension] = 0
13
- while my[indexMy.indexDimension] < my[indexMy.dimensionsTotal]:
14
- if connectionGraph[my[indexMy.indexDimension], my[indexMy.leaf1ndex], my[indexMy.leaf1ndex]] == my[indexMy.leaf1ndex]:
15
- my[indexMy.dimensionsUnconstrained] -= 1
16
- else:
17
- my[indexMy.leafConnectee] = connectionGraph[my[indexMy.indexDimension], my[indexMy.leaf1ndex], my[indexMy.leaf1ndex]]
18
- while my[indexMy.leafConnectee] != my[indexMy.leaf1ndex]:
19
- gapsWhere[my[indexMy.gap1ndexCeiling]] = my[indexMy.leafConnectee]
20
- if track[indexTrack.countDimensionsGapped, my[indexMy.leafConnectee]] == 0:
21
- my[indexMy.gap1ndexCeiling] += 1
22
- track[indexTrack.countDimensionsGapped, my[indexMy.leafConnectee]] += 1
23
- my[indexMy.leafConnectee] = connectionGraph[my[indexMy.indexDimension], my[indexMy.leaf1ndex], track[indexTrack.leafBelow, my[indexMy.leafConnectee]]]
24
- my[indexMy.indexDimension] += 1
25
- if not my[indexMy.dimensionsUnconstrained]:
26
- my[indexMy.indexLeaf] = 0
27
- while my[indexMy.indexLeaf] < my[indexMy.leaf1ndex]:
28
- gapsWhere[my[indexMy.gap1ndexCeiling]] = my[indexMy.indexLeaf]
29
- my[indexMy.gap1ndexCeiling] += 1
30
- my[indexMy.indexLeaf] += 1
31
- my[indexMy.indexMiniGap] = my[indexMy.gap1ndex]
32
- while my[indexMy.indexMiniGap] < my[indexMy.gap1ndexCeiling]:
33
- gapsWhere[my[indexMy.gap1ndex]] = gapsWhere[my[indexMy.indexMiniGap]]
34
- if track[indexTrack.countDimensionsGapped, gapsWhere[my[indexMy.indexMiniGap]]] == my[indexMy.dimensionsUnconstrained]:
35
- my[indexMy.gap1ndex] += 1
36
- track[indexTrack.countDimensionsGapped, gapsWhere[my[indexMy.indexMiniGap]]] = 0
37
- my[indexMy.indexMiniGap] += 1
38
- if my[indexMy.leaf1ndex] > 0:
39
- my[indexMy.gap1ndex] -= 1
40
- track[indexTrack.leafAbove, my[indexMy.leaf1ndex]] = gapsWhere[my[indexMy.gap1ndex]]
41
- track[indexTrack.leafBelow, my[indexMy.leaf1ndex]] = track[indexTrack.leafBelow, track[indexTrack.leafAbove, my[indexMy.leaf1ndex]]]
42
- track[indexTrack.leafBelow, track[indexTrack.leafAbove, my[indexMy.leaf1ndex]]] = my[indexMy.leaf1ndex]
43
- track[indexTrack.leafAbove, track[indexTrack.leafBelow, my[indexMy.leaf1ndex]]] = my[indexMy.leaf1ndex]
44
- track[indexTrack.gapRangeStart, my[indexMy.leaf1ndex]] = my[indexMy.gap1ndex]
45
- my[indexMy.leaf1ndex] += 1
46
- if my[indexMy.gap1ndex] > 0:
47
- return
48
-
49
- @jit((uint16[:, :, ::1], int64[::1], uint16[::1], uint16[::1], uint16[:, ::1]), _nrt=True, boundscheck=False, cache=True, error_model='numpy', fastmath=True, forceinline=True, inline='always', looplift=False, no_cfunc_wrapper=True, no_cpython_wrapper=True, nopython=True, parallel=True)
50
- def countParallel(connectionGraph: ndarray[tuple[int, int, int], dtype[integer[Any]]], foldGroups: ndarray[tuple[int], dtype[integer[Any]]], gapsWhere: ndarray[tuple[int], dtype[integer[Any]]], my: ndarray[tuple[int], dtype[integer[Any]]], track: ndarray[tuple[int, int], dtype[integer[Any]]]) -> None:
51
- gapsWherePARALLEL = gapsWhere.copy()
52
- myPARALLEL = my.copy()
53
- trackPARALLEL = track.copy()
54
- taskDivisionsPrange = myPARALLEL[indexMy.taskDivisions]
55
- for indexSherpa in prange(taskDivisionsPrange):
56
- groupsOfFolds: int = 0
57
- gapsWhere = gapsWherePARALLEL.copy()
58
- my = myPARALLEL.copy()
59
- track = trackPARALLEL.copy()
60
- my[indexMy.taskIndex] = indexSherpa
61
- while my[indexMy.leaf1ndex] > 0:
62
- if my[indexMy.leaf1ndex] <= 1 or track[indexTrack.leafBelow, 0] == 1:
63
- if my[indexMy.leaf1ndex] > foldGroups[-1]:
64
- groupsOfFolds += 1
65
- else:
66
- my[indexMy.dimensionsUnconstrained] = my[indexMy.dimensionsTotal]
67
- my[indexMy.gap1ndexCeiling] = track[indexTrack.gapRangeStart, my[indexMy.leaf1ndex] - 1]
68
- my[indexMy.indexDimension] = 0
69
- while my[indexMy.indexDimension] < my[indexMy.dimensionsTotal]:
70
- if connectionGraph[my[indexMy.indexDimension], my[indexMy.leaf1ndex], my[indexMy.leaf1ndex]] == my[indexMy.leaf1ndex]:
71
- my[indexMy.dimensionsUnconstrained] -= 1
72
- else:
73
- my[indexMy.leafConnectee] = connectionGraph[my[indexMy.indexDimension], my[indexMy.leaf1ndex], my[indexMy.leaf1ndex]]
74
- while my[indexMy.leafConnectee] != my[indexMy.leaf1ndex]:
75
- if my[indexMy.leaf1ndex] != my[indexMy.taskDivisions] or my[indexMy.leafConnectee] % my[indexMy.taskDivisions] == my[indexMy.taskIndex]:
76
- gapsWhere[my[indexMy.gap1ndexCeiling]] = my[indexMy.leafConnectee]
77
- if track[indexTrack.countDimensionsGapped, my[indexMy.leafConnectee]] == 0:
78
- my[indexMy.gap1ndexCeiling] += 1
79
- track[indexTrack.countDimensionsGapped, my[indexMy.leafConnectee]] += 1
80
- my[indexMy.leafConnectee] = connectionGraph[my[indexMy.indexDimension], my[indexMy.leaf1ndex], track[indexTrack.leafBelow, my[indexMy.leafConnectee]]]
81
- my[indexMy.indexDimension] += 1
82
- my[indexMy.indexMiniGap] = my[indexMy.gap1ndex]
83
- while my[indexMy.indexMiniGap] < my[indexMy.gap1ndexCeiling]:
84
- gapsWhere[my[indexMy.gap1ndex]] = gapsWhere[my[indexMy.indexMiniGap]]
85
- if track[indexTrack.countDimensionsGapped, gapsWhere[my[indexMy.indexMiniGap]]] == my[indexMy.dimensionsUnconstrained]:
86
- my[indexMy.gap1ndex] += 1
87
- track[indexTrack.countDimensionsGapped, gapsWhere[my[indexMy.indexMiniGap]]] = 0
88
- my[indexMy.indexMiniGap] += 1
89
- while my[indexMy.leaf1ndex] > 0 and my[indexMy.gap1ndex] == track[indexTrack.gapRangeStart, my[indexMy.leaf1ndex] - 1]:
90
- my[indexMy.leaf1ndex] -= 1
91
- track[indexTrack.leafBelow, track[indexTrack.leafAbove, my[indexMy.leaf1ndex]]] = track[indexTrack.leafBelow, my[indexMy.leaf1ndex]]
92
- track[indexTrack.leafAbove, track[indexTrack.leafBelow, my[indexMy.leaf1ndex]]] = track[indexTrack.leafAbove, my[indexMy.leaf1ndex]]
93
- if my[indexMy.leaf1ndex] > 0:
94
- my[indexMy.gap1ndex] -= 1
95
- track[indexTrack.leafAbove, my[indexMy.leaf1ndex]] = gapsWhere[my[indexMy.gap1ndex]]
96
- track[indexTrack.leafBelow, my[indexMy.leaf1ndex]] = track[indexTrack.leafBelow, track[indexTrack.leafAbove, my[indexMy.leaf1ndex]]]
97
- track[indexTrack.leafBelow, track[indexTrack.leafAbove, my[indexMy.leaf1ndex]]] = my[indexMy.leaf1ndex]
98
- track[indexTrack.leafAbove, track[indexTrack.leafBelow, my[indexMy.leaf1ndex]]] = my[indexMy.leaf1ndex]
99
- track[indexTrack.gapRangeStart, my[indexMy.leaf1ndex]] = my[indexMy.gap1ndex]
100
- my[indexMy.leaf1ndex] += 1
101
- foldGroups[my[indexMy.taskIndex]] = groupsOfFolds
102
-
103
- @jit((uint16[:, :, ::1], int64[::1], uint16[::1], uint16[::1], uint16[:, ::1]), _nrt=True, boundscheck=False, cache=True, error_model='numpy', fastmath=True, forceinline=True, inline='always', looplift=False, no_cfunc_wrapper=True, no_cpython_wrapper=True, nopython=True, parallel=False)
104
- def countSequential(connectionGraph: ndarray[tuple[int, int, int], dtype[integer[Any]]], foldGroups: ndarray[tuple[int], dtype[integer[Any]]], gapsWhere: ndarray[tuple[int], dtype[integer[Any]]], my: ndarray[tuple[int], dtype[integer[Any]]], track: ndarray[tuple[int, int], dtype[integer[Any]]]) -> None:
105
- leafBelow = track[indexTrack.leafBelow.value]
106
- gapRangeStart = track[indexTrack.gapRangeStart.value]
107
- countDimensionsGapped = track[indexTrack.countDimensionsGapped.value]
108
- leafAbove = track[indexTrack.leafAbove.value]
109
- leaf1ndex = my[indexMy.leaf1ndex.value]
110
- dimensionsUnconstrained = my[indexMy.dimensionsUnconstrained.value]
111
- dimensionsTotal = my[indexMy.dimensionsTotal.value]
112
- gap1ndexCeiling = my[indexMy.gap1ndexCeiling.value]
113
- indexDimension = my[indexMy.indexDimension.value]
114
- leafConnectee = my[indexMy.leafConnectee.value]
115
- indexMiniGap = my[indexMy.indexMiniGap.value]
116
- gap1ndex = my[indexMy.gap1ndex.value]
117
- taskIndex = my[indexMy.taskIndex.value]
118
- groupsOfFolds: int = 0
119
- while leaf1ndex > 0:
120
- if leaf1ndex <= 1 or leafBelow[0] == 1:
121
- if leaf1ndex > foldGroups[-1]:
122
- groupsOfFolds += 1
123
- else:
124
- dimensionsUnconstrained = dimensionsTotal
125
- gap1ndexCeiling = gapRangeStart[leaf1ndex - 1]
126
- indexDimension = 0
127
- while indexDimension < dimensionsTotal:
128
- leafConnectee = connectionGraph[indexDimension, leaf1ndex, leaf1ndex]
129
- if leafConnectee == leaf1ndex:
130
- dimensionsUnconstrained -= 1
131
- else:
132
- while leafConnectee != leaf1ndex:
133
- gapsWhere[gap1ndexCeiling] = leafConnectee
134
- if countDimensionsGapped[leafConnectee] == 0:
135
- gap1ndexCeiling += 1
136
- countDimensionsGapped[leafConnectee] += 1
137
- leafConnectee = connectionGraph[indexDimension, leaf1ndex, leafBelow[leafConnectee]]
138
- indexDimension += 1
139
- indexMiniGap = gap1ndex
140
- while indexMiniGap < gap1ndexCeiling:
141
- gapsWhere[gap1ndex] = gapsWhere[indexMiniGap]
142
- if countDimensionsGapped[gapsWhere[indexMiniGap]] == dimensionsUnconstrained:
143
- gap1ndex += 1
144
- countDimensionsGapped[gapsWhere[indexMiniGap]] = 0
145
- indexMiniGap += 1
146
- while leaf1ndex > 0 and gap1ndex == gapRangeStart[leaf1ndex - 1]:
147
- leaf1ndex -= 1
148
- leafBelow[leafAbove[leaf1ndex]] = leafBelow[leaf1ndex]
149
- leafAbove[leafBelow[leaf1ndex]] = leafAbove[leaf1ndex]
150
- if leaf1ndex > 0:
151
- gap1ndex -= 1
152
- leafAbove[leaf1ndex] = gapsWhere[gap1ndex]
153
- leafBelow[leaf1ndex] = leafBelow[leafAbove[leaf1ndex]]
154
- leafBelow[leafAbove[leaf1ndex]] = leaf1ndex
155
- leafAbove[leafBelow[leaf1ndex]] = leaf1ndex
156
- gapRangeStart[leaf1ndex] = gap1ndex
157
- leaf1ndex += 1
158
- foldGroups[taskIndex] = groupsOfFolds
@@ -1,111 +0,0 @@
1
- from mapFolding.theDao import countInitialize, doTheNeedful
2
- from mapFolding.theSSOT import Array1DElephino, Array1DLeavesTotal, Array3D, ComputationState, DatatypeElephino, DatatypeFoldsTotal, DatatypeLeavesTotal
3
- from numba import jit
4
-
5
- @jit(_nrt=True, boundscheck=False, cache=True, error_model='numpy', fastmath=True, forceinline=True, inline='always', looplift=False, nopython=True, parallel=False)
6
- def countSequential(
7
- connectionGraph: Array3D,
8
- countDimensionsGapped: Array1DLeavesTotal,
9
- dimensionsTotal: DatatypeLeavesTotal,
10
- dimensionsUnconstrained: DatatypeLeavesTotal,
11
- gap1ndex: DatatypeLeavesTotal,
12
- gap1ndexCeiling: DatatypeElephino,
13
- gapRangeStart: Array1DElephino,
14
- gapsWhere: Array1DLeavesTotal,
15
- groupsOfFolds: DatatypeFoldsTotal,
16
- indexDimension: DatatypeLeavesTotal,
17
- indexMiniGap: DatatypeElephino,
18
- leaf1ndex: DatatypeElephino,
19
- leafAbove: Array1DLeavesTotal,
20
- leafBelow: Array1DLeavesTotal,
21
- leafConnectee: DatatypeElephino,
22
- leavesTotal: DatatypeLeavesTotal,
23
- ) -> DatatypeFoldsTotal:
24
-
25
- while leaf1ndex > 0:
26
- if leaf1ndex <= 1 or leafBelow[0] == 1:
27
- if leaf1ndex > leavesTotal:
28
- groupsOfFolds += 1
29
- else:
30
- dimensionsUnconstrained = dimensionsTotal
31
- gap1ndexCeiling = gapRangeStart[leaf1ndex - 1]
32
- indexDimension = 0
33
- while indexDimension < dimensionsTotal:
34
- leafConnectee = connectionGraph[indexDimension, leaf1ndex, leaf1ndex]
35
- if leafConnectee == leaf1ndex:
36
- dimensionsUnconstrained -= 1
37
- else:
38
- while leafConnectee != leaf1ndex:
39
- gapsWhere[gap1ndexCeiling] = leafConnectee
40
- if countDimensionsGapped[leafConnectee] == 0:
41
- gap1ndexCeiling += 1
42
- countDimensionsGapped[leafConnectee] += 1
43
- leafConnectee = connectionGraph[indexDimension, leaf1ndex, leafBelow[leafConnectee]]
44
- indexDimension += 1
45
- indexMiniGap = gap1ndex
46
- while indexMiniGap < gap1ndexCeiling:
47
- gapsWhere[gap1ndex] = gapsWhere[indexMiniGap]
48
- if countDimensionsGapped[gapsWhere[indexMiniGap]] == dimensionsUnconstrained:
49
- gap1ndex += 1
50
- countDimensionsGapped[gapsWhere[indexMiniGap]] = 0
51
- indexMiniGap += 1
52
- while leaf1ndex > 0 and gap1ndex == gapRangeStart[leaf1ndex - 1]:
53
- leaf1ndex -= 1
54
- leafBelow[leafAbove[leaf1ndex]] = leafBelow[leaf1ndex]
55
- leafAbove[leafBelow[leaf1ndex]] = leafAbove[leaf1ndex]
56
- if leaf1ndex > 0:
57
- gap1ndex -= 1
58
- leafAbove[leaf1ndex] = gapsWhere[gap1ndex]
59
- leafBelow[leaf1ndex] = leafBelow[leafAbove[leaf1ndex]]
60
- leafBelow[leafAbove[leaf1ndex]] = leaf1ndex
61
- leafAbove[leafBelow[leaf1ndex]] = leaf1ndex
62
- gapRangeStart[leaf1ndex] = gap1ndex
63
- leaf1ndex += 1
64
- return groupsOfFolds
65
-
66
- def flattenData(state: ComputationState) -> ComputationState:
67
-
68
- if state.taskDivisions > 0:
69
- return doTheNeedful(state)
70
-
71
- state = countInitialize(state)
72
-
73
- connectionGraph: Array3D = state.connectionGraph
74
- countDimensionsGapped: Array1DLeavesTotal = state.countDimensionsGapped
75
- dimensionsTotal: DatatypeLeavesTotal = state.dimensionsTotal
76
- dimensionsUnconstrained: DatatypeLeavesTotal = state.dimensionsUnconstrained
77
- gap1ndex: DatatypeLeavesTotal = state.gap1ndex
78
- gap1ndexCeiling: DatatypeElephino = state.gap1ndexCeiling
79
- gapRangeStart: Array1DElephino = state.gapRangeStart
80
- gapsWhere: Array1DLeavesTotal = state.gapsWhere
81
- groupsOfFolds: DatatypeFoldsTotal = state.groupsOfFolds
82
- indexDimension: DatatypeLeavesTotal = state.indexDimension
83
- indexMiniGap: DatatypeElephino = state.indexMiniGap
84
- leaf1ndex: DatatypeElephino = state.leaf1ndex
85
- leafAbove: Array1DLeavesTotal = state.leafAbove
86
- leafBelow: Array1DLeavesTotal = state.leafBelow
87
- leafConnectee: DatatypeElephino = state.leafConnectee
88
- leavesTotal: DatatypeLeavesTotal = state.leavesTotal
89
-
90
- groupsOfFolds = countSequential(
91
- connectionGraph = connectionGraph,
92
- countDimensionsGapped = countDimensionsGapped,
93
- dimensionsTotal = dimensionsTotal,
94
- dimensionsUnconstrained = dimensionsUnconstrained,
95
- gap1ndex = gap1ndex,
96
- gap1ndexCeiling = gap1ndexCeiling,
97
- gapRangeStart = gapRangeStart,
98
- gapsWhere = gapsWhere,
99
- groupsOfFolds = groupsOfFolds,
100
- indexDimension = indexDimension,
101
- indexMiniGap = indexMiniGap,
102
- leaf1ndex = leaf1ndex,
103
- leafAbove = leafAbove,
104
- leafBelow = leafBelow,
105
- leafConnectee = leafConnectee,
106
- leavesTotal = leavesTotal,
107
- )
108
-
109
- state.groupsOfFolds = state.foldGroups[state.taskIndex] = groupsOfFolds
110
-
111
- return state
@@ -1,12 +0,0 @@
1
- from import
2
- from mapFolding.syntheticModules.numbaCount import countInitialize, countParallel, countSequential
3
- from mapFolding.theSSOT import ComputationState
4
- import copy
5
-
6
- @(ComputationState(ComputationState), _nrt=True, boundscheck=False, cache=True, error_model='numpy', fastmath=True, forceinline=True, inline='always', looplift=False, no_cfunc_wrapper=False, no_cpython_wrapper=False, nopython=True, parallel=False)
7
- def doTheNeedful(computationStateInitialized: ComputationState) -> ComputationState:
8
- computationStateInitialized = countInitialize(computationStateInitialized)
9
- if computationStateInitialized.taskDivisions > 0:
10
- return countParallel(computationStateInitialized)
11
- else:
12
- return countSequential(computationStateInitialized)
@@ -1,13 +0,0 @@
1
- from mapFolding import indexMy
2
- from mapFolding.syntheticModules.numbaCount import countInitialize, countSequential, countParallel
3
- from numba import uint16, int64, jit
4
- from numpy import ndarray, dtype, integer
5
- from typing import Any
6
-
7
- @jit((uint16[:, :, ::1], int64[::1], uint16[::1], uint16[::1], uint16[::1], uint16[:, ::1]), _nrt=True, boundscheck=False, cache=True, error_model='numpy', fastmath=True, forceinline=True, inline='always', looplift=False, no_cfunc_wrapper=False, no_cpython_wrapper=False, nopython=True, parallel=False)
8
- def doTheNeedful(connectionGraph: ndarray[tuple[int, int, int], dtype[integer[Any]]], foldGroups: ndarray[tuple[int], dtype[integer[Any]]], gapsWhere: ndarray[tuple[int], dtype[integer[Any]]], mapShape: ndarray[tuple[int], dtype[integer[Any]]], my: ndarray[tuple[int], dtype[integer[Any]]], track: ndarray[tuple[int, int], dtype[integer[Any]]]) -> None:
9
- countInitialize(connectionGraph, gapsWhere, my, track)
10
- if my[indexMy.taskDivisions] > 0:
11
- countParallel(connectionGraph, foldGroups, gapsWhere, my, track)
12
- else:
13
- countSequential(connectionGraph, foldGroups, gapsWhere, my, track)
@@ -1,51 +0,0 @@
1
- mapFolding/__init__.py,sha256=hONqdWnBN1ebgrKZuMIZfI8m-1krSR66L4GTVRwBmw4,203
2
- mapFolding/basecamp.py,sha256=Ik_oH-MpH8f6k-yBzwm99lfkv3pMDgFFEnSSDyiJjsQ,3861
3
- mapFolding/beDRY.py,sha256=Icgj8s6Rgd_oIBdvzwr6dovywdvG3sIVELO-n74W-So,9011
4
- mapFolding/filesystem.py,sha256=KqgsO-jaSWAlYib_9ovoXQY76PcQri09_73u0OqMWC8,4094
5
- mapFolding/noHomeYet.py,sha256=HjxLP-7BGVkKL66T50q4BWnC0Cg2gHUeCKMFuwR2mEQ,785
6
- mapFolding/oeis.py,sha256=xqnL_VyhwRBET-Kdpnf59K5W5metGbW0JiufTlVw7g0,11853
7
- mapFolding/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
- mapFolding/theDao.py,sha256=eQvR6lDMW_dI6qhZmkTqv-Eog79ekfQjap9rg8cavE8,8629
9
- mapFolding/theSSOT.py,sha256=fWEkYyCoioi_jJzu2Qwi11GBIyXBbjcFfKAf3tlL9Aw,13270
10
- mapFolding/reference/flattened.py,sha256=S6D9wiFTlbeoetEqaMLOcA-R22BHOzjqPRujffNxxUM,14875
11
- mapFolding/reference/hunterNumba.py,sha256=jDS0ORHkIhcJ1rzA5hT49sZHKf3rgJOoGesUCcbKFFY,6054
12
- mapFolding/reference/irvineJavaPort.py,sha256=7GvBU0tnS6wpFgkYad3465do9jBQW-2bYvbCYyABPHM,3341
13
- mapFolding/reference/jax.py,sha256=7ji9YWia6Kof0cjcNdiS1GG1rMbC5SBjcyVr_07AeUk,13845
14
- mapFolding/reference/lunnan.py,sha256=iAbJELfW6RKNMdPcBY9b6rGQ-z1zoRf-1XCurCRMOo8,3951
15
- mapFolding/reference/lunnanNumpy.py,sha256=rwVP3WIDXimpAuaxhRIuBYU56nVDTKlfGiclw_FkgUU,3765
16
- mapFolding/reference/lunnanWhile.py,sha256=uRrMT23jTJvoQDlD_FzeIQe_pfMXJG6_bRvs7uhC8z0,3271
17
- mapFolding/reference/rotatedEntryPoint.py,sha256=USZY3n3zwhSE68ATscUuN66t1qShuEbMI790Gz9JFTw,9352
18
- mapFolding/reference/total_countPlus1vsPlusN.py,sha256=wpgay-uqPOBd64Z4Pg6tg40j7-4pzWHGMM6v0bnmjhE,6288
19
- mapFolding/someAssemblyRequired/Z0Z_workbench.py,sha256=XibNQRbX5gGfrkWVfRsW66kHlqphcqVCPz7TyJFcs90,1505
20
- mapFolding/someAssemblyRequired/__init__.py,sha256=pYkG-1LM8emzTeQbGtOfiZsAiklm5DU92-WE63qB-9s,602
21
- mapFolding/someAssemblyRequired/getLLVMforNoReason.py,sha256=sGDzg5HG21Q42M0upRD1NWzOUsd7mZ_9wUKJIQHI13o,1000
22
- mapFolding/someAssemblyRequired/ingredientsNumba.py,sha256=HnWgo1KwIoevUrE5A1WZh4AVFXKQllt8L6RL46JTXEg,2787
23
- mapFolding/someAssemblyRequired/synthesizeCountingFunctions.py,sha256=77iNPPsN8BmwHaYKdXcDKCwoZKS1g41CJNenQB0W-eg,252
24
- mapFolding/someAssemblyRequired/synthesizeDataConverters.py,sha256=czo6Y0ABlwye01ShumObAFtkTn7PBx4Qsh9Jna5BMUw,6187
25
- mapFolding/someAssemblyRequired/synthesizeNumba.py,sha256=cKXvp0BxmYayUBMQ2RJLkVoJUSvzPI1S4Wy_APRM5cI,4788
26
- mapFolding/someAssemblyRequired/synthesizeNumbaJob.py,sha256=w7zLUzLrLXf2N6O75jKvXDoyTJemWB8GOdK4ryqSWbs,22700
27
- mapFolding/someAssemblyRequired/synthesizeNumbaModules.py,sha256=zUclYPmAr6X5qFO3nQK1_HHqdiRq6j3EIBXjeax_b8c,4388
28
- mapFolding/someAssemblyRequired/transformationTools.py,sha256=QAheMJgYWI09PBetyhnJqNhJk_hl6Zlu1TBbDjBwFSs,21001
29
- mapFolding/someAssemblyRequired/whatWillBe.py,sha256=G_r1VD106gTZISyiwhuJosREfRzQd73JLAMpYg8F6O8,14641
30
- mapFolding/syntheticModules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
31
- mapFolding/syntheticModules/dataNamespaceFlattened.py,sha256=vsU4PDEMoEcZ424AzsXOJoXoVlX_bSk-pXSTlDsSN9k,2939
32
- mapFolding/syntheticModules/multiprocessingCount_doTheNeedful.py,sha256=JwZzvF79mvuo2E0Lfs0NeY1QR6JP8FRuwUaRmENwDs8,8482
33
- mapFolding/syntheticModules/numbaCount.py,sha256=znFV9RhZ0WqPA-r-DT92WDgZXUyhdQlrsKmnsGySuKc,4561
34
- mapFolding/syntheticModules/numbaCountExample.py,sha256=Oo0Xeex89sLD15iRt3N76OKRFScKl9qwO84-d5sv6lM,11871
35
- mapFolding/syntheticModules/numbaCountSequential.py,sha256=CtSA3UX2JzoN_uSo0SH7E3coKuHBWaTloQZwbExIPBw,4325
36
- mapFolding/syntheticModules/numbaCount_doTheNeedful.py,sha256=J9wZ9PW5EVduOQWVze7CgpTHkUjRIvBPG8fNuT3IVpA,1145
37
- mapFolding/syntheticModules/numba_doTheNeedful.py,sha256=8kgV2GGjy_nxVi9o_aAtrZzRSxsYr8HVNsVXesf4Kec,767
38
- mapFolding/syntheticModules/numba_doTheNeedfulExample.py,sha256=J9wZ9PW5EVduOQWVze7CgpTHkUjRIvBPG8fNuT3IVpA,1145
39
- tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
40
- tests/conftest.py,sha256=oPc1IS4RXhLQIBskhuawi4GEWhy6kXbM6D2MdX9kDhw,10833
41
- tests/test_computations.py,sha256=YhadlskBh_r5RiefHRy0FlrYQ0FelYbqcSNNSkSJMIY,3368
42
- tests/test_filesystem.py,sha256=7Ova6f4R6lI9rwnnu8SkZgficTYlKEhSzLp-nBRWESM,3183
43
- tests/test_oeis.py,sha256=uxvwmgbnylSDdsVJfuAT0LuYLbIVFwSgdLxHm-xUGBM,5043
44
- tests/test_other.py,sha256=CS64h5NACYmXhG3owBpPDcXv3BpYlXNeLqPcqT4quwg,4303
45
- tests/test_tasks.py,sha256=K5WdCtsM8ghFHX_BMmATsNUTvCICoTHtU-K73QBA4gY,3048
46
- mapfolding-0.7.1.dist-info/LICENSE,sha256=NxH5Y8BdC-gNU-WSMwim3uMbID2iNDXJz7fHtuTdXhk,19346
47
- mapfolding-0.7.1.dist-info/METADATA,sha256=czJ_D8mDCOZg1ug6kaIvrwMTKJKh2zfk7Q3FWLJcs6U,7696
48
- mapfolding-0.7.1.dist-info/WHEEL,sha256=52BFRY2Up02UkjOa29eZOS2VxUrpPORXg1pkohGGUS8,91
49
- mapfolding-0.7.1.dist-info/entry_points.txt,sha256=F3OUeZR1XDTpoH7k3wXuRb3KF_kXTTeYhu5AGK1SiOQ,146
50
- mapfolding-0.7.1.dist-info/top_level.txt,sha256=1gP2vFaqPwHujGwb3UjtMlLEGN-943VSYFR7V4gDqW8,17
51
- mapfolding-0.7.1.dist-info/RECORD,,
File without changes