mapFolding 0.14.0__py3-none-any.whl → 0.15.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. mapFolding/_A007822.py +181 -0
  2. mapFolding/__init__.py +1 -1
  3. mapFolding/_oeisFormulas/A000682.py +2 -2
  4. mapFolding/_oeisFormulas/Z0Z_aOFn.py +7 -5
  5. mapFolding/_oeisFormulas/Z0Z_oeisMeanders.py +2 -0
  6. mapFolding/_oeisFormulas/matrixMeanders.py +122 -61
  7. mapFolding/_oeisFormulas/matrixMeandersAnnex.py +66 -66
  8. mapFolding/_theSSOT.py +9 -3
  9. mapFolding/_theTypes.py +34 -130
  10. mapFolding/basecamp.py +1 -1
  11. mapFolding/beDRY.py +5 -21
  12. mapFolding/dataBaskets.py +8 -3
  13. mapFolding/oeis.py +13 -15
  14. mapFolding/reference/A005316optimized128bit.py +19 -19
  15. mapFolding/reference/A005316primitiveOptimized.py +25 -25
  16. mapFolding/reference/A005316redis.py +19 -19
  17. mapFolding/reference/A005316write2disk.py +19 -19
  18. mapFolding/reference/matrixMeandersBaseline.py +20 -20
  19. mapFolding/reference/matrixMeandersBaselineAnnex.py +4 -4
  20. mapFolding/reference/matrixMeandersSimpleQueue.py +90 -0
  21. mapFolding/reference/matrixMeandersSlicePop.py +104 -0
  22. mapFolding/someAssemblyRequired/_toolkitContainers.py +1 -1
  23. mapFolding/someAssemblyRequired/makeJobTheorem2Numba.py +1 -1
  24. mapFolding/someAssemblyRequired/makeJobTheorem2codon.py +1 -1
  25. mapFolding/syntheticModules/countParallel.py +7 -4
  26. mapFolding/syntheticModules/daoOfMapFolding.py +6 -4
  27. mapFolding/syntheticModules/dataPacking.py +5 -3
  28. mapFolding/syntheticModules/theorem2Numba.py +4 -3
  29. {mapfolding-0.14.0.dist-info → mapfolding-0.15.0.dist-info}/METADATA +4 -5
  30. {mapfolding-0.14.0.dist-info → mapfolding-0.15.0.dist-info}/RECORD +34 -31
  31. {mapfolding-0.14.0.dist-info → mapfolding-0.15.0.dist-info}/WHEEL +0 -0
  32. {mapfolding-0.14.0.dist-info → mapfolding-0.15.0.dist-info}/entry_points.txt +0 -0
  33. {mapfolding-0.14.0.dist-info → mapfolding-0.15.0.dist-info}/licenses/LICENSE +0 -0
  34. {mapfolding-0.14.0.dist-info → mapfolding-0.15.0.dist-info}/top_level.txt +0 -0
mapFolding/_A007822.py ADDED
@@ -0,0 +1,181 @@
1
+ from mapFolding import Array1DLeavesTotal, makeDataContainer, NumPyLeavesTotal
2
+ from mapFolding.dataBaskets import MapFoldingState
3
+ from mapFolding.oeis import dictionaryOEIS
4
+ import numpy
5
+ import sys
6
+ import time
7
+
8
+ def activeLeafGreaterThan0(state: MapFoldingState) -> bool:
9
+ return state.leaf1ndex > 0
10
+
11
+ def activeLeafGreaterThanLeavesTotal(state: MapFoldingState) -> bool:
12
+ return state.leaf1ndex > state.leavesTotal
13
+
14
+ def activeLeafIsTheFirstLeaf(state: MapFoldingState) -> bool:
15
+ return state.leaf1ndex <= 1
16
+
17
+ def activeLeafIsUnconstrainedInAllDimensions(state: MapFoldingState) -> bool:
18
+ return not state.dimensionsUnconstrained
19
+
20
+ def activeLeafUnconstrainedInThisDimension(state: MapFoldingState) -> MapFoldingState:
21
+ state.dimensionsUnconstrained -= 1
22
+ return state
23
+
24
+ def filterCommonGaps(state: MapFoldingState) -> MapFoldingState:
25
+ state.gapsWhere[state.gap1ndex] = state.gapsWhere[state.indexMiniGap]
26
+ if state.countDimensionsGapped[state.gapsWhere[state.indexMiniGap]] == state.dimensionsUnconstrained:
27
+ state = incrementActiveGap(state)
28
+ state.countDimensionsGapped[state.gapsWhere[state.indexMiniGap]] = 0
29
+ return state
30
+
31
+ def gapAvailable(state: MapFoldingState) -> bool:
32
+ return state.leaf1ndex > 0
33
+
34
+ def incrementActiveGap(state: MapFoldingState) -> MapFoldingState:
35
+ state.gap1ndex += 1
36
+ return state
37
+
38
+ def incrementGap1ndexCeiling(state: MapFoldingState) -> MapFoldingState:
39
+ state.gap1ndexCeiling += 1
40
+ return state
41
+
42
+ def incrementIndexMiniGap(state: MapFoldingState) -> MapFoldingState:
43
+ state.indexMiniGap += 1
44
+ return state
45
+
46
+ def initializeIndexMiniGap(state: MapFoldingState) -> MapFoldingState:
47
+ state.indexMiniGap = state.gap1ndex
48
+ return state
49
+
50
+ def initializeVariablesToFindGaps(state: MapFoldingState) -> MapFoldingState:
51
+ state.dimensionsUnconstrained = state.dimensionsTotal
52
+ state.gap1ndexCeiling = state.gapRangeStart[state.leaf1ndex - 1]
53
+ state.indexDimension = 0
54
+ return state
55
+
56
+ def insertActiveLeaf(state: MapFoldingState) -> MapFoldingState:
57
+ state.indexLeaf = 0
58
+ while state.indexLeaf < state.leaf1ndex:
59
+ state.gapsWhere[state.gap1ndexCeiling] = state.indexLeaf
60
+ state.gap1ndexCeiling += 1
61
+ state.indexLeaf += 1
62
+ return state
63
+
64
+ def insertActiveLeafAtGap(state: MapFoldingState) -> MapFoldingState:
65
+ state.gap1ndex -= 1
66
+ state.leafAbove[state.leaf1ndex] = state.gapsWhere[state.gap1ndex]
67
+ state.leafBelow[state.leaf1ndex] = state.leafBelow[state.leafAbove[state.leaf1ndex]]
68
+ state.leafBelow[state.leafAbove[state.leaf1ndex]] = state.leaf1ndex
69
+ state.leafAbove[state.leafBelow[state.leaf1ndex]] = state.leaf1ndex
70
+ state.gapRangeStart[state.leaf1ndex] = state.gap1ndex
71
+ state.leaf1ndex += 1
72
+ return state
73
+
74
+ def leafBelowSentinelIs1(state: MapFoldingState) -> bool:
75
+ return state.leafBelow[0] == 1
76
+
77
+ def leafConnecteeIsActiveLeaf(state: MapFoldingState) -> bool:
78
+ return state.leafConnectee == state.leaf1ndex
79
+
80
+ def lookForGaps(state: MapFoldingState) -> MapFoldingState:
81
+ state.gapsWhere[state.gap1ndexCeiling] = state.leafConnectee
82
+ if state.countDimensionsGapped[state.leafConnectee] == 0:
83
+ state = incrementGap1ndexCeiling(state)
84
+ state.countDimensionsGapped[state.leafConnectee] += 1
85
+ return state
86
+
87
+ def lookupLeafConnecteeInConnectionGraph(state: MapFoldingState) -> MapFoldingState:
88
+ state.leafConnectee = state.connectionGraph[state.indexDimension, state.leaf1ndex, state.leaf1ndex]
89
+ return state
90
+
91
+ def loopingLeavesConnectedToActiveLeaf(state: MapFoldingState) -> bool:
92
+ return state.leafConnectee != state.leaf1ndex
93
+
94
+ def loopingThroughTheDimensions(state: MapFoldingState) -> bool:
95
+ return state.indexDimension < state.dimensionsTotal
96
+
97
+ def loopingToActiveGapCeiling(state: MapFoldingState) -> bool:
98
+ return state.indexMiniGap < state.gap1ndexCeiling
99
+
100
+ def noGapsHere(state: MapFoldingState) -> bool:
101
+ return (state.leaf1ndex > 0) and (state.gap1ndex == state.gapRangeStart[state.leaf1ndex - 1])
102
+
103
+ def tryAnotherLeafConnectee(state: MapFoldingState) -> MapFoldingState:
104
+ state.leafConnectee = state.connectionGraph[state.indexDimension, state.leaf1ndex, state.leafBelow[state.leafConnectee]]
105
+ return state
106
+
107
+ def tryNextDimension(state: MapFoldingState) -> MapFoldingState:
108
+ state.indexDimension += 1
109
+ return state
110
+
111
+ def undoLastLeafPlacement(state: MapFoldingState) -> MapFoldingState:
112
+ state.leaf1ndex -= 1
113
+ state.leafBelow[state.leafAbove[state.leaf1ndex]] = state.leafBelow[state.leaf1ndex]
114
+ state.leafAbove[state.leafBelow[state.leaf1ndex]] = state.leafAbove[state.leaf1ndex]
115
+ return state
116
+
117
+ def filterAsymmetricFolds(state: MapFoldingState) -> MapFoldingState:
118
+ lengthLeafBelow = len(state.leafBelow)
119
+
120
+ indexLeaf: int = 0
121
+ for leafConnectee in range(lengthLeafBelow):
122
+ leafNumber = int(state.leafBelow[indexLeaf])
123
+ state.leafComparison[leafConnectee] = (leafNumber - indexLeaf + lengthLeafBelow - 1) % (lengthLeafBelow - 1)
124
+ indexLeaf = leafNumber
125
+
126
+ indexInMiddle = (lengthLeafBelow - 1) // 2
127
+ for delta in range(lengthLeafBelow):
128
+ ImaSymmetricFold = True
129
+ for leafConnectee in range(indexInMiddle):
130
+ if state.leafComparison[(delta + leafConnectee) % lengthLeafBelow] != state.leafComparison[(delta + lengthLeafBelow - 2 - leafConnectee) % lengthLeafBelow]:
131
+ ImaSymmetricFold = False
132
+ break
133
+ if ImaSymmetricFold:
134
+ state.groupsOfFolds += 1
135
+
136
+ return state
137
+
138
+ def count(state: MapFoldingState) -> MapFoldingState:
139
+ while activeLeafGreaterThan0(state):
140
+ if activeLeafIsTheFirstLeaf(state) or leafBelowSentinelIs1(state):
141
+ if activeLeafGreaterThanLeavesTotal(state):
142
+ state = filterAsymmetricFolds(state)
143
+ else:
144
+ state = initializeVariablesToFindGaps(state)
145
+ while loopingThroughTheDimensions(state):
146
+ state = lookupLeafConnecteeInConnectionGraph(state)
147
+ if leafConnecteeIsActiveLeaf(state):
148
+ state = activeLeafUnconstrainedInThisDimension(state)
149
+ else:
150
+ while loopingLeavesConnectedToActiveLeaf(state):
151
+ state = lookForGaps(state)
152
+ state = tryAnotherLeafConnectee(state)
153
+ state = tryNextDimension(state)
154
+ if activeLeafIsUnconstrainedInAllDimensions(state):
155
+ state = insertActiveLeaf(state)
156
+ state = initializeIndexMiniGap(state)
157
+ while loopingToActiveGapCeiling(state):
158
+ state = filterCommonGaps(state)
159
+ state = incrementIndexMiniGap(state)
160
+ while noGapsHere(state):
161
+ state = undoLastLeafPlacement(state)
162
+ if gapAvailable(state):
163
+ state = insertActiveLeafAtGap(state)
164
+ return state
165
+
166
+ def doTheNeedful(state: MapFoldingState) -> MapFoldingState:
167
+ state = count(state)
168
+ state.groupsOfFolds = (state.groupsOfFolds + 1) // 2
169
+ return state
170
+
171
+ def Z0Z_flowNeedsFixing(mapShape: tuple[int, ...]) -> int:
172
+ return doTheNeedful(MapFoldingState(mapShape)).groupsOfFolds
173
+
174
+ if __name__ == '__main__':
175
+ for n in range(3, 7):
176
+ mapShape = dictionaryOEIS['A007822']['getMapShape'](n)
177
+
178
+ state = MapFoldingState(mapShape)
179
+ timeStart = time.perf_counter()
180
+ foldsTotal = doTheNeedful(state).groupsOfFolds
181
+ sys.stdout.write(f"{foldsTotal == dictionaryOEIS['A007822']['valuesKnown'][n]} {n} {foldsTotal = } {time.perf_counter() - timeStart:.2f}\n")
mapFolding/__init__.py CHANGED
@@ -46,7 +46,7 @@ from mapFolding._theTypes import (
46
46
  Array1DElephino as Array1DElephino,
47
47
  Array1DFoldsTotal as Array1DFoldsTotal,
48
48
  Array1DLeavesTotal as Array1DLeavesTotal,
49
- Array3D as Array3D,
49
+ Array3DLeavesTotal as Array3DLeavesTotal,
50
50
  DatatypeElephino as DatatypeElephino,
51
51
  DatatypeFoldsTotal as DatatypeFoldsTotal,
52
52
  DatatypeLeavesTotal as DatatypeLeavesTotal,
@@ -1,7 +1,7 @@
1
- from mapFolding._oeisFormulas.matrixMeanders import count, curveMaximum
1
+ from mapFolding._oeisFormulas.matrixMeanders import count
2
2
 
3
3
  def initializeA000682(n: int) -> dict[int, int]:
4
- curveLocationsMAXIMUM = curveMaximum[n].curveLocationsMAXIMUM
4
+ curveLocationsMAXIMUM = 1 << (2 * n + 4)
5
5
 
6
6
  curveSeed: int = 5 - (n & 0b1) * 4
7
7
  listCurveLocations = [(curveSeed << 1) | curveSeed]
@@ -1,5 +1,6 @@
1
1
  from mapFolding._oeisFormulas.A000136 import A000136
2
- from mapFolding._oeisFormulas.matrixMeanders import curveMaximum
2
+ from mapFolding._oeisFormulas.A000682 import A000682
3
+ from mapFolding._oeisFormulas.Z0Z_oeisMeanders import dictionaryOEISMeanders
3
4
  from mapFolding.oeis import dictionaryOEIS
4
5
  import sys
5
6
  import time
@@ -8,12 +9,13 @@ import time
8
9
 
9
10
  if __name__ == '__main__':
10
11
  oeisID = 'A000136'
11
- for n in range(3,30):
12
+ oeisID = 'A000682'
13
+ for n in range(3, 13):
12
14
 
13
- # print(n)
15
+ # sys.stdout.write(f"{n = }\n")
14
16
 
15
17
  timeStart = time.perf_counter()
16
- foldsTotal = A000136(n)
18
+ foldsTotal = eval(oeisID)(n)
17
19
  # sys.stdout.write(f"{n} {foldsTotal} {time.perf_counter() - timeStart:.2f}\n")
18
- sys.stdout.write(f"{foldsTotal == dictionaryOEIS[oeisID]['valuesKnown'][n]} {n} {foldsTotal} {time.perf_counter() - timeStart:.2f}\n")
20
+ sys.stdout.write(f"{foldsTotal == dictionaryOEISMeanders[oeisID]['valuesKnown'][n]} {n} {foldsTotal} {time.perf_counter() - timeStart:.2f}\n") # pyright: ignore[reportIndexIssue]
19
21
 
@@ -8,6 +8,8 @@ from mapFolding._oeisFormulas.A301620 import A301620
8
8
  from mapFolding.oeis import getOEISidInformation, getOEISidValues
9
9
  import sys
10
10
 
11
+ 'A001010'
12
+ 'A001011'
11
13
  oeisIDsMeanders: list[str] = [
12
14
  'A000560',
13
15
  'A000682',
@@ -1,65 +1,126 @@
1
- from mapFolding._oeisFormulas.matrixMeandersAnnex import curveMaximum as curveMaximum
2
-
3
- dictionaryCurveLocations: dict[int, int] = {}
4
-
5
- def getCurveLocations() -> dict[int, int]:
6
- global dictionaryCurveLocations # noqa: PLW0603
7
- sherpa = dictionaryCurveLocations.copy()
8
- dictionaryCurveLocations = {}
9
- return sherpa
10
-
11
- def recordAnalysis(curveLocationAnalysis: int, curveLocationsMAXIMUM: int, distinctCrossings: int) -> None:
12
- if curveLocationAnalysis < curveLocationsMAXIMUM:
13
- dictionaryCurveLocations[curveLocationAnalysis] = dictionaryCurveLocations.get(curveLocationAnalysis, 0) + distinctCrossings
14
-
15
- def initializeCurveLocations(startingCurveLocations: dict[int, int]) -> None:
16
- global dictionaryCurveLocations # noqa: PLW0603
17
- dictionaryCurveLocations = startingCurveLocations.copy()
18
-
19
1
  def count(bridges: int, startingCurveLocations: dict[int, int]) -> int:
20
- initializeCurveLocations(startingCurveLocations)
21
-
2
+ listCurveMaximums: list[tuple[int, int, int]] = [
3
+ (0x15, 0x2a, 0x10),
4
+ (0x55, 0xaa, 0x40),
5
+ (0x155, 0x2aa, 0x100),
6
+ (0x555, 0xaaa, 0x400),
7
+ (0x1555, 0x2aaa, 0x1000),
8
+ (0x5555, 0xaaaa, 0x4000),
9
+ (0x15555, 0x2aaaa, 0x10000),
10
+ (0x55555, 0xaaaaa, 0x40000),
11
+ (0x155555, 0x2aaaaa, 0x100000),
12
+ (0x555555, 0xaaaaaa, 0x400000),
13
+ (0x1555555, 0x2aaaaaa, 0x1000000),
14
+ (0x5555555, 0xaaaaaaa, 0x4000000),
15
+ (0x15555555, 0x2aaaaaaa, 0x10000000),
16
+ (0x55555555, 0xaaaaaaaa, 0x40000000),
17
+ (0x155555555, 0x2aaaaaaaa, 0x100000000),
18
+ (0x555555555, 0xaaaaaaaaa, 0x400000000),
19
+ (0x1555555555, 0x2aaaaaaaaa, 0x1000000000),
20
+ (0x5555555555, 0xaaaaaaaaaa, 0x4000000000),
21
+ (0x15555555555, 0x2aaaaaaaaaa, 0x10000000000),
22
+ (0x55555555555, 0xaaaaaaaaaaa, 0x40000000000),
23
+ (0x155555555555, 0x2aaaaaaaaaaa, 0x100000000000),
24
+ (0x555555555555, 0xaaaaaaaaaaaa, 0x400000000000),
25
+ (0x1555555555555, 0x2aaaaaaaaaaaa, 0x1000000000000),
26
+ (0x5555555555555, 0xaaaaaaaaaaaaa, 0x4000000000000),
27
+ (0x15555555555555, 0x2aaaaaaaaaaaaa, 0x10000000000000),
28
+ (0x55555555555555, 0xaaaaaaaaaaaaaa, 0x40000000000000),
29
+ (0x155555555555555, 0x2aaaaaaaaaaaaaa, 0x100000000000000),
30
+ (0x555555555555555, 0xaaaaaaaaaaaaaaa, 0x400000000000000),
31
+ (0x1555555555555555, 0x2aaaaaaaaaaaaaaa, 0x1000000000000000),
32
+ (0x5555555555555555, 0xaaaaaaaaaaaaaaaa, 0x4000000000000000),
33
+ (0x15555555555555555, 0x2aaaaaaaaaaaaaaaa, 0x10000000000000000),
34
+ (0x55555555555555555, 0xaaaaaaaaaaaaaaaaa, 0x40000000000000000),
35
+ (0x155555555555555555, 0x2aaaaaaaaaaaaaaaaa, 0x100000000000000000),
36
+ (0x555555555555555555, 0xaaaaaaaaaaaaaaaaaa, 0x400000000000000000),
37
+ (0x1555555555555555555, 0x2aaaaaaaaaaaaaaaaaa, 0x1000000000000000000),
38
+ (0x5555555555555555555, 0xaaaaaaaaaaaaaaaaaaa, 0x4000000000000000000),
39
+ (0x15555555555555555555, 0x2aaaaaaaaaaaaaaaaaaa, 0x10000000000000000000),
40
+ (0x55555555555555555555, 0xaaaaaaaaaaaaaaaaaaaa, 0x40000000000000000000),
41
+ (0x155555555555555555555, 0x2aaaaaaaaaaaaaaaaaaaa, 0x100000000000000000000),
42
+ (0x555555555555555555555, 0xaaaaaaaaaaaaaaaaaaaaa, 0x400000000000000000000),
43
+ (0x1555555555555555555555, 0x2aaaaaaaaaaaaaaaaaaaaa, 0x1000000000000000000000),
44
+ (0x5555555555555555555555, 0xaaaaaaaaaaaaaaaaaaaaaa, 0x4000000000000000000000),
45
+ (0x15555555555555555555555, 0x2aaaaaaaaaaaaaaaaaaaaaa, 0x10000000000000000000000),
46
+ (0x55555555555555555555555, 0xaaaaaaaaaaaaaaaaaaaaaaa, 0x40000000000000000000000),
47
+ (0x155555555555555555555555, 0x2aaaaaaaaaaaaaaaaaaaaaaa, 0x100000000000000000000000),
48
+ (0x555555555555555555555555, 0xaaaaaaaaaaaaaaaaaaaaaaaa, 0x400000000000000000000000),
49
+ (0x1555555555555555555555555, 0x2aaaaaaaaaaaaaaaaaaaaaaaa, 0x1000000000000000000000000),
50
+ (0x5555555555555555555555555, 0xaaaaaaaaaaaaaaaaaaaaaaaaa, 0x4000000000000000000000000),
51
+ (0x15555555555555555555555555, 0x2aaaaaaaaaaaaaaaaaaaaaaaaa, 0x10000000000000000000000000),
52
+ (0x55555555555555555555555555, 0xaaaaaaaaaaaaaaaaaaaaaaaaaa, 0x40000000000000000000000000),
53
+ (0x155555555555555555555555555, 0x2aaaaaaaaaaaaaaaaaaaaaaaaaa, 0x100000000000000000000000000),
54
+ (0x555555555555555555555555555, 0xaaaaaaaaaaaaaaaaaaaaaaaaaaa, 0x400000000000000000000000000),
55
+ (0x1555555555555555555555555555, 0x2aaaaaaaaaaaaaaaaaaaaaaaaaaa, 0x1000000000000000000000000000),
56
+ (0x5555555555555555555555555555, 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaa, 0x4000000000000000000000000000),
57
+ (0x15555555555555555555555555555, 0x2aaaaaaaaaaaaaaaaaaaaaaaaaaaa, 0x10000000000000000000000000000),
58
+ (0x55555555555555555555555555555, 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, 0x40000000000000000000000000000),
59
+ (0x155555555555555555555555555555, 0x2aaaaaaaaaaaaaaaaaaaaaaaaaaaaa, 0x100000000000000000000000000000),
60
+ (0x555555555555555555555555555555, 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, 0x400000000000000000000000000000),
61
+ (0x1555555555555555555555555555555, 0x2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, 0x1000000000000000000000000000000),
62
+ (0x5555555555555555555555555555555, 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, 0x4000000000000000000000000000000),
63
+ (0x15555555555555555555555555555555, 0x2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, 0x10000000000000000000000000000000),
64
+ (0x55555555555555555555555555555555, 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, 0x40000000000000000000000000000000),
65
+ ]
66
+ listCurveMaximums = listCurveMaximums[0:bridges]
67
+
68
+ dictionaryCurveLocations: dict[int, int] = {}
22
69
  while bridges > 0:
23
70
  bridges -= 1
24
- curveLocationsMAXIMUM, bifurcationEvenLocator, bifurcationOddLocator = curveMaximum[bridges]
25
-
26
- for curveLocations, distinctCrossings in getCurveLocations().items():
27
- bifurcationEven = (curveLocations & bifurcationEvenLocator) >> 1
28
- bifurcationOdd = curveLocations & bifurcationOddLocator
29
-
30
- bifurcationEvenFinalZero = (bifurcationEven & 0b1) == 0
31
- bifurcationEvenHasCurves = bifurcationEven != 1
32
- bifurcationOddFinalZero = (bifurcationOdd & 0b1) == 0
33
- bifurcationOddHasCurves = bifurcationOdd != 1
34
-
35
- if bifurcationEvenHasCurves:
36
- curveLocationAnalysis = (bifurcationEven >> 1) | (bifurcationOdd << 2) | bifurcationEvenFinalZero
37
- recordAnalysis(curveLocationAnalysis, curveLocationsMAXIMUM, distinctCrossings)
38
-
39
- if bifurcationOddHasCurves:
40
- curveLocationAnalysis = (bifurcationOdd >> 2) | (bifurcationEven << 3) | (bifurcationOddFinalZero << 1)
41
- recordAnalysis(curveLocationAnalysis, curveLocationsMAXIMUM, distinctCrossings)
42
-
43
- curveLocationAnalysis = ((bifurcationOdd | (bifurcationEven << 1)) << 2) | 3
44
- recordAnalysis(curveLocationAnalysis, curveLocationsMAXIMUM, distinctCrossings)
45
-
46
- if bifurcationEvenHasCurves and bifurcationOddHasCurves and (bifurcationEvenFinalZero or bifurcationOddFinalZero):
47
- XOrHere2makePair = 0b1
48
- findUnpairedBinary1 = 0
49
-
50
- if bifurcationEvenFinalZero and not bifurcationOddFinalZero:
51
- while findUnpairedBinary1 >= 0:
52
- XOrHere2makePair <<= 2
53
- findUnpairedBinary1 += 1 if (bifurcationEven & XOrHere2makePair) == 0 else -1
54
- bifurcationEven ^= XOrHere2makePair
55
-
56
- elif bifurcationOddFinalZero and not bifurcationEvenFinalZero:
57
- while findUnpairedBinary1 >= 0:
58
- XOrHere2makePair <<= 2
59
- findUnpairedBinary1 += 1 if (bifurcationOdd & XOrHere2makePair) == 0 else -1
60
- bifurcationOdd ^= XOrHere2makePair
61
-
62
- curveLocationAnalysis = ((bifurcationEven >> 2) << 1) | (bifurcationOdd >> 2)
63
- recordAnalysis(curveLocationAnalysis, curveLocationsMAXIMUM, distinctCrossings)
64
71
 
65
- return sum(getCurveLocations().values())
72
+ bifurcationAlphaLocator, bifurcationZuluLocator, curveLocationsMAXIMUM = listCurveMaximums[bridges]
73
+ for curveLocations, distinctCrossings in startingCurveLocations.items():
74
+ bifurcationAlpha = (curveLocations & bifurcationAlphaLocator)
75
+ bifurcationZulu = (curveLocations & bifurcationZuluLocator) >> 1
76
+
77
+ bifurcationAlphaHasCurves = bifurcationAlpha != 1
78
+ bifurcationZuluHasCurves = bifurcationZulu != 1
79
+
80
+ # Curve location analysis
81
+ curveLocationAnalysis = ((bifurcationAlpha | (bifurcationZulu << 1)) << 2) | 3
82
+ if curveLocationAnalysis < curveLocationsMAXIMUM:
83
+ dictionaryCurveLocations[curveLocationAnalysis] = dictionaryCurveLocations.get(curveLocationAnalysis, 0) + distinctCrossings
84
+
85
+ # Curve location analysis, conditional
86
+ if bifurcationZuluHasCurves:
87
+ curveLocationAnalysis = (bifurcationZulu >> 1) | (bifurcationAlpha << 2) | (bifurcationZuluIsEven := not (bifurcationZulu & 1))
88
+ if curveLocationAnalysis < curveLocationsMAXIMUM:
89
+ dictionaryCurveLocations[curveLocationAnalysis] = dictionaryCurveLocations.get(curveLocationAnalysis, 0) + distinctCrossings
90
+
91
+ # Curve location analysis, conditional
92
+ if bifurcationAlphaHasCurves:
93
+ curveLocationAnalysis = (bifurcationAlphaShiftRight2 := bifurcationAlpha >> 2) | (bifurcationZulu << 3) | ((bifurcationAlphaIsEven := 1 - (bifurcationAlpha & 0b1)) << 1)
94
+ if curveLocationAnalysis < curveLocationsMAXIMUM:
95
+ dictionaryCurveLocations[curveLocationAnalysis] = dictionaryCurveLocations.get(curveLocationAnalysis, 0) + distinctCrossings
96
+
97
+ # Curve location analysis, uber-conditional
98
+ if bifurcationZuluHasCurves and bifurcationAlphaHasCurves:
99
+ # One Truth-check to select a code path
100
+ finalZeroCombination = (bifurcationZuluIsEven << 1) | bifurcationAlphaIsEven # pyright: ignore[reportPossiblyUnboundVariable]
101
+
102
+ if finalZeroCombination != 0: # Case 0 (False, False)
103
+ XOrHere2makePair = 0b1
104
+ findUnpairedBinary1 = 0
105
+
106
+ if finalZeroCombination == 1: # Case 1: (False, True)
107
+ while findUnpairedBinary1 >= 0:
108
+ XOrHere2makePair <<= 2
109
+ findUnpairedBinary1 += 1 if (bifurcationAlpha & XOrHere2makePair) == 0 else -1
110
+ bifurcationAlphaShiftRight2 = (bifurcationAlpha ^ XOrHere2makePair) >> 2
111
+ elif finalZeroCombination == 2: # Case 2: (True, False)
112
+ while findUnpairedBinary1 >= 0:
113
+ XOrHere2makePair <<= 2
114
+ findUnpairedBinary1 += 1 if (bifurcationZulu & XOrHere2makePair) == 0 else -1
115
+ bifurcationZulu ^= XOrHere2makePair
116
+
117
+ # Cases 1, 2, and 3 all compute curveLocationAnalysis
118
+ # TODO https://github.com/hunterhogan/mapFolding/issues/19
119
+ curveLocationAnalysis = ((bifurcationZulu >> 2) << 1) | bifurcationAlphaShiftRight2 # pyright: ignore[reportPossiblyUnboundVariable]
120
+ if curveLocationAnalysis < curveLocationsMAXIMUM:
121
+ dictionaryCurveLocations[curveLocationAnalysis] = dictionaryCurveLocations.get(curveLocationAnalysis, 0) + distinctCrossings
122
+
123
+ startingCurveLocations = dictionaryCurveLocations.copy()
124
+ dictionaryCurveLocations = {}
125
+
126
+ return sum(startingCurveLocations.values())
@@ -2,81 +2,81 @@ from typing import NamedTuple
2
2
  import sys
3
3
 
4
4
  class limitLocators(NamedTuple):
5
+ bifurcationAlphaLocator: int
6
+ bifurcationZuluLocator: int
5
7
  curveLocationsMAXIMUM: int
6
- bifurcationEvenLocator: int
7
- bifurcationOddLocator: int
8
8
 
9
9
  curveMaximum: dict[int, limitLocators] = {
10
- 0: limitLocators(16, 0x2a, 0x15),
11
- 1: limitLocators(64, 0xaa, 0x55),
12
- 2: limitLocators(256, 0x2aa, 0x155),
13
- 3: limitLocators(1024, 0xaaa, 0x555),
14
- 4: limitLocators(4096, 0x2aaa, 0x1555),
15
- 5: limitLocators(16384, 0xaaaa, 0x5555),
16
- 6: limitLocators(65536, 0x2aaaa, 0x15555),
17
- 7: limitLocators(262144, 0xaaaaa, 0x55555),
18
- 8: limitLocators(1048576, 0x2aaaaa, 0x155555),
19
- 9: limitLocators(4194304, 0xaaaaaa, 0x555555),
20
- 10: limitLocators(16777216, 0x2aaaaaa, 0x1555555),
21
- 11: limitLocators(67108864, 0xaaaaaaa, 0x5555555),
22
- 12: limitLocators(268435456, 0x2aaaaaaa, 0x15555555),
23
- 13: limitLocators(1073741824, 0xaaaaaaaa, 0x55555555),
24
- 14: limitLocators(4294967296, 0x2aaaaaaaa, 0x155555555),
25
- 15: limitLocators(17179869184, 0xaaaaaaaaa, 0x555555555),
26
- 16: limitLocators(68719476736, 0x2aaaaaaaaa, 0x1555555555),
27
- 17: limitLocators(274877906944, 0xaaaaaaaaaa, 0x5555555555),
28
- 18: limitLocators(1099511627776, 0x2aaaaaaaaaa, 0x15555555555),
29
- 19: limitLocators(4398046511104, 0xaaaaaaaaaaa, 0x55555555555),
30
- 20: limitLocators(17592186044416, 0x2aaaaaaaaaaa, 0x155555555555),
31
- 21: limitLocators(70368744177664, 0xaaaaaaaaaaaa, 0x555555555555),
32
- 22: limitLocators(281474976710656, 0x2aaaaaaaaaaaa, 0x1555555555555),
33
- 23: limitLocators(1125899906842624, 0xaaaaaaaaaaaaa, 0x5555555555555),
34
- 24: limitLocators(4503599627370496, 0x2aaaaaaaaaaaaa, 0x15555555555555),
35
- 25: limitLocators(18014398509481984, 0xaaaaaaaaaaaaaa, 0x55555555555555),
36
- 26: limitLocators(72057594037927936, 0x2aaaaaaaaaaaaaa, 0x155555555555555),
37
- 27: limitLocators(288230376151711744, 0xaaaaaaaaaaaaaaa, 0x555555555555555),
38
- 28: limitLocators(1152921504606846976, 0x2aaaaaaaaaaaaaaa, 0x1555555555555555),
39
- 29: limitLocators(4611686018427387904, 0xaaaaaaaaaaaaaaaa, 0x5555555555555555),
40
- 30: limitLocators(18446744073709551616, 0x2aaaaaaaaaaaaaaaa, 0x15555555555555555),
41
- 31: limitLocators(73786976294838206464, 0xaaaaaaaaaaaaaaaaa, 0x55555555555555555),
42
- 32: limitLocators(295147905179352825856, 0x2aaaaaaaaaaaaaaaaa, 0x155555555555555555),
43
- 33: limitLocators(1180591620717411303424, 0xaaaaaaaaaaaaaaaaaa, 0x555555555555555555),
44
- 34: limitLocators(4722366482869645213696, 0x2aaaaaaaaaaaaaaaaaa, 0x1555555555555555555),
45
- 35: limitLocators(18889465931478580854784, 0xaaaaaaaaaaaaaaaaaaa, 0x5555555555555555555),
46
- 36: limitLocators(75557863725914323419136, 0x2aaaaaaaaaaaaaaaaaaa, 0x15555555555555555555),
47
- 37: limitLocators(302231454903657293676544, 0xaaaaaaaaaaaaaaaaaaaa, 0x55555555555555555555),
48
- 38: limitLocators(1208925819614629174706176, 0x2aaaaaaaaaaaaaaaaaaaa, 0x155555555555555555555),
49
- 39: limitLocators(4835703278458516698824704, 0xaaaaaaaaaaaaaaaaaaaaa, 0x555555555555555555555),
50
- 40: limitLocators(19342813113834066795298816, 0x2aaaaaaaaaaaaaaaaaaaaa, 0x1555555555555555555555),
51
- 41: limitLocators(77371252455336267181195264, 0xaaaaaaaaaaaaaaaaaaaaaa, 0x5555555555555555555555),
52
- 42: limitLocators(309485009821345068724781056, 0x2aaaaaaaaaaaaaaaaaaaaaa, 0x15555555555555555555555),
53
- 43: limitLocators(1237940039285380274899124224, 0xaaaaaaaaaaaaaaaaaaaaaaa, 0x55555555555555555555555),
54
- 44: limitLocators(4951760157141521099596496896, 0x2aaaaaaaaaaaaaaaaaaaaaaa, 0x155555555555555555555555),
55
- 45: limitLocators(19807040628566084398385987584, 0xaaaaaaaaaaaaaaaaaaaaaaaa, 0x555555555555555555555555),
56
- 46: limitLocators(79228162514264337593543950336, 0x2aaaaaaaaaaaaaaaaaaaaaaaa, 0x1555555555555555555555555),
57
- 47: limitLocators(316912650057057350374175801344, 0xaaaaaaaaaaaaaaaaaaaaaaaaa, 0x5555555555555555555555555),
58
- 48: limitLocators(1267650600228229401496703205376, 0x2aaaaaaaaaaaaaaaaaaaaaaaaa, 0x15555555555555555555555555),
59
- 49: limitLocators(5070602400912917605986812821504, 0xaaaaaaaaaaaaaaaaaaaaaaaaaa, 0x55555555555555555555555555),
60
- 50: limitLocators(20282409603651670423947251286016, 0x2aaaaaaaaaaaaaaaaaaaaaaaaaa, 0x155555555555555555555555555),
61
- 51: limitLocators(81129638414606681695789005144064, 0xaaaaaaaaaaaaaaaaaaaaaaaaaaa, 0x555555555555555555555555555),
62
- 52: limitLocators(324518553658426726783156020576256, 0x2aaaaaaaaaaaaaaaaaaaaaaaaaaa, 0x1555555555555555555555555555),
63
- 53: limitLocators(1298074214633706907132624082305024, 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaa, 0x5555555555555555555555555555),
64
- 54: limitLocators(5192296858534827628530496329220096, 0x2aaaaaaaaaaaaaaaaaaaaaaaaaaaa, 0x15555555555555555555555555555),
65
- 55: limitLocators(20769187434139310514121985316880384, 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, 0x55555555555555555555555555555),
66
- 56: limitLocators(83076749736557242056487941267521536, 0x2aaaaaaaaaaaaaaaaaaaaaaaaaaaaa, 0x155555555555555555555555555555),
67
- 57: limitLocators(332306998946228968225951765070086144, 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, 0x555555555555555555555555555555),
68
- 58: limitLocators(1329227995784915872903807060280344576, 0x2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, 0x1555555555555555555555555555555),
69
- 59: limitLocators(5316911983139663491615228241121378304, 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, 0x5555555555555555555555555555555),
70
- 60: limitLocators(21267647932558653966460912964485513216, 0x2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, 0x15555555555555555555555555555555),
71
- 61: limitLocators(85070591730234615865843651857942052864, 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, 0x55555555555555555555555555555555),
10
+ 0: limitLocators(0x15, 0x2a, 0x10),
11
+ 1: limitLocators(0x55, 0xaa, 0x40),
12
+ 2: limitLocators(0x155, 0x2aa, 0x100),
13
+ 3: limitLocators(0x555, 0xaaa, 0x400),
14
+ 4: limitLocators(0x1555, 0x2aaa, 0x1000),
15
+ 5: limitLocators(0x5555, 0xaaaa, 0x4000),
16
+ 6: limitLocators(0x15555, 0x2aaaa, 0x10000),
17
+ 7: limitLocators(0x55555, 0xaaaaa, 0x40000),
18
+ 8: limitLocators(0x155555, 0x2aaaaa, 0x100000),
19
+ 9: limitLocators(0x555555, 0xaaaaaa, 0x400000),
20
+ 10: limitLocators(0x1555555, 0x2aaaaaa, 0x1000000),
21
+ 11: limitLocators(0x5555555, 0xaaaaaaa, 0x4000000),
22
+ 12: limitLocators(0x15555555, 0x2aaaaaaa, 0x10000000),
23
+ 13: limitLocators(0x55555555, 0xaaaaaaaa, 0x40000000),
24
+ 14: limitLocators(0x155555555, 0x2aaaaaaaa, 0x100000000),
25
+ 15: limitLocators(0x555555555, 0xaaaaaaaaa, 0x400000000),
26
+ 16: limitLocators(0x1555555555, 0x2aaaaaaaaa, 0x1000000000),
27
+ 17: limitLocators(0x5555555555, 0xaaaaaaaaaa, 0x4000000000),
28
+ 18: limitLocators(0x15555555555, 0x2aaaaaaaaaa, 0x10000000000),
29
+ 19: limitLocators(0x55555555555, 0xaaaaaaaaaaa, 0x40000000000),
30
+ 20: limitLocators(0x155555555555, 0x2aaaaaaaaaaa, 0x100000000000),
31
+ 21: limitLocators(0x555555555555, 0xaaaaaaaaaaaa, 0x400000000000),
32
+ 22: limitLocators(0x1555555555555, 0x2aaaaaaaaaaaa, 0x1000000000000),
33
+ 23: limitLocators(0x5555555555555, 0xaaaaaaaaaaaaa, 0x4000000000000),
34
+ 24: limitLocators(0x15555555555555, 0x2aaaaaaaaaaaaa, 0x10000000000000),
35
+ 25: limitLocators(0x55555555555555, 0xaaaaaaaaaaaaaa, 0x40000000000000),
36
+ 26: limitLocators(0x155555555555555, 0x2aaaaaaaaaaaaaa, 0x100000000000000),
37
+ 27: limitLocators(0x555555555555555, 0xaaaaaaaaaaaaaaa, 0x400000000000000),
38
+ 28: limitLocators(0x1555555555555555, 0x2aaaaaaaaaaaaaaa, 0x1000000000000000), # 0x2aaaaaaaaaaaaaaa.bit_length() = 62
39
+ 29: limitLocators(0x5555555555555555, 0xaaaaaaaaaaaaaaaa, 0x4000000000000000),
40
+ 30: limitLocators(0x15555555555555555, 0x2aaaaaaaaaaaaaaaa, 0x10000000000000000),
41
+ 31: limitLocators(0x55555555555555555, 0xaaaaaaaaaaaaaaaaa, 0x40000000000000000),
42
+ 32: limitLocators(0x155555555555555555, 0x2aaaaaaaaaaaaaaaaa, 0x100000000000000000),
43
+ 33: limitLocators(0x555555555555555555, 0xaaaaaaaaaaaaaaaaaa, 0x400000000000000000),
44
+ 34: limitLocators(0x1555555555555555555, 0x2aaaaaaaaaaaaaaaaaa, 0x1000000000000000000),
45
+ 35: limitLocators(0x5555555555555555555, 0xaaaaaaaaaaaaaaaaaaa, 0x4000000000000000000),
46
+ 36: limitLocators(0x15555555555555555555, 0x2aaaaaaaaaaaaaaaaaaa, 0x10000000000000000000),
47
+ 37: limitLocators(0x55555555555555555555, 0xaaaaaaaaaaaaaaaaaaaa, 0x40000000000000000000),
48
+ 38: limitLocators(0x155555555555555555555, 0x2aaaaaaaaaaaaaaaaaaaa, 0x100000000000000000000),
49
+ 39: limitLocators(0x555555555555555555555, 0xaaaaaaaaaaaaaaaaaaaaa, 0x400000000000000000000),
50
+ 40: limitLocators(0x1555555555555555555555, 0x2aaaaaaaaaaaaaaaaaaaaa, 0x1000000000000000000000),
51
+ 41: limitLocators(0x5555555555555555555555, 0xaaaaaaaaaaaaaaaaaaaaaa, 0x4000000000000000000000),
52
+ 42: limitLocators(0x15555555555555555555555, 0x2aaaaaaaaaaaaaaaaaaaaaa, 0x10000000000000000000000),
53
+ 43: limitLocators(0x55555555555555555555555, 0xaaaaaaaaaaaaaaaaaaaaaaa, 0x40000000000000000000000),
54
+ 44: limitLocators(0x155555555555555555555555, 0x2aaaaaaaaaaaaaaaaaaaaaaa, 0x100000000000000000000000),
55
+ 45: limitLocators(0x555555555555555555555555, 0xaaaaaaaaaaaaaaaaaaaaaaaa, 0x400000000000000000000000),
56
+ 46: limitLocators(0x1555555555555555555555555, 0x2aaaaaaaaaaaaaaaaaaaaaaaa, 0x1000000000000000000000000),
57
+ 47: limitLocators(0x5555555555555555555555555, 0xaaaaaaaaaaaaaaaaaaaaaaaaa, 0x4000000000000000000000000),
58
+ 48: limitLocators(0x15555555555555555555555555, 0x2aaaaaaaaaaaaaaaaaaaaaaaaa, 0x10000000000000000000000000),
59
+ 49: limitLocators(0x55555555555555555555555555, 0xaaaaaaaaaaaaaaaaaaaaaaaaaa, 0x40000000000000000000000000),
60
+ 50: limitLocators(0x155555555555555555555555555, 0x2aaaaaaaaaaaaaaaaaaaaaaaaaa, 0x100000000000000000000000000),
61
+ 51: limitLocators(0x555555555555555555555555555, 0xaaaaaaaaaaaaaaaaaaaaaaaaaaa, 0x400000000000000000000000000),
62
+ 52: limitLocators(0x1555555555555555555555555555, 0x2aaaaaaaaaaaaaaaaaaaaaaaaaaa, 0x1000000000000000000000000000),
63
+ 53: limitLocators(0x5555555555555555555555555555, 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaa, 0x4000000000000000000000000000),
64
+ 54: limitLocators(0x15555555555555555555555555555, 0x2aaaaaaaaaaaaaaaaaaaaaaaaaaaa, 0x10000000000000000000000000000),
65
+ 55: limitLocators(0x55555555555555555555555555555, 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, 0x40000000000000000000000000000),
66
+ 56: limitLocators(0x155555555555555555555555555555, 0x2aaaaaaaaaaaaaaaaaaaaaaaaaaaaa, 0x100000000000000000000000000000),
67
+ 57: limitLocators(0x555555555555555555555555555555, 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, 0x400000000000000000000000000000),
68
+ 58: limitLocators(0x1555555555555555555555555555555, 0x2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, 0x1000000000000000000000000000000),
69
+ 59: limitLocators(0x5555555555555555555555555555555, 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, 0x4000000000000000000000000000000),
70
+ 60: limitLocators(0x15555555555555555555555555555555, 0x2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, 0x10000000000000000000000000000000),
71
+ 61: limitLocators(0x55555555555555555555555555555555, 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, 0x40000000000000000000000000000000),
72
72
  }
73
73
 
74
74
  def makeCurveMaximum() -> None:
75
75
  sys.stdout.write("curveMaximum: dict[int, limitLocators] = {\n")
76
76
  for n in range(62):
77
77
  curveLocationsMAXIMUM = 1 << (2 * n + 4)
78
- bifurcationOddLocator = int('01' * ((curveLocationsMAXIMUM.bit_length() + 1) // 2), 2)
79
- sys.stdout.write(f"{n}: limitLocators({curveLocationsMAXIMUM}, {hex(bifurcationOddLocator << 1)}, {hex(bifurcationOddLocator)}),\n")
78
+ bifurcationAlphaLocator = int('01' * ((curveLocationsMAXIMUM.bit_length() + 1) // 2), 2)
79
+ sys.stdout.write(f"{n}: limitLocators({hex(bifurcationAlphaLocator)}, {hex(bifurcationAlphaLocator << 1)}, {hex(curveLocationsMAXIMUM)}),\n")
80
80
  sys.stdout.write("}\n")
81
81
 
82
82
  if __name__ == '__main__':
mapFolding/_theSSOT.py CHANGED
@@ -76,19 +76,19 @@ concurrencyPackage = concurrencyPackageHARDCODED
76
76
  # TODO I made a `TypedDict` before I knew how to make dataclasses and classes. Think about other data structures.
77
77
  settingsOEISManuallySelected: dict[str, MetadataOEISidManuallySet] = {
78
78
  'A000136': {
79
- 'getMapShape': lambda n: tuple(sorted([1, n])),
79
+ 'getMapShape': lambda n: (1, n),
80
80
  'valuesBenchmark': [14],
81
81
  'valuesTestParallelization': [*range(3, 7)],
82
82
  'valuesTestValidation': [random.randint(2, 9)], # noqa: S311
83
83
  },
84
84
  'A001415': {
85
- 'getMapShape': lambda n: tuple(sorted([2, n])),
85
+ 'getMapShape': lambda n: (2, n),
86
86
  'valuesBenchmark': [14],
87
87
  'valuesTestParallelization': [*range(3, 7)],
88
88
  'valuesTestValidation': [random.randint(2, 9)], # noqa: S311
89
89
  },
90
90
  'A001416': {
91
- 'getMapShape': lambda n: tuple(sorted([3, n])),
91
+ 'getMapShape': lambda n: (3, n),
92
92
  'valuesBenchmark': [9],
93
93
  'valuesTestParallelization': [*range(3, 5)],
94
94
  'valuesTestValidation': [random.randint(2, 6)], # noqa: S311
@@ -111,6 +111,12 @@ settingsOEISManuallySelected: dict[str, MetadataOEISidManuallySet] = {
111
111
  'valuesTestParallelization': [*range(2, 4)],
112
112
  'valuesTestValidation': [random.randint(2, 4)], # noqa: S311
113
113
  },
114
+ 'A007822': {
115
+ 'getMapShape': lambda n: (1, 2 * n),
116
+ 'valuesBenchmark': [7],
117
+ 'valuesTestParallelization': [*range(2, 4)],
118
+ 'valuesTestValidation': [random.randint(2, 4)], # noqa: S311
119
+ },
114
120
  }
115
121
 
116
122
  packageSettings = mapFoldingPackageSettings(