mapFolding 0.11.1__py3-none-any.whl → 0.11.2__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 (33) hide show
  1. mapFolding/__init__.py +18 -58
  2. mapFolding/basecamp.py +13 -10
  3. mapFolding/beDRY.py +113 -2
  4. mapFolding/dataBaskets.py +24 -2
  5. mapFolding/{toolboxFilesystem.py → filesystemToolkit.py} +3 -3
  6. mapFolding/infoBooth.py +96 -0
  7. mapFolding/oeis.py +3 -2
  8. mapFolding/someAssemblyRequired/RecipeJob.py +3 -4
  9. mapFolding/someAssemblyRequired/Z0Z_makeSomeModules.py +182 -17
  10. mapFolding/someAssemblyRequired/__init__.py +3 -3
  11. mapFolding/someAssemblyRequired/_toolIfThis.py +5 -5
  12. mapFolding/someAssemblyRequired/{_toolboxContainers.py → _toolkitContainers.py} +6 -7
  13. mapFolding/someAssemblyRequired/makeJobTheorem2Numba.py +8 -7
  14. mapFolding/someAssemblyRequired/synthesizeNumbaJob.py +3 -2
  15. mapFolding/someAssemblyRequired/transformationTools.py +11 -10
  16. mapFolding/syntheticModules/countParallel.py +98 -0
  17. mapFolding/syntheticModules/dataPacking.py +1 -1
  18. mapFolding/syntheticModules/numbaCount.py +189 -188
  19. mapFolding/theDao.py +1 -1
  20. mapFolding/theSSOT.py +4 -243
  21. {mapfolding-0.11.1.dist-info → mapfolding-0.11.2.dist-info}/METADATA +16 -8
  22. mapfolding-0.11.2.dist-info/RECORD +56 -0
  23. {mapfolding-0.11.1.dist-info → mapfolding-0.11.2.dist-info}/WHEEL +1 -1
  24. tests/conftest.py +7 -9
  25. tests/test_computations.py +1 -1
  26. tests/test_filesystem.py +1 -2
  27. tests/test_other.py +1 -1
  28. tests/test_tasks.py +1 -3
  29. mapfolding-0.11.1.dist-info/RECORD +0 -54
  30. /mapFolding/someAssemblyRequired/{toolboxNumba.py → toolkitNumba.py} +0 -0
  31. {mapfolding-0.11.1.dist-info → mapfolding-0.11.2.dist-info}/entry_points.txt +0 -0
  32. {mapfolding-0.11.1.dist-info → mapfolding-0.11.2.dist-info}/licenses/LICENSE +0 -0
  33. {mapfolding-0.11.1.dist-info → mapfolding-0.11.2.dist-info}/top_level.txt +0 -0
@@ -1,201 +1,202 @@
1
1
  from concurrent.futures import Future as ConcurrentFuture, ProcessPoolExecutor
2
2
  from copy import deepcopy
3
- from mapFolding.theSSOT import Array1DElephino, Array1DFoldsTotal, Array1DLeavesTotal, Array3D, ComputationState, DatatypeElephino, DatatypeFoldsTotal, DatatypeLeavesTotal
3
+ from mapFolding import ComputationState
4
+ from mapFolding import Array1DElephino, Array1DFoldsTotal, Array1DLeavesTotal, Array3D, DatatypeElephino, DatatypeFoldsTotal, DatatypeLeavesTotal
4
5
  from numba import jit
5
6
 
6
7
  def countInitialize(state: ComputationState) -> ComputationState:
7
- while state.gap1ndex == 0:
8
- if state.leaf1ndex <= 1 or state.leafBelow[0] == 1:
9
- state.dimensionsUnconstrained = state.dimensionsTotal
10
- state.gap1ndexCeiling = state.gapRangeStart[state.leaf1ndex - 1]
11
- state.indexDimension = 0
12
- while state.indexDimension < state.dimensionsTotal:
13
- state.leafConnectee = state.connectionGraph[state.indexDimension, state.leaf1ndex, state.leaf1ndex]
14
- if state.leafConnectee == state.leaf1ndex:
15
- state.dimensionsUnconstrained -= 1
16
- else:
17
- while state.leafConnectee != state.leaf1ndex:
18
- state.gapsWhere[state.gap1ndexCeiling] = state.leafConnectee
19
- if state.countDimensionsGapped[state.leafConnectee] == 0:
20
- state.gap1ndexCeiling += 1
21
- state.countDimensionsGapped[state.leafConnectee] += 1
22
- state.leafConnectee = state.connectionGraph[state.indexDimension, state.leaf1ndex, state.leafBelow[state.leafConnectee]]
23
- state.indexDimension += 1
24
- if not state.dimensionsUnconstrained:
25
- state.indexLeaf = 0
26
- while state.indexLeaf < state.leaf1ndex:
27
- state.gapsWhere[state.gap1ndexCeiling] = state.indexLeaf
28
- state.gap1ndexCeiling += 1
29
- state.indexLeaf += 1
30
- state.indexMiniGap = state.gap1ndex
31
- while state.indexMiniGap < state.gap1ndexCeiling:
32
- state.gapsWhere[state.gap1ndex] = state.gapsWhere[state.indexMiniGap]
33
- if state.countDimensionsGapped[state.gapsWhere[state.indexMiniGap]] == state.dimensionsUnconstrained:
34
- state.gap1ndex += 1
35
- state.countDimensionsGapped[state.gapsWhere[state.indexMiniGap]] = 0
36
- state.indexMiniGap += 1
37
- if state.leaf1ndex > 0:
38
- state.gap1ndex -= 1
39
- state.leafAbove[state.leaf1ndex] = state.gapsWhere[state.gap1ndex]
40
- state.leafBelow[state.leaf1ndex] = state.leafBelow[state.leafAbove[state.leaf1ndex]]
41
- state.leafBelow[state.leafAbove[state.leaf1ndex]] = state.leaf1ndex
42
- state.leafAbove[state.leafBelow[state.leaf1ndex]] = state.leaf1ndex
43
- state.gapRangeStart[state.leaf1ndex] = state.gap1ndex
44
- state.leaf1ndex += 1
45
- return state
8
+ while state.gap1ndex == 0:
9
+ if state.leaf1ndex <= 1 or state.leafBelow[0] == 1:
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
+ if state.leaf1ndex > 0:
39
+ state.gap1ndex -= 1
40
+ state.leafAbove[state.leaf1ndex] = state.gapsWhere[state.gap1ndex]
41
+ state.leafBelow[state.leaf1ndex] = state.leafBelow[state.leafAbove[state.leaf1ndex]]
42
+ state.leafBelow[state.leafAbove[state.leaf1ndex]] = state.leaf1ndex
43
+ state.leafAbove[state.leafBelow[state.leaf1ndex]] = state.leaf1ndex
44
+ state.gapRangeStart[state.leaf1ndex] = state.gap1ndex
45
+ state.leaf1ndex += 1
46
+ return state
46
47
 
47
48
  @jit(_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)
48
49
  def countParallel(leavesTotal: DatatypeLeavesTotal, taskDivisions: DatatypeLeavesTotal, connectionGraph: Array3D, dimensionsTotal: DatatypeLeavesTotal, countDimensionsGapped: Array1DLeavesTotal, dimensionsUnconstrained: DatatypeLeavesTotal, gapRangeStart: Array1DElephino, gapsWhere: Array1DLeavesTotal, leafAbove: Array1DLeavesTotal, leafBelow: Array1DLeavesTotal, foldGroups: Array1DFoldsTotal, gap1ndex: DatatypeElephino, gap1ndexCeiling: DatatypeElephino, groupsOfFolds: DatatypeFoldsTotal, indexDimension: DatatypeLeavesTotal, indexMiniGap: DatatypeElephino, leaf1ndex: DatatypeLeavesTotal, leafConnectee: DatatypeLeavesTotal, taskIndex: DatatypeLeavesTotal) -> DatatypeFoldsTotal:
49
- while leaf1ndex > 0:
50
- if leaf1ndex <= 1 or leafBelow[0] == 1:
51
- if leaf1ndex > leavesTotal:
52
- groupsOfFolds += 1
53
- else:
54
- dimensionsUnconstrained = dimensionsTotal
55
- gap1ndexCeiling = gapRangeStart[leaf1ndex - 1]
56
- indexDimension = 0
57
- while indexDimension < dimensionsTotal:
58
- if connectionGraph[indexDimension, leaf1ndex, leaf1ndex] == leaf1ndex:
59
- dimensionsUnconstrained -= 1
60
- else:
61
- leafConnectee = connectionGraph[indexDimension, leaf1ndex, leaf1ndex]
62
- while leafConnectee != leaf1ndex:
63
- if leaf1ndex != taskDivisions or leafConnectee % taskDivisions == taskIndex:
64
- gapsWhere[gap1ndexCeiling] = leafConnectee
65
- if countDimensionsGapped[leafConnectee] == 0:
66
- gap1ndexCeiling += 1
67
- countDimensionsGapped[leafConnectee] += 1
68
- leafConnectee = connectionGraph[indexDimension, leaf1ndex, leafBelow[leafConnectee]]
69
- indexDimension += 1
70
- indexMiniGap = gap1ndex
71
- while indexMiniGap < gap1ndexCeiling:
72
- gapsWhere[gap1ndex] = gapsWhere[indexMiniGap]
73
- if countDimensionsGapped[gapsWhere[indexMiniGap]] == dimensionsUnconstrained:
74
- gap1ndex += 1
75
- countDimensionsGapped[gapsWhere[indexMiniGap]] = 0
76
- indexMiniGap += 1
77
- while leaf1ndex > 0 and gap1ndex == gapRangeStart[leaf1ndex - 1]:
78
- leaf1ndex -= 1
79
- leafBelow[leafAbove[leaf1ndex]] = leafBelow[leaf1ndex]
80
- leafAbove[leafBelow[leaf1ndex]] = leafAbove[leaf1ndex]
81
- if leaf1ndex > 0:
82
- gap1ndex -= 1
83
- leafAbove[leaf1ndex] = gapsWhere[gap1ndex]
84
- leafBelow[leaf1ndex] = leafBelow[leafAbove[leaf1ndex]]
85
- leafBelow[leafAbove[leaf1ndex]] = leaf1ndex
86
- leafAbove[leafBelow[leaf1ndex]] = leaf1ndex
87
- gapRangeStart[leaf1ndex] = gap1ndex
88
- leaf1ndex += 1
89
- foldGroups[taskIndex] = groupsOfFolds
90
- return groupsOfFolds
50
+ while leaf1ndex > 0:
51
+ if leaf1ndex <= 1 or leafBelow[0] == 1:
52
+ if leaf1ndex > leavesTotal:
53
+ groupsOfFolds += 1
54
+ else:
55
+ dimensionsUnconstrained = dimensionsTotal
56
+ gap1ndexCeiling = gapRangeStart[leaf1ndex - 1]
57
+ indexDimension = 0
58
+ while indexDimension < dimensionsTotal:
59
+ if connectionGraph[indexDimension, leaf1ndex, leaf1ndex] == leaf1ndex:
60
+ dimensionsUnconstrained -= 1
61
+ else:
62
+ leafConnectee = connectionGraph[indexDimension, leaf1ndex, leaf1ndex]
63
+ while leafConnectee != leaf1ndex:
64
+ if leaf1ndex != taskDivisions or leafConnectee % taskDivisions == taskIndex:
65
+ gapsWhere[gap1ndexCeiling] = leafConnectee
66
+ if countDimensionsGapped[leafConnectee] == 0:
67
+ gap1ndexCeiling += 1
68
+ countDimensionsGapped[leafConnectee] += 1
69
+ leafConnectee = connectionGraph[indexDimension, leaf1ndex, leafBelow[leafConnectee]]
70
+ indexDimension += 1
71
+ indexMiniGap = gap1ndex
72
+ while indexMiniGap < gap1ndexCeiling:
73
+ gapsWhere[gap1ndex] = gapsWhere[indexMiniGap]
74
+ if countDimensionsGapped[gapsWhere[indexMiniGap]] == dimensionsUnconstrained:
75
+ gap1ndex += 1
76
+ countDimensionsGapped[gapsWhere[indexMiniGap]] = 0
77
+ indexMiniGap += 1
78
+ while leaf1ndex > 0 and gap1ndex == gapRangeStart[leaf1ndex - 1]:
79
+ leaf1ndex -= 1
80
+ leafBelow[leafAbove[leaf1ndex]] = leafBelow[leaf1ndex]
81
+ leafAbove[leafBelow[leaf1ndex]] = leafAbove[leaf1ndex]
82
+ if leaf1ndex > 0:
83
+ gap1ndex -= 1
84
+ leafAbove[leaf1ndex] = gapsWhere[gap1ndex]
85
+ leafBelow[leaf1ndex] = leafBelow[leafAbove[leaf1ndex]]
86
+ leafBelow[leafAbove[leaf1ndex]] = leaf1ndex
87
+ leafAbove[leafBelow[leaf1ndex]] = leaf1ndex
88
+ gapRangeStart[leaf1ndex] = gap1ndex
89
+ leaf1ndex += 1
90
+ foldGroups[taskIndex] = groupsOfFolds
91
+ return groupsOfFolds
91
92
 
92
93
  @jit(_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)
93
94
  def countSequential(mapShape: tuple[DatatypeLeavesTotal, ...], leavesTotal: DatatypeLeavesTotal, taskDivisions: DatatypeLeavesTotal, concurrencyLimit: DatatypeElephino, connectionGraph: Array3D, dimensionsTotal: DatatypeLeavesTotal, countDimensionsGapped: Array1DLeavesTotal, dimensionsUnconstrained: DatatypeLeavesTotal, gapRangeStart: Array1DElephino, gapsWhere: Array1DLeavesTotal, leafAbove: Array1DLeavesTotal, leafBelow: Array1DLeavesTotal, foldGroups: Array1DFoldsTotal, foldsTotal: DatatypeFoldsTotal, gap1ndex: DatatypeElephino, gap1ndexCeiling: DatatypeElephino, groupsOfFolds: DatatypeFoldsTotal, indexDimension: DatatypeLeavesTotal, indexLeaf: DatatypeLeavesTotal, indexMiniGap: DatatypeElephino, leaf1ndex: DatatypeLeavesTotal, leafConnectee: DatatypeLeavesTotal, taskIndex: DatatypeLeavesTotal) -> tuple[tuple[DatatypeLeavesTotal, ...], DatatypeLeavesTotal, DatatypeLeavesTotal, DatatypeElephino, Array3D, DatatypeLeavesTotal, Array1DLeavesTotal, DatatypeLeavesTotal, Array1DElephino, Array1DLeavesTotal, Array1DLeavesTotal, Array1DLeavesTotal, Array1DFoldsTotal, DatatypeFoldsTotal, DatatypeElephino, DatatypeElephino, DatatypeFoldsTotal, DatatypeLeavesTotal, DatatypeLeavesTotal, DatatypeElephino, DatatypeLeavesTotal, DatatypeLeavesTotal, DatatypeLeavesTotal]:
94
- while leaf1ndex > 0:
95
- if leaf1ndex <= 1 or leafBelow[0] == 1:
96
- if leaf1ndex > leavesTotal:
97
- groupsOfFolds += 1
98
- else:
99
- dimensionsUnconstrained = dimensionsTotal
100
- gap1ndexCeiling = gapRangeStart[leaf1ndex - 1]
101
- indexDimension = 0
102
- while indexDimension < dimensionsTotal:
103
- leafConnectee = connectionGraph[indexDimension, leaf1ndex, leaf1ndex]
104
- if leafConnectee == leaf1ndex:
105
- dimensionsUnconstrained -= 1
106
- else:
107
- while leafConnectee != leaf1ndex:
108
- gapsWhere[gap1ndexCeiling] = leafConnectee
109
- if countDimensionsGapped[leafConnectee] == 0:
110
- gap1ndexCeiling += 1
111
- countDimensionsGapped[leafConnectee] += 1
112
- leafConnectee = connectionGraph[indexDimension, leaf1ndex, leafBelow[leafConnectee]]
113
- indexDimension += 1
114
- indexMiniGap = gap1ndex
115
- while indexMiniGap < gap1ndexCeiling:
116
- gapsWhere[gap1ndex] = gapsWhere[indexMiniGap]
117
- if countDimensionsGapped[gapsWhere[indexMiniGap]] == dimensionsUnconstrained:
118
- gap1ndex += 1
119
- countDimensionsGapped[gapsWhere[indexMiniGap]] = 0
120
- indexMiniGap += 1
121
- while leaf1ndex > 0 and gap1ndex == gapRangeStart[leaf1ndex - 1]:
122
- leaf1ndex -= 1
123
- leafBelow[leafAbove[leaf1ndex]] = leafBelow[leaf1ndex]
124
- leafAbove[leafBelow[leaf1ndex]] = leafAbove[leaf1ndex]
125
- if leaf1ndex == 3 and groupsOfFolds:
126
- groupsOfFolds *= 2
127
- break
128
- if leaf1ndex > 0:
129
- gap1ndex -= 1
130
- leafAbove[leaf1ndex] = gapsWhere[gap1ndex]
131
- leafBelow[leaf1ndex] = leafBelow[leafAbove[leaf1ndex]]
132
- leafBelow[leafAbove[leaf1ndex]] = leaf1ndex
133
- leafAbove[leafBelow[leaf1ndex]] = leaf1ndex
134
- gapRangeStart[leaf1ndex] = gap1ndex
135
- leaf1ndex += 1
136
- foldGroups[taskIndex] = groupsOfFolds
137
- return (mapShape, leavesTotal, taskDivisions, concurrencyLimit, connectionGraph, dimensionsTotal, countDimensionsGapped, dimensionsUnconstrained, gapRangeStart, gapsWhere, leafAbove, leafBelow, foldGroups, foldsTotal, gap1ndex, gap1ndexCeiling, groupsOfFolds, indexDimension, indexLeaf, indexMiniGap, leaf1ndex, leafConnectee, taskIndex)
95
+ while leaf1ndex > 0:
96
+ if leaf1ndex <= 1 or leafBelow[0] == 1:
97
+ if leaf1ndex > leavesTotal:
98
+ groupsOfFolds += 1
99
+ else:
100
+ dimensionsUnconstrained = dimensionsTotal
101
+ gap1ndexCeiling = gapRangeStart[leaf1ndex - 1]
102
+ indexDimension = 0
103
+ while indexDimension < dimensionsTotal:
104
+ leafConnectee = connectionGraph[indexDimension, leaf1ndex, leaf1ndex]
105
+ if leafConnectee == leaf1ndex:
106
+ dimensionsUnconstrained -= 1
107
+ else:
108
+ while leafConnectee != leaf1ndex:
109
+ gapsWhere[gap1ndexCeiling] = leafConnectee
110
+ if countDimensionsGapped[leafConnectee] == 0:
111
+ gap1ndexCeiling += 1
112
+ countDimensionsGapped[leafConnectee] += 1
113
+ leafConnectee = connectionGraph[indexDimension, leaf1ndex, leafBelow[leafConnectee]]
114
+ indexDimension += 1
115
+ indexMiniGap = gap1ndex
116
+ while indexMiniGap < gap1ndexCeiling:
117
+ gapsWhere[gap1ndex] = gapsWhere[indexMiniGap]
118
+ if countDimensionsGapped[gapsWhere[indexMiniGap]] == dimensionsUnconstrained:
119
+ gap1ndex += 1
120
+ countDimensionsGapped[gapsWhere[indexMiniGap]] = 0
121
+ indexMiniGap += 1
122
+ while leaf1ndex > 0 and gap1ndex == gapRangeStart[leaf1ndex - 1]:
123
+ leaf1ndex -= 1
124
+ leafBelow[leafAbove[leaf1ndex]] = leafBelow[leaf1ndex]
125
+ leafAbove[leafBelow[leaf1ndex]] = leafAbove[leaf1ndex]
126
+ if leaf1ndex == 3 and groupsOfFolds:
127
+ groupsOfFolds *= 2
128
+ break
129
+ if leaf1ndex > 0:
130
+ gap1ndex -= 1
131
+ leafAbove[leaf1ndex] = gapsWhere[gap1ndex]
132
+ leafBelow[leaf1ndex] = leafBelow[leafAbove[leaf1ndex]]
133
+ leafBelow[leafAbove[leaf1ndex]] = leaf1ndex
134
+ leafAbove[leafBelow[leaf1ndex]] = leaf1ndex
135
+ gapRangeStart[leaf1ndex] = gap1ndex
136
+ leaf1ndex += 1
137
+ foldGroups[taskIndex] = groupsOfFolds
138
+ return (mapShape, leavesTotal, taskDivisions, concurrencyLimit, connectionGraph, dimensionsTotal, countDimensionsGapped, dimensionsUnconstrained, gapRangeStart, gapsWhere, leafAbove, leafBelow, foldGroups, foldsTotal, gap1ndex, gap1ndexCeiling, groupsOfFolds, indexDimension, indexLeaf, indexMiniGap, leaf1ndex, leafConnectee, taskIndex)
138
139
 
139
140
  def doTheNeedful(state: ComputationState) -> ComputationState:
140
- state = countInitialize(state)
141
- if state.taskDivisions > 0:
142
- dictionaryConcurrency: dict[int, ConcurrentFuture[ComputationState]] = {}
143
- stateParallel = deepcopy(state)
144
- with ProcessPoolExecutor(stateParallel.concurrencyLimit) as concurrencyManager:
145
- for indexSherpa in range(stateParallel.taskDivisions):
146
- state = deepcopy(stateParallel)
147
- state.taskIndex = indexSherpa
148
- mapShape: tuple[DatatypeLeavesTotal, ...] = state.mapShape
149
- leavesTotal: DatatypeLeavesTotal = state.leavesTotal
150
- taskDivisions: DatatypeLeavesTotal = state.taskDivisions
151
- concurrencyLimit: DatatypeElephino = state.concurrencyLimit
152
- connectionGraph: Array3D = state.connectionGraph
153
- dimensionsTotal: DatatypeLeavesTotal = state.dimensionsTotal
154
- countDimensionsGapped: Array1DLeavesTotal = state.countDimensionsGapped
155
- dimensionsUnconstrained: DatatypeLeavesTotal = state.dimensionsUnconstrained
156
- gapRangeStart: Array1DElephino = state.gapRangeStart
157
- gapsWhere: Array1DLeavesTotal = state.gapsWhere
158
- leafAbove: Array1DLeavesTotal = state.leafAbove
159
- leafBelow: Array1DLeavesTotal = state.leafBelow
160
- foldGroups: Array1DFoldsTotal = state.foldGroups
161
- foldsTotal: DatatypeFoldsTotal = state.foldsTotal
162
- gap1ndex: DatatypeElephino = state.gap1ndex
163
- gap1ndexCeiling: DatatypeElephino = state.gap1ndexCeiling
164
- groupsOfFolds: DatatypeFoldsTotal = state.groupsOfFolds
165
- indexDimension: DatatypeLeavesTotal = state.indexDimension
166
- indexLeaf: DatatypeLeavesTotal = state.indexLeaf
167
- indexMiniGap: DatatypeElephino = state.indexMiniGap
168
- leaf1ndex: DatatypeLeavesTotal = state.leaf1ndex
169
- leafConnectee: DatatypeLeavesTotal = state.leafConnectee
170
- taskIndex: DatatypeLeavesTotal = state.taskIndex
171
- dictionaryConcurrency[indexSherpa] = concurrencyManager.submit(countParallel, leavesTotal, taskDivisions, connectionGraph, dimensionsTotal, countDimensionsGapped, dimensionsUnconstrained, gapRangeStart, gapsWhere, leafAbove, leafBelow, foldGroups, gap1ndex, gap1ndexCeiling, groupsOfFolds, indexDimension, indexMiniGap, leaf1ndex, leafConnectee, taskIndex)
172
- for indexSherpa in range(stateParallel.taskDivisions):
173
- stateParallel.foldGroups[indexSherpa] = dictionaryConcurrency[indexSherpa].result()
174
- state = stateParallel
175
- else:
176
- mapShape: tuple[DatatypeLeavesTotal, ...] = state.mapShape
177
- leavesTotal: DatatypeLeavesTotal = state.leavesTotal
178
- taskDivisions: DatatypeLeavesTotal = state.taskDivisions
179
- concurrencyLimit: DatatypeElephino = state.concurrencyLimit
180
- connectionGraph: Array3D = state.connectionGraph
181
- dimensionsTotal: DatatypeLeavesTotal = state.dimensionsTotal
182
- countDimensionsGapped: Array1DLeavesTotal = state.countDimensionsGapped
183
- dimensionsUnconstrained: DatatypeLeavesTotal = state.dimensionsUnconstrained
184
- gapRangeStart: Array1DElephino = state.gapRangeStart
185
- gapsWhere: Array1DLeavesTotal = state.gapsWhere
186
- leafAbove: Array1DLeavesTotal = state.leafAbove
187
- leafBelow: Array1DLeavesTotal = state.leafBelow
188
- foldGroups: Array1DFoldsTotal = state.foldGroups
189
- foldsTotal: DatatypeFoldsTotal = state.foldsTotal
190
- gap1ndex: DatatypeElephino = state.gap1ndex
191
- gap1ndexCeiling: DatatypeElephino = state.gap1ndexCeiling
192
- groupsOfFolds: DatatypeFoldsTotal = state.groupsOfFolds
193
- indexDimension: DatatypeLeavesTotal = state.indexDimension
194
- indexLeaf: DatatypeLeavesTotal = state.indexLeaf
195
- indexMiniGap: DatatypeElephino = state.indexMiniGap
196
- leaf1ndex: DatatypeLeavesTotal = state.leaf1ndex
197
- leafConnectee: DatatypeLeavesTotal = state.leafConnectee
198
- taskIndex: DatatypeLeavesTotal = state.taskIndex
199
- mapShape, leavesTotal, taskDivisions, concurrencyLimit, connectionGraph, dimensionsTotal, countDimensionsGapped, dimensionsUnconstrained, gapRangeStart, gapsWhere, leafAbove, leafBelow, foldGroups, foldsTotal, gap1ndex, gap1ndexCeiling, groupsOfFolds, indexDimension, indexLeaf, indexMiniGap, leaf1ndex, leafConnectee, taskIndex = countSequential(mapShape, leavesTotal, taskDivisions, concurrencyLimit, connectionGraph, dimensionsTotal, countDimensionsGapped, dimensionsUnconstrained, gapRangeStart, gapsWhere, leafAbove, leafBelow, foldGroups, foldsTotal, gap1ndex, gap1ndexCeiling, groupsOfFolds, indexDimension, indexLeaf, indexMiniGap, leaf1ndex, leafConnectee, taskIndex)
200
- state = ComputationState(mapShape=mapShape, leavesTotal=leavesTotal, taskDivisions=taskDivisions, concurrencyLimit=concurrencyLimit, countDimensionsGapped=countDimensionsGapped, dimensionsUnconstrained=dimensionsUnconstrained, gapRangeStart=gapRangeStart, gapsWhere=gapsWhere, leafAbove=leafAbove, leafBelow=leafBelow, foldGroups=foldGroups, foldsTotal=foldsTotal, gap1ndex=gap1ndex, gap1ndexCeiling=gap1ndexCeiling, groupsOfFolds=groupsOfFolds, indexDimension=indexDimension, indexLeaf=indexLeaf, indexMiniGap=indexMiniGap, leaf1ndex=leaf1ndex, leafConnectee=leafConnectee, taskIndex=taskIndex)
201
- return state
141
+ state = countInitialize(state)
142
+ if state.taskDivisions > 0:
143
+ dictionaryConcurrency: dict[int, ConcurrentFuture[ComputationState]] = {}
144
+ stateParallel = deepcopy(state)
145
+ with ProcessPoolExecutor(stateParallel.concurrencyLimit) as concurrencyManager:
146
+ for indexSherpa in range(stateParallel.taskDivisions):
147
+ state = deepcopy(stateParallel)
148
+ state.taskIndex = indexSherpa
149
+ mapShape: tuple[DatatypeLeavesTotal, ...] = state.mapShape
150
+ leavesTotal: DatatypeLeavesTotal = state.leavesTotal
151
+ taskDivisions: DatatypeLeavesTotal = state.taskDivisions
152
+ concurrencyLimit: DatatypeElephino = state.concurrencyLimit
153
+ connectionGraph: Array3D = state.connectionGraph
154
+ dimensionsTotal: DatatypeLeavesTotal = state.dimensionsTotal
155
+ countDimensionsGapped: Array1DLeavesTotal = state.countDimensionsGapped
156
+ dimensionsUnconstrained: DatatypeLeavesTotal = state.dimensionsUnconstrained
157
+ gapRangeStart: Array1DElephino = state.gapRangeStart
158
+ gapsWhere: Array1DLeavesTotal = state.gapsWhere
159
+ leafAbove: Array1DLeavesTotal = state.leafAbove
160
+ leafBelow: Array1DLeavesTotal = state.leafBelow
161
+ foldGroups: Array1DFoldsTotal = state.foldGroups
162
+ foldsTotal: DatatypeFoldsTotal = state.foldsTotal
163
+ gap1ndex: DatatypeElephino = state.gap1ndex
164
+ gap1ndexCeiling: DatatypeElephino = state.gap1ndexCeiling
165
+ groupsOfFolds: DatatypeFoldsTotal = state.groupsOfFolds
166
+ indexDimension: DatatypeLeavesTotal = state.indexDimension
167
+ indexLeaf: DatatypeLeavesTotal = state.indexLeaf
168
+ indexMiniGap: DatatypeElephino = state.indexMiniGap
169
+ leaf1ndex: DatatypeLeavesTotal = state.leaf1ndex
170
+ leafConnectee: DatatypeLeavesTotal = state.leafConnectee
171
+ taskIndex: DatatypeLeavesTotal = state.taskIndex
172
+ dictionaryConcurrency[indexSherpa] = concurrencyManager.submit(countParallel, leavesTotal, taskDivisions, connectionGraph, dimensionsTotal, countDimensionsGapped, dimensionsUnconstrained, gapRangeStart, gapsWhere, leafAbove, leafBelow, foldGroups, gap1ndex, gap1ndexCeiling, groupsOfFolds, indexDimension, indexMiniGap, leaf1ndex, leafConnectee, taskIndex)
173
+ for indexSherpa in range(stateParallel.taskDivisions):
174
+ stateParallel.foldGroups[indexSherpa] = dictionaryConcurrency[indexSherpa].result()
175
+ state = stateParallel
176
+ else:
177
+ mapShape: tuple[DatatypeLeavesTotal, ...] = state.mapShape
178
+ leavesTotal: DatatypeLeavesTotal = state.leavesTotal
179
+ taskDivisions: DatatypeLeavesTotal = state.taskDivisions
180
+ concurrencyLimit: DatatypeElephino = state.concurrencyLimit
181
+ connectionGraph: Array3D = state.connectionGraph
182
+ dimensionsTotal: DatatypeLeavesTotal = state.dimensionsTotal
183
+ countDimensionsGapped: Array1DLeavesTotal = state.countDimensionsGapped
184
+ dimensionsUnconstrained: DatatypeLeavesTotal = state.dimensionsUnconstrained
185
+ gapRangeStart: Array1DElephino = state.gapRangeStart
186
+ gapsWhere: Array1DLeavesTotal = state.gapsWhere
187
+ leafAbove: Array1DLeavesTotal = state.leafAbove
188
+ leafBelow: Array1DLeavesTotal = state.leafBelow
189
+ foldGroups: Array1DFoldsTotal = state.foldGroups
190
+ foldsTotal: DatatypeFoldsTotal = state.foldsTotal
191
+ gap1ndex: DatatypeElephino = state.gap1ndex
192
+ gap1ndexCeiling: DatatypeElephino = state.gap1ndexCeiling
193
+ groupsOfFolds: DatatypeFoldsTotal = state.groupsOfFolds
194
+ indexDimension: DatatypeLeavesTotal = state.indexDimension
195
+ indexLeaf: DatatypeLeavesTotal = state.indexLeaf
196
+ indexMiniGap: DatatypeElephino = state.indexMiniGap
197
+ leaf1ndex: DatatypeLeavesTotal = state.leaf1ndex
198
+ leafConnectee: DatatypeLeavesTotal = state.leafConnectee
199
+ taskIndex: DatatypeLeavesTotal = state.taskIndex
200
+ mapShape, leavesTotal, taskDivisions, concurrencyLimit, connectionGraph, dimensionsTotal, countDimensionsGapped, dimensionsUnconstrained, gapRangeStart, gapsWhere, leafAbove, leafBelow, foldGroups, foldsTotal, gap1ndex, gap1ndexCeiling, groupsOfFolds, indexDimension, indexLeaf, indexMiniGap, leaf1ndex, leafConnectee, taskIndex = countSequential(mapShape, leavesTotal, taskDivisions, concurrencyLimit, connectionGraph, dimensionsTotal, countDimensionsGapped, dimensionsUnconstrained, gapRangeStart, gapsWhere, leafAbove, leafBelow, foldGroups, foldsTotal, gap1ndex, gap1ndexCeiling, groupsOfFolds, indexDimension, indexLeaf, indexMiniGap, leaf1ndex, leafConnectee, taskIndex)
201
+ state = ComputationState(mapShape=mapShape, leavesTotal=leavesTotal, taskDivisions=taskDivisions, concurrencyLimit=concurrencyLimit, countDimensionsGapped=countDimensionsGapped, dimensionsUnconstrained=dimensionsUnconstrained, gapRangeStart=gapRangeStart, gapsWhere=gapsWhere, leafAbove=leafAbove, leafBelow=leafBelow, foldGroups=foldGroups, foldsTotal=foldsTotal, gap1ndex=gap1ndex, gap1ndexCeiling=gap1ndexCeiling, groupsOfFolds=groupsOfFolds, indexDimension=indexDimension, indexLeaf=indexLeaf, indexMiniGap=indexMiniGap, leaf1ndex=leaf1ndex, leafConnectee=leafConnectee, taskIndex=taskIndex)
202
+ return state
mapFolding/theDao.py CHANGED
@@ -20,7 +20,7 @@ concurrency parameters.
20
20
  """
21
21
  from concurrent.futures import Future as ConcurrentFuture, ProcessPoolExecutor
22
22
  from copy import deepcopy
23
- from mapFolding.theSSOT import ComputationState
23
+ from mapFolding.beDRY import ComputationState
24
24
  from multiprocessing import set_start_method as multiprocessing_set_start_method
25
25
 
26
26
  # When to use multiprocessing.set_start_method https://github.com/hunterhogan/mapFolding/issues/6