mapFolding 0.4.1__py3-none-any.whl → 0.4.3__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.
@@ -0,0 +1,158 @@
1
+ from mapFolding import indexMy, indexTrack
2
+ from numba import jit, int64, prange, uint16
3
+ from numpy import ndarray, dtype, integer
4
+ from typing import Tuple, 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.value] > 0:
9
+ if my[indexMy.leaf1ndex.value] <= 1 or track[indexTrack.leafBelow.value, 0] == 1:
10
+ my[indexMy.dimensionsUnconstrained.value] = my[indexMy.dimensionsTotal.value]
11
+ my[indexMy.gap1ndexCeiling.value] = track[indexTrack.gapRangeStart.value, my[indexMy.leaf1ndex.value] - 1]
12
+ my[indexMy.indexDimension.value] = 0
13
+ while my[indexMy.indexDimension.value] < my[indexMy.dimensionsTotal.value]:
14
+ if connectionGraph[my[indexMy.indexDimension.value], my[indexMy.leaf1ndex.value], my[indexMy.leaf1ndex.value]] == my[indexMy.leaf1ndex.value]:
15
+ my[indexMy.dimensionsUnconstrained.value] -= 1
16
+ else:
17
+ my[indexMy.leafConnectee.value] = connectionGraph[my[indexMy.indexDimension.value], my[indexMy.leaf1ndex.value], my[indexMy.leaf1ndex.value]]
18
+ while my[indexMy.leafConnectee.value] != my[indexMy.leaf1ndex.value]:
19
+ gapsWhere[my[indexMy.gap1ndexCeiling.value]] = my[indexMy.leafConnectee.value]
20
+ if track[indexTrack.countDimensionsGapped.value, my[indexMy.leafConnectee.value]] == 0:
21
+ my[indexMy.gap1ndexCeiling.value] += 1
22
+ track[indexTrack.countDimensionsGapped.value, my[indexMy.leafConnectee.value]] += 1
23
+ my[indexMy.leafConnectee.value] = connectionGraph[my[indexMy.indexDimension.value], my[indexMy.leaf1ndex.value], track[indexTrack.leafBelow.value, my[indexMy.leafConnectee.value]]]
24
+ my[indexMy.indexDimension.value] += 1
25
+ if not my[indexMy.dimensionsUnconstrained.value]:
26
+ my[indexMy.indexLeaf.value] = 0
27
+ while my[indexMy.indexLeaf.value] < my[indexMy.leaf1ndex.value]:
28
+ gapsWhere[my[indexMy.gap1ndexCeiling.value]] = my[indexMy.indexLeaf.value]
29
+ my[indexMy.gap1ndexCeiling.value] += 1
30
+ my[indexMy.indexLeaf.value] += 1
31
+ my[indexMy.indexMiniGap.value] = my[indexMy.gap1ndex.value]
32
+ while my[indexMy.indexMiniGap.value] < my[indexMy.gap1ndexCeiling.value]:
33
+ gapsWhere[my[indexMy.gap1ndex.value]] = gapsWhere[my[indexMy.indexMiniGap.value]]
34
+ if track[indexTrack.countDimensionsGapped.value, gapsWhere[my[indexMy.indexMiniGap.value]]] == my[indexMy.dimensionsUnconstrained.value]:
35
+ my[indexMy.gap1ndex.value] += 1
36
+ track[indexTrack.countDimensionsGapped.value, gapsWhere[my[indexMy.indexMiniGap.value]]] = 0
37
+ my[indexMy.indexMiniGap.value] += 1
38
+ if my[indexMy.leaf1ndex.value] > 0:
39
+ my[indexMy.gap1ndex.value] -= 1
40
+ track[indexTrack.leafAbove.value, my[indexMy.leaf1ndex.value]] = gapsWhere[my[indexMy.gap1ndex.value]]
41
+ track[indexTrack.leafBelow.value, my[indexMy.leaf1ndex.value]] = track[indexTrack.leafBelow.value, track[indexTrack.leafAbove.value, my[indexMy.leaf1ndex.value]]]
42
+ track[indexTrack.leafBelow.value, track[indexTrack.leafAbove.value, my[indexMy.leaf1ndex.value]]] = my[indexMy.leaf1ndex.value]
43
+ track[indexTrack.leafAbove.value, track[indexTrack.leafBelow.value, my[indexMy.leaf1ndex.value]]] = my[indexMy.leaf1ndex.value]
44
+ track[indexTrack.gapRangeStart.value, my[indexMy.leaf1ndex.value]] = my[indexMy.gap1ndex.value]
45
+ my[indexMy.leaf1ndex.value] += 1
46
+ if my[indexMy.gap1ndex.value] > 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.value]
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.value] = indexSherpa
61
+ while my[indexMy.leaf1ndex.value] > 0:
62
+ if my[indexMy.leaf1ndex.value] <= 1 or track[indexTrack.leafBelow.value, 0] == 1:
63
+ if my[indexMy.leaf1ndex.value] > foldGroups[-1]:
64
+ groupsOfFolds += 1
65
+ else:
66
+ my[indexMy.dimensionsUnconstrained.value] = my[indexMy.dimensionsTotal.value]
67
+ my[indexMy.gap1ndexCeiling.value] = track[indexTrack.gapRangeStart.value, my[indexMy.leaf1ndex.value] - 1]
68
+ my[indexMy.indexDimension.value] = 0
69
+ while my[indexMy.indexDimension.value] < my[indexMy.dimensionsTotal.value]:
70
+ if connectionGraph[my[indexMy.indexDimension.value], my[indexMy.leaf1ndex.value], my[indexMy.leaf1ndex.value]] == my[indexMy.leaf1ndex.value]:
71
+ my[indexMy.dimensionsUnconstrained.value] -= 1
72
+ else:
73
+ my[indexMy.leafConnectee.value] = connectionGraph[my[indexMy.indexDimension.value], my[indexMy.leaf1ndex.value], my[indexMy.leaf1ndex.value]]
74
+ while my[indexMy.leafConnectee.value] != my[indexMy.leaf1ndex.value]:
75
+ if my[indexMy.leaf1ndex.value] != my[indexMy.taskDivisions.value] or my[indexMy.leafConnectee.value] % my[indexMy.taskDivisions.value] == my[indexMy.taskIndex.value]:
76
+ gapsWhere[my[indexMy.gap1ndexCeiling.value]] = my[indexMy.leafConnectee.value]
77
+ if track[indexTrack.countDimensionsGapped.value, my[indexMy.leafConnectee.value]] == 0:
78
+ my[indexMy.gap1ndexCeiling.value] += 1
79
+ track[indexTrack.countDimensionsGapped.value, my[indexMy.leafConnectee.value]] += 1
80
+ my[indexMy.leafConnectee.value] = connectionGraph[my[indexMy.indexDimension.value], my[indexMy.leaf1ndex.value], track[indexTrack.leafBelow.value, my[indexMy.leafConnectee.value]]]
81
+ my[indexMy.indexDimension.value] += 1
82
+ my[indexMy.indexMiniGap.value] = my[indexMy.gap1ndex.value]
83
+ while my[indexMy.indexMiniGap.value] < my[indexMy.gap1ndexCeiling.value]:
84
+ gapsWhere[my[indexMy.gap1ndex.value]] = gapsWhere[my[indexMy.indexMiniGap.value]]
85
+ if track[indexTrack.countDimensionsGapped.value, gapsWhere[my[indexMy.indexMiniGap.value]]] == my[indexMy.dimensionsUnconstrained.value]:
86
+ my[indexMy.gap1ndex.value] += 1
87
+ track[indexTrack.countDimensionsGapped.value, gapsWhere[my[indexMy.indexMiniGap.value]]] = 0
88
+ my[indexMy.indexMiniGap.value] += 1
89
+ while my[indexMy.leaf1ndex.value] > 0 and my[indexMy.gap1ndex.value] == track[indexTrack.gapRangeStart.value, my[indexMy.leaf1ndex.value] - 1]:
90
+ my[indexMy.leaf1ndex.value] -= 1
91
+ track[indexTrack.leafBelow.value, track[indexTrack.leafAbove.value, my[indexMy.leaf1ndex.value]]] = track[indexTrack.leafBelow.value, my[indexMy.leaf1ndex.value]]
92
+ track[indexTrack.leafAbove.value, track[indexTrack.leafBelow.value, my[indexMy.leaf1ndex.value]]] = track[indexTrack.leafAbove.value, my[indexMy.leaf1ndex.value]]
93
+ if my[indexMy.leaf1ndex.value] > 0:
94
+ my[indexMy.gap1ndex.value] -= 1
95
+ track[indexTrack.leafAbove.value, my[indexMy.leaf1ndex.value]] = gapsWhere[my[indexMy.gap1ndex.value]]
96
+ track[indexTrack.leafBelow.value, my[indexMy.leaf1ndex.value]] = track[indexTrack.leafBelow.value, track[indexTrack.leafAbove.value, my[indexMy.leaf1ndex.value]]]
97
+ track[indexTrack.leafBelow.value, track[indexTrack.leafAbove.value, my[indexMy.leaf1ndex.value]]] = my[indexMy.leaf1ndex.value]
98
+ track[indexTrack.leafAbove.value, track[indexTrack.leafBelow.value, my[indexMy.leaf1ndex.value]]] = my[indexMy.leaf1ndex.value]
99
+ track[indexTrack.gapRangeStart.value, my[indexMy.leaf1ndex.value]] = my[indexMy.gap1ndex.value]
100
+ my[indexMy.leaf1ndex.value] += 1
101
+ foldGroups[my[indexMy.taskIndex.value]] = 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,17 +1,10 @@
1
- from mapFolding.syntheticModules.numba_countInitialize import countInitialize
2
- from mapFolding.syntheticModules.numba_countParallel import countParallel
3
- from mapFolding.syntheticModules.numba_countSequential import countSequential
4
1
  from mapFolding import indexMy
5
- from numba import jit
6
- from numba import uint8
7
- from numba import int64
8
- from numpy import ndarray
9
- from numpy import integer
10
- from numpy import dtype
11
- from typing import Tuple
12
- from typing import Any
2
+ from mapFolding.syntheticModules.numbaCount import countParallel, countSequential, countInitialize
3
+ from numba import jit, int64, uint16
4
+ from numpy import ndarray, dtype, integer
5
+ from typing import Tuple, Any
13
6
 
14
- @jit((uint8[:, :, ::1], int64[::1], uint8[::1], uint8[::1], uint8[::1], uint8[:, ::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
+ @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)
15
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:
16
9
  countInitialize(connectionGraph, gapsWhere, my, track)
17
10
  if my[indexMy.taskDivisions.value] > 0:
mapFolding/theDao.py CHANGED
@@ -3,17 +3,17 @@ from numba import prange
3
3
  from numpy import dtype, integer, ndarray
4
4
  from typing import Any, Tuple
5
5
 
6
- def activeGapIncrement(my: ndarray[Tuple[int], dtype[integer[Any]]]) -> None:
7
- # `.value` is not necessary for this module or most modules. But, this module is transformed into Numba "jitted" functions, and Numba won't use `Enum` for an ndarray index without `.value`.
8
- my[indexMy.gap1ndex.value] += 1
6
+ # `.value` is not necessary for this module or most modules. But, this module is transformed into Numba "jitted" functions, and Numba won't use `Enum` for an ndarray index without `.value`.
7
+ def activeLeafConnectedToItself(my: ndarray[Tuple[int], dtype[integer[Any]]]) -> Any:
8
+ return my[indexMy.leafConnectee.value] == my[indexMy.leaf1ndex.value]
9
9
 
10
- def activeLeafGreaterThan0Condition(my: ndarray[Tuple[int], dtype[integer[Any]]]) -> Any:
11
- return my[indexMy.leaf1ndex.value]
10
+ def activeLeafGreaterThan0(my: ndarray[Tuple[int], dtype[integer[Any]]]) -> Any:
11
+ return my[indexMy.leaf1ndex.value] > 0
12
12
 
13
- def activeLeafGreaterThanLeavesTotalCondition(foldGroups: ndarray[Tuple[int], dtype[integer[Any]]], my: ndarray[Tuple[int], dtype[integer[Any]]]) -> Any:
13
+ def activeLeafGreaterThanLeavesTotal(foldGroups: ndarray[Tuple[int], dtype[integer[Any]]], my: ndarray[Tuple[int], dtype[integer[Any]]]) -> Any:
14
14
  return my[indexMy.leaf1ndex.value] > foldGroups[-1]
15
15
 
16
- def activeLeafIsTheFirstLeafCondition(my: ndarray[Tuple[int], dtype[integer[Any]]]) -> Any:
16
+ def activeLeafIsTheFirstLeaf(my: ndarray[Tuple[int], dtype[integer[Any]]]) -> Any:
17
17
  return my[indexMy.leaf1ndex.value] <= 1
18
18
 
19
19
  def allDimensionsAreUnconstrained(my: ndarray[Tuple[int], dtype[integer[Any]]]) -> Any:
@@ -24,44 +24,47 @@ def backtrack(my: ndarray[Tuple[int], dtype[integer[Any]]], track: ndarray[Tuple
24
24
  track[indexTrack.leafBelow.value, track[indexTrack.leafAbove.value, my[indexMy.leaf1ndex.value]]] = track[indexTrack.leafBelow.value, my[indexMy.leaf1ndex.value]]
25
25
  track[indexTrack.leafAbove.value, track[indexTrack.leafBelow.value, my[indexMy.leaf1ndex.value]]] = track[indexTrack.leafAbove.value, my[indexMy.leaf1ndex.value]]
26
26
 
27
- def backtrackCondition(my: ndarray[Tuple[int], dtype[integer[Any]]], track: ndarray[Tuple[int, int], dtype[integer[Any]]]) -> Any:
28
- return my[indexMy.leaf1ndex.value] and my[indexMy.gap1ndex.value] == track[indexTrack.gapRangeStart.value, my[indexMy.leaf1ndex.value] - 1]
29
-
30
- def gap1ndexCeilingIncrement(my: ndarray[Tuple[int], dtype[integer[Any]]]) -> None:
31
- my[indexMy.gap1ndexCeiling.value] += 1
32
-
33
27
  def countGaps(gapsWhere: ndarray[Tuple[int], dtype[integer[Any]]], my: ndarray[Tuple[int], dtype[integer[Any]]], track: ndarray[Tuple[int, int], dtype[integer[Any]]]) -> None:
34
28
  gapsWhere[my[indexMy.gap1ndexCeiling.value]] = my[indexMy.leafConnectee.value]
35
29
  if track[indexTrack.countDimensionsGapped.value, my[indexMy.leafConnectee.value]] == 0:
36
- gap1ndexCeilingIncrement(my=my)
30
+ incrementGap1ndexCeiling(my=my)
37
31
  track[indexTrack.countDimensionsGapped.value, my[indexMy.leafConnectee.value]] += 1
38
32
 
33
+ def decrementDimensionsUnconstrained(my: ndarray[Tuple[int], dtype[integer[Any]]]) -> None:
34
+ my[indexMy.dimensionsUnconstrained.value] -= 1
35
+
39
36
  def dimensionsUnconstrainedCondition(connectionGraph: ndarray[Tuple[int, int, int], dtype[integer[Any]]], my: ndarray[Tuple[int], dtype[integer[Any]]]) -> Any:
40
37
  return connectionGraph[my[indexMy.indexDimension.value], my[indexMy.leaf1ndex.value], my[indexMy.leaf1ndex.value]] == my[indexMy.leaf1ndex.value]
41
38
 
42
- def dimensionsUnconstrainedDecrement(my: ndarray[Tuple[int], dtype[integer[Any]]]) -> None:
43
- my[indexMy.dimensionsUnconstrained.value] -= 1
44
-
45
39
  def filterCommonGaps(gapsWhere: ndarray[Tuple[int], dtype[integer[Any]]], my: ndarray[Tuple[int], dtype[integer[Any]]], track: ndarray[Tuple[int, int], dtype[integer[Any]]]) -> None:
46
40
  gapsWhere[my[indexMy.gap1ndex.value]] = gapsWhere[my[indexMy.indexMiniGap.value]]
47
41
  if track[indexTrack.countDimensionsGapped.value, gapsWhere[my[indexMy.indexMiniGap.value]]] == my[indexMy.dimensionsUnconstrained.value]:
48
- activeGapIncrement(my=my)
42
+ incrementActiveGap(my=my)
49
43
  track[indexTrack.countDimensionsGapped.value, gapsWhere[my[indexMy.indexMiniGap.value]]] = 0
50
44
 
51
- def findGapsInitializeVariables(my: ndarray[Tuple[int], dtype[integer[Any]]], track: ndarray[Tuple[int, int], dtype[integer[Any]]]) -> None:
52
- my[indexMy.dimensionsUnconstrained.value] = my[indexMy.dimensionsTotal.value]
53
- my[indexMy.gap1ndexCeiling.value] = track[indexTrack.gapRangeStart.value, my[indexMy.leaf1ndex.value] - 1]
54
- my[indexMy.indexDimension.value] = 0
45
+ def incrementActiveGap(my: ndarray[Tuple[int], dtype[integer[Any]]]) -> None:
46
+ my[indexMy.gap1ndex.value] += 1
55
47
 
56
- def indexDimensionIncrement(my: ndarray[Tuple[int], dtype[integer[Any]]]) -> None:
48
+ def incrementGap1ndexCeiling(my: ndarray[Tuple[int], dtype[integer[Any]]]) -> None:
49
+ my[indexMy.gap1ndexCeiling.value] += 1
50
+
51
+ def incrementIndexDimension(my: ndarray[Tuple[int], dtype[integer[Any]]]) -> None:
57
52
  my[indexMy.indexDimension.value] += 1
58
53
 
59
- def indexMiniGapIncrement(my: ndarray[Tuple[int], dtype[integer[Any]]]) -> None:
54
+ def incrementIndexMiniGap(my: ndarray[Tuple[int], dtype[integer[Any]]]) -> None:
60
55
  my[indexMy.indexMiniGap.value] += 1
61
56
 
62
- def indexMiniGapInitialization(my: ndarray[Tuple[int], dtype[integer[Any]]]) -> None:
57
+ def initializeIndexMiniGap(my: ndarray[Tuple[int], dtype[integer[Any]]]) -> None:
63
58
  my[indexMy.indexMiniGap.value] = my[indexMy.gap1ndex.value]
64
59
 
60
+ def initializeLeafConnectee(connectionGraph: ndarray[Tuple[int, int, int], dtype[integer[Any]]], my: ndarray[Tuple[int], dtype[integer[Any]]]) -> None:
61
+ my[indexMy.leafConnectee.value] = connectionGraph[my[indexMy.indexDimension.value], my[indexMy.leaf1ndex.value], my[indexMy.leaf1ndex.value]]
62
+
63
+ def initializeVariablesToFindGaps(my: ndarray[Tuple[int], dtype[integer[Any]]], track: ndarray[Tuple[int, int], dtype[integer[Any]]]) -> None:
64
+ my[indexMy.dimensionsUnconstrained.value] = my[indexMy.dimensionsTotal.value]
65
+ my[indexMy.gap1ndexCeiling.value] = track[indexTrack.gapRangeStart.value, my[indexMy.leaf1ndex.value] - 1]
66
+ my[indexMy.indexDimension.value] = 0
67
+
65
68
  def insertUnconstrainedLeaf(gapsWhere: ndarray[Tuple[int], dtype[integer[Any]]], my: ndarray[Tuple[int], dtype[integer[Any]]]) -> None:
66
69
  my[indexMy.indexLeaf.value] = 0
67
70
  while my[indexMy.indexLeaf.value] < my[indexMy.leaf1ndex.value]:
@@ -69,23 +72,20 @@ def insertUnconstrainedLeaf(gapsWhere: ndarray[Tuple[int], dtype[integer[Any]]],
69
72
  my[indexMy.gap1ndexCeiling.value] += 1
70
73
  my[indexMy.indexLeaf.value] += 1
71
74
 
72
- def leafBelowSentinelIs1Condition(track: ndarray[Tuple[int, int], dtype[integer[Any]]]) -> Any:
75
+ def leafBelowSentinelIs1(track: ndarray[Tuple[int, int], dtype[integer[Any]]]) -> Any:
73
76
  return track[indexTrack.leafBelow.value, 0] == 1
74
77
 
75
- def leafConnecteeInitialization(connectionGraph: ndarray[Tuple[int, int, int], dtype[integer[Any]]], my: ndarray[Tuple[int], dtype[integer[Any]]]) -> None:
76
- my[indexMy.leafConnectee.value] = connectionGraph[my[indexMy.indexDimension.value], my[indexMy.leaf1ndex.value], my[indexMy.leaf1ndex.value]]
77
-
78
- def leafConnecteeUpdate(connectionGraph: ndarray[Tuple[int, int, int], dtype[integer[Any]]], my: ndarray[Tuple[int], dtype[integer[Any]]], track: ndarray[Tuple[int, int], dtype[integer[Any]]]) -> None:
79
- my[indexMy.leafConnectee.value] = connectionGraph[my[indexMy.indexDimension.value], my[indexMy.leaf1ndex.value], track[indexTrack.leafBelow.value, my[indexMy.leafConnectee.value]]]
80
-
81
78
  def loopingLeavesConnectedToActiveLeaf(my: ndarray[Tuple[int], dtype[integer[Any]]]) -> Any:
82
79
  return my[indexMy.leafConnectee.value] != my[indexMy.leaf1ndex.value]
83
80
 
81
+ def loopingToActiveGapCeiling(my: ndarray[Tuple[int], dtype[integer[Any]]]) -> Any:
82
+ return my[indexMy.indexMiniGap.value] < my[indexMy.gap1ndexCeiling.value]
83
+
84
84
  def loopUpToDimensionsTotal(my: ndarray[Tuple[int], dtype[integer[Any]]]) -> Any:
85
85
  return my[indexMy.indexDimension.value] < my[indexMy.dimensionsTotal.value]
86
86
 
87
- def loopingToActiveGapCeiling(my: ndarray[Tuple[int], dtype[integer[Any]]]) -> Any:
88
- return my[indexMy.indexMiniGap.value] < my[indexMy.gap1ndexCeiling.value]
87
+ def noGapsHere(my: ndarray[Tuple[int], dtype[integer[Any]]], track: ndarray[Tuple[int, int], dtype[integer[Any]]]) -> Any:
88
+ return my[indexMy.leaf1ndex.value] > 0 and my[indexMy.gap1ndex.value] == track[indexTrack.gapRangeStart.value, my[indexMy.leaf1ndex.value] - 1]
89
89
 
90
90
  def placeLeaf(gapsWhere: ndarray[Tuple[int], dtype[integer[Any]]], my: ndarray[Tuple[int], dtype[integer[Any]]], track: ndarray[Tuple[int, int], dtype[integer[Any]]]) -> None:
91
91
  my[indexMy.gap1ndex.value] -= 1
@@ -96,37 +96,40 @@ def placeLeaf(gapsWhere: ndarray[Tuple[int], dtype[integer[Any]]], my: ndarray[T
96
96
  track[indexTrack.gapRangeStart.value, my[indexMy.leaf1ndex.value]] = my[indexMy.gap1ndex.value]
97
97
  my[indexMy.leaf1ndex.value] += 1
98
98
 
99
- def placeLeafCondition(my: ndarray[Tuple[int], dtype[integer[Any]]]) -> Any:
100
- return my[indexMy.leaf1ndex.value]
99
+ def thereIsAnActiveLeaf(my: ndarray[Tuple[int], dtype[integer[Any]]]) -> Any:
100
+ return my[indexMy.leaf1ndex.value] > 0
101
101
 
102
- def thereAreComputationDivisionsYouMightSkip(my: ndarray[Tuple[int], dtype[integer[Any]]]) -> Any:
102
+ def thisIsMyTaskIndex(my: ndarray[Tuple[int], dtype[integer[Any]]]) -> Any:
103
103
  return my[indexMy.leaf1ndex.value] != my[indexMy.taskDivisions.value] or my[indexMy.leafConnectee.value] % my[indexMy.taskDivisions.value] == my[indexMy.taskIndex.value]
104
104
 
105
+ def updateLeafConnectee(connectionGraph: ndarray[Tuple[int, int, int], dtype[integer[Any]]], my: ndarray[Tuple[int], dtype[integer[Any]]], track: ndarray[Tuple[int, int], dtype[integer[Any]]]) -> None:
106
+ my[indexMy.leafConnectee.value] = connectionGraph[my[indexMy.indexDimension.value], my[indexMy.leaf1ndex.value], track[indexTrack.leafBelow.value, my[indexMy.leafConnectee.value]]]
107
+
105
108
  def countInitialize(connectionGraph: ndarray[Tuple[int, int, int], dtype[integer[Any]]]
106
109
  , gapsWhere: ndarray[Tuple[int] , dtype[integer[Any]]]
107
110
  , my: ndarray[Tuple[int] , dtype[integer[Any]]]
108
111
  , track: ndarray[Tuple[int, int] , dtype[integer[Any]]]
109
112
  ) -> None:
110
113
 
111
- while activeLeafGreaterThan0Condition(my=my):
112
- if activeLeafIsTheFirstLeafCondition(my=my) or leafBelowSentinelIs1Condition(track=track):
113
- findGapsInitializeVariables(my=my, track=track)
114
+ while activeLeafGreaterThan0(my=my):
115
+ if activeLeafIsTheFirstLeaf(my=my) or leafBelowSentinelIs1(track=track):
116
+ initializeVariablesToFindGaps(my=my, track=track)
114
117
  while loopUpToDimensionsTotal(my=my):
115
118
  if dimensionsUnconstrainedCondition(connectionGraph=connectionGraph, my=my):
116
- dimensionsUnconstrainedDecrement(my=my)
119
+ decrementDimensionsUnconstrained(my=my)
117
120
  else:
118
- leafConnecteeInitialization(connectionGraph=connectionGraph, my=my)
121
+ initializeLeafConnectee(connectionGraph=connectionGraph, my=my)
119
122
  while loopingLeavesConnectedToActiveLeaf(my=my):
120
123
  countGaps(gapsWhere=gapsWhere, my=my, track=track)
121
- leafConnecteeUpdate(connectionGraph=connectionGraph, my=my, track=track)
122
- indexDimensionIncrement(my=my)
124
+ updateLeafConnectee(connectionGraph=connectionGraph, my=my, track=track)
125
+ incrementIndexDimension(my=my)
123
126
  if allDimensionsAreUnconstrained(my=my):
124
127
  insertUnconstrainedLeaf(gapsWhere=gapsWhere, my=my)
125
- indexMiniGapInitialization(my=my)
128
+ initializeIndexMiniGap(my=my)
126
129
  while loopingToActiveGapCeiling(my=my):
127
130
  filterCommonGaps(gapsWhere=gapsWhere, my=my, track=track)
128
- indexMiniGapIncrement(my=my)
129
- if placeLeafCondition(my=my):
131
+ incrementIndexMiniGap(my=my)
132
+ if thereIsAnActiveLeaf(my=my):
130
133
  placeLeaf(gapsWhere=gapsWhere, my=my, track=track)
131
134
  if my[indexMy.gap1ndex.value] > 0:
132
135
  return
@@ -153,29 +156,29 @@ def countParallel(connectionGraph: ndarray[Tuple[int, int, int], dtype[integer[A
153
156
 
154
157
  my[indexMy.taskIndex.value] = indexSherpa
155
158
 
156
- while activeLeafGreaterThan0Condition(my=my):
157
- if activeLeafIsTheFirstLeafCondition(my=my) or leafBelowSentinelIs1Condition(track=track):
158
- if activeLeafGreaterThanLeavesTotalCondition(foldGroups=foldGroups, my=my):
159
+ while activeLeafGreaterThan0(my=my):
160
+ if activeLeafIsTheFirstLeaf(my=my) or leafBelowSentinelIs1(track=track):
161
+ if activeLeafGreaterThanLeavesTotal(foldGroups=foldGroups, my=my):
159
162
  groupsOfFolds += 1
160
163
  else:
161
- findGapsInitializeVariables(my=my, track=track)
164
+ initializeVariablesToFindGaps(my=my, track=track)
162
165
  while loopUpToDimensionsTotal(my=my):
163
166
  if dimensionsUnconstrainedCondition(connectionGraph=connectionGraph, my=my):
164
- dimensionsUnconstrainedDecrement(my=my)
167
+ decrementDimensionsUnconstrained(my=my)
165
168
  else:
166
- leafConnecteeInitialization(connectionGraph=connectionGraph, my=my)
169
+ initializeLeafConnectee(connectionGraph=connectionGraph, my=my)
167
170
  while loopingLeavesConnectedToActiveLeaf(my=my):
168
- if thereAreComputationDivisionsYouMightSkip(my=my):
171
+ if thisIsMyTaskIndex(my=my):
169
172
  countGaps(gapsWhere=gapsWhere, my=my, track=track)
170
- leafConnecteeUpdate(connectionGraph=connectionGraph, my=my, track=track)
171
- indexDimensionIncrement(my=my)
172
- indexMiniGapInitialization(my=my)
173
+ updateLeafConnectee(connectionGraph=connectionGraph, my=my, track=track)
174
+ incrementIndexDimension(my=my)
175
+ initializeIndexMiniGap(my=my)
173
176
  while loopingToActiveGapCeiling(my=my):
174
177
  filterCommonGaps(gapsWhere=gapsWhere, my=my, track=track)
175
- indexMiniGapIncrement(my=my)
176
- while backtrackCondition(my=my, track=track):
178
+ incrementIndexMiniGap(my=my)
179
+ while noGapsHere(my=my, track=track):
177
180
  backtrack(my=my, track=track)
178
- if placeLeafCondition(my=my):
181
+ if thereIsAnActiveLeaf(my=my):
179
182
  placeLeaf(gapsWhere=gapsWhere, my=my, track=track)
180
183
  foldGroups[my[indexMy.taskIndex.value]] = groupsOfFolds
181
184
 
@@ -188,28 +191,28 @@ def countSequential( connectionGraph: ndarray[Tuple[int, int, int], dtype[intege
188
191
 
189
192
  groupsOfFolds: int = 0
190
193
 
191
- while activeLeafGreaterThan0Condition(my=my):
192
- if activeLeafIsTheFirstLeafCondition(my=my) or leafBelowSentinelIs1Condition(track=track):
193
- if activeLeafGreaterThanLeavesTotalCondition(foldGroups=foldGroups, my=my):
194
+ while activeLeafGreaterThan0(my=my):
195
+ if activeLeafIsTheFirstLeaf(my=my) or leafBelowSentinelIs1(track=track):
196
+ if activeLeafGreaterThanLeavesTotal(foldGroups=foldGroups, my=my):
194
197
  groupsOfFolds += 1
195
198
  else:
196
- findGapsInitializeVariables(my=my, track=track)
199
+ initializeVariablesToFindGaps(my=my, track=track)
197
200
  while loopUpToDimensionsTotal(my=my):
198
- if dimensionsUnconstrainedCondition(connectionGraph=connectionGraph, my=my):
199
- dimensionsUnconstrainedDecrement(my=my)
201
+ initializeLeafConnectee(connectionGraph=connectionGraph, my=my)
202
+ if activeLeafConnectedToItself(my=my):
203
+ decrementDimensionsUnconstrained(my=my)
200
204
  else:
201
- leafConnecteeInitialization(connectionGraph=connectionGraph, my=my)
202
205
  while loopingLeavesConnectedToActiveLeaf(my=my):
203
206
  countGaps(gapsWhere=gapsWhere, my=my, track=track)
204
- leafConnecteeUpdate(connectionGraph=connectionGraph, my=my, track=track)
205
- indexDimensionIncrement(my=my)
206
- indexMiniGapInitialization(my=my)
207
+ updateLeafConnectee(connectionGraph=connectionGraph, my=my, track=track)
208
+ incrementIndexDimension(my=my)
209
+ initializeIndexMiniGap(my=my)
207
210
  while loopingToActiveGapCeiling(my=my):
208
211
  filterCommonGaps(gapsWhere=gapsWhere, my=my, track=track)
209
- indexMiniGapIncrement(my=my)
210
- while backtrackCondition(my=my, track=track):
212
+ incrementIndexMiniGap(my=my)
213
+ while noGapsHere(my=my, track=track):
211
214
  backtrack(my=my, track=track)
212
- if placeLeafCondition(my=my):
215
+ if thereIsAnActiveLeaf(my=my):
213
216
  placeLeaf(gapsWhere=gapsWhere, my=my, track=track)
214
217
  foldGroups[my[indexMy.taskIndex.value]] = groupsOfFolds
215
218