mapFolding 0.14.0__tar.gz → 0.14.1__tar.gz

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 (82) hide show
  1. {mapfolding-0.14.0 → mapfolding-0.14.1}/PKG-INFO +3 -4
  2. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/_oeisFormulas/Z0Z_aOFn.py +0 -1
  3. mapfolding-0.14.1/mapFolding/_oeisFormulas/matrixMeanders.py +79 -0
  4. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/_oeisFormulas/matrixMeandersAnnex.py +1 -1
  5. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding.egg-info/PKG-INFO +3 -4
  6. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding.egg-info/requires.txt +2 -3
  7. {mapfolding-0.14.0 → mapfolding-0.14.1}/pyproject.toml +3 -4
  8. mapfolding-0.14.0/mapFolding/_oeisFormulas/matrixMeanders.py +0 -65
  9. {mapfolding-0.14.0 → mapfolding-0.14.1}/LICENSE +0 -0
  10. {mapfolding-0.14.0 → mapfolding-0.14.1}/README.md +0 -0
  11. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/__init__.py +0 -0
  12. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/_oeisFormulas/A000136.py +0 -0
  13. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/_oeisFormulas/A000560.py +0 -0
  14. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/_oeisFormulas/A000682.py +0 -0
  15. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/_oeisFormulas/A005315.py +0 -0
  16. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/_oeisFormulas/A005316.py +0 -0
  17. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/_oeisFormulas/A223094.py +0 -0
  18. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/_oeisFormulas/A259702.py +0 -0
  19. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/_oeisFormulas/A301620.py +0 -0
  20. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/_oeisFormulas/Z0Z_oeisMeanders.py +0 -0
  21. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/_oeisFormulas/__init__.py +0 -0
  22. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/_theSSOT.py +0 -0
  23. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/_theTypes.py +0 -0
  24. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/basecamp.py +0 -0
  25. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/beDRY.py +0 -0
  26. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/daoOfMapFolding.py +0 -0
  27. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/dataBaskets.py +0 -0
  28. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/filesystemToolkit.py +0 -0
  29. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/oeis.py +0 -0
  30. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/py.typed +0 -0
  31. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/reference/A005316JavaPort.py +0 -0
  32. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/reference/A005316imperative.py +0 -0
  33. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/reference/A005316intOptimized.py +0 -0
  34. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/reference/A005316optimized128bit.py +0 -0
  35. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/reference/A005316primitiveOptimized.py +0 -0
  36. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/reference/A005316redis.py +0 -0
  37. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/reference/A005316write2disk.py +0 -0
  38. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/reference/__init__.py +0 -0
  39. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/reference/flattened.py +0 -0
  40. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/reference/hunterNumba.py +0 -0
  41. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/reference/irvineJavaPort.py +0 -0
  42. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/reference/jaxCount.py +0 -0
  43. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/reference/jobsCompleted/[2x19]/p2x19.py +0 -0
  44. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/reference/jobsCompleted/__init__.py +0 -0
  45. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/reference/jobsCompleted/p2x19/p2x19.py +0 -0
  46. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/reference/lunnonNumpy.py +0 -0
  47. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/reference/lunnonWhile.py +0 -0
  48. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/reference/matrixMeandersBaseline.py +0 -0
  49. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/reference/matrixMeandersBaselineAnnex.py +0 -0
  50. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/reference/rotatedEntryPoint.py +0 -0
  51. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/reference/total_countPlus1vsPlusN.py +0 -0
  52. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/someAssemblyRequired/RecipeJob.py +0 -0
  53. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/someAssemblyRequired/__init__.py +0 -0
  54. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/someAssemblyRequired/_toolIfThis.py +0 -0
  55. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/someAssemblyRequired/_toolkitContainers.py +0 -0
  56. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/someAssemblyRequired/getLLVMforNoReason.py +0 -0
  57. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/someAssemblyRequired/infoBooth.py +0 -0
  58. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/someAssemblyRequired/makeAllModules.py +0 -0
  59. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/someAssemblyRequired/makeJobTheorem2Numba.py +0 -0
  60. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/someAssemblyRequired/makeJobTheorem2codon.py +0 -0
  61. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/someAssemblyRequired/toolkitNumba.py +0 -0
  62. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/someAssemblyRequired/transformationTools.py +0 -0
  63. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/syntheticModules/__init__.py +0 -0
  64. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/syntheticModules/countParallel.py +0 -0
  65. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/syntheticModules/daoOfMapFolding.py +0 -0
  66. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/syntheticModules/dataPacking.py +0 -0
  67. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/syntheticModules/initializeCount.py +0 -0
  68. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/syntheticModules/theorem2.py +0 -0
  69. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/syntheticModules/theorem2Numba.py +0 -0
  70. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/syntheticModules/theorem2Trimmed.py +0 -0
  71. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/tests/__init__.py +0 -0
  72. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/tests/conftest.py +0 -0
  73. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/tests/test_computations.py +0 -0
  74. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/tests/test_filesystem.py +0 -0
  75. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/tests/test_oeis.py +0 -0
  76. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/tests/test_other.py +0 -0
  77. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding/tests/test_tasks.py +0 -0
  78. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding.egg-info/SOURCES.txt +0 -0
  79. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding.egg-info/dependency_links.txt +0 -0
  80. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding.egg-info/entry_points.txt +0 -0
  81. {mapfolding-0.14.0 → mapfolding-0.14.1}/mapFolding.egg-info/top_level.txt +0 -0
  82. {mapfolding-0.14.0 → mapfolding-0.14.1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mapFolding
3
- Version: 0.14.0
3
+ Version: 0.14.1
4
4
  Summary: Map folding, meanders, stamp folding, semi-meanders. Experiment with algorithm transformations and code optimization.
5
5
  Author-email: Hunter Hogan <HunterHogan@pm.me>
6
6
  License: CC-BY-NC-4.0
@@ -34,15 +34,14 @@ Classifier: Typing :: Typed
34
34
  Requires-Python: >=3.12
35
35
  Description-Content-Type: text/markdown
36
36
  License-File: LICENSE
37
- Requires-Dist: astToolkit>=0.7.1
38
- Requires-Dist: cytoolz
37
+ Requires-Dist: astToolkit
39
38
  Requires-Dist: hunterMakesPy
40
- Requires-Dist: numba
41
39
  Requires-Dist: numpy
42
40
  Requires-Dist: platformdirs
43
41
  Provides-Extra: development
44
42
  Requires-Dist: mypy; extra == "development"
45
43
  Requires-Dist: pyupgrade; extra == "development"
44
+ Requires-Dist: py-spy; extra == "development"
46
45
  Requires-Dist: setuptools-scm; extra == "development"
47
46
  Provides-Extra: numba
48
47
  Requires-Dist: numba; extra == "numba"
@@ -1,5 +1,4 @@
1
1
  from mapFolding._oeisFormulas.A000136 import A000136
2
- from mapFolding._oeisFormulas.matrixMeanders import curveMaximum
3
2
  from mapFolding.oeis import dictionaryOEIS
4
3
  import sys
5
4
  import time
@@ -0,0 +1,79 @@
1
+ from mapFolding._oeisFormulas.matrixMeandersAnnex import curveMaximum as curveMaximum
2
+ from typing import NamedTuple
3
+
4
+ class BifurcatedCurves(NamedTuple):
5
+ bifurcationEven: int
6
+ bifurcationOdd: int
7
+ distinctCrossings: int
8
+ curveLocationsMAXIMUM: int
9
+
10
+ dictionaryCurveLocations: dict[int, list[int]] = {}
11
+
12
+ def getCurveLocations(bridges: int) -> list[BifurcatedCurves]:
13
+ global dictionaryCurveLocations # noqa: PLW0603
14
+ curveLocationsMAXIMUM, bifurcationEvenLocator, bifurcationOddLocator = curveMaximum[bridges]
15
+ listBifurcatedCurves: list[BifurcatedCurves] = []
16
+ # TODO This is ready for concurrency and/or vectorization.
17
+ for curveLocations, listDistinctCrossings in dictionaryCurveLocations.items():
18
+ bifurcationEven = (curveLocations & bifurcationEvenLocator) >> 1
19
+ bifurcationOdd = (curveLocations & bifurcationOddLocator)
20
+ distinctCrossings = sum(listDistinctCrossings)
21
+ listBifurcatedCurves.append(BifurcatedCurves(bifurcationEven, bifurcationOdd, distinctCrossings, curveLocationsMAXIMUM))
22
+ dictionaryCurveLocations = {}
23
+ return listBifurcatedCurves
24
+
25
+ def recordAnalysis(curveLocationAnalysis: int, curveLocationsMAXIMUM: int, distinctCrossings: int) -> None:
26
+ if curveLocationAnalysis < curveLocationsMAXIMUM:
27
+ dictionaryCurveLocations.setdefault(curveLocationAnalysis, []).append(distinctCrossings)
28
+
29
+ def analyzeCurve(bifurcationEven: int, bifurcationOdd: int, distinctCrossings: int, curveLocationsMAXIMUM: int) -> None:
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
+
65
+ def initializeCurveLocations(startingCurveLocations: dict[int, int]) -> None:
66
+ global dictionaryCurveLocations # noqa: PLW0603
67
+ dictionaryCurveLocations = {curve: [distinctCrossings] for curve, distinctCrossings in startingCurveLocations.items()}
68
+
69
+ def count(bridges: int, startingCurveLocations: dict[int, int]) -> int:
70
+ initializeCurveLocations(startingCurveLocations)
71
+
72
+ while bridges > 0:
73
+ bridges -= 1
74
+
75
+ # TODO This could be parallelized when `recordAnalysis` is thread-safe
76
+ for bifurcatedCurve in getCurveLocations(bridges):
77
+ analyzeCurve(*bifurcatedCurve)
78
+
79
+ return getCurveLocations(bridges)[0].distinctCrossings
@@ -35,7 +35,7 @@ curveMaximum: dict[int, limitLocators] = {
35
35
  25: limitLocators(18014398509481984, 0xaaaaaaaaaaaaaa, 0x55555555555555),
36
36
  26: limitLocators(72057594037927936, 0x2aaaaaaaaaaaaaa, 0x155555555555555),
37
37
  27: limitLocators(288230376151711744, 0xaaaaaaaaaaaaaaa, 0x555555555555555),
38
- 28: limitLocators(1152921504606846976, 0x2aaaaaaaaaaaaaaa, 0x1555555555555555),
38
+ 28: limitLocators(1152921504606846976, 0x2aaaaaaaaaaaaaaa, 0x1555555555555555), # 0x2aaaaaaaaaaaaaaa.bit_length() = 62
39
39
  29: limitLocators(4611686018427387904, 0xaaaaaaaaaaaaaaaa, 0x5555555555555555),
40
40
  30: limitLocators(18446744073709551616, 0x2aaaaaaaaaaaaaaaa, 0x15555555555555555),
41
41
  31: limitLocators(73786976294838206464, 0xaaaaaaaaaaaaaaaaa, 0x55555555555555555),
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mapFolding
3
- Version: 0.14.0
3
+ Version: 0.14.1
4
4
  Summary: Map folding, meanders, stamp folding, semi-meanders. Experiment with algorithm transformations and code optimization.
5
5
  Author-email: Hunter Hogan <HunterHogan@pm.me>
6
6
  License: CC-BY-NC-4.0
@@ -34,15 +34,14 @@ Classifier: Typing :: Typed
34
34
  Requires-Python: >=3.12
35
35
  Description-Content-Type: text/markdown
36
36
  License-File: LICENSE
37
- Requires-Dist: astToolkit>=0.7.1
38
- Requires-Dist: cytoolz
37
+ Requires-Dist: astToolkit
39
38
  Requires-Dist: hunterMakesPy
40
- Requires-Dist: numba
41
39
  Requires-Dist: numpy
42
40
  Requires-Dist: platformdirs
43
41
  Provides-Extra: development
44
42
  Requires-Dist: mypy; extra == "development"
45
43
  Requires-Dist: pyupgrade; extra == "development"
44
+ Requires-Dist: py-spy; extra == "development"
46
45
  Requires-Dist: setuptools-scm; extra == "development"
47
46
  Provides-Extra: numba
48
47
  Requires-Dist: numba; extra == "numba"
@@ -1,13 +1,12 @@
1
- astToolkit>=0.7.1
2
- cytoolz
1
+ astToolkit
3
2
  hunterMakesPy
4
- numba
5
3
  numpy
6
4
  platformdirs
7
5
 
8
6
  [development]
9
7
  mypy
10
8
  pyupgrade
9
+ py-spy
11
10
  setuptools-scm
12
11
 
13
12
  [numba]
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "mapFolding"
3
- version = "0.14.0"
3
+ version = "0.14.1"
4
4
  description = "Map folding, meanders, stamp folding, semi-meanders. Experiment with algorithm transformations and code optimization."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -128,16 +128,15 @@ classifiers = [
128
128
  urls = { Donate = "https://www.patreon.com/integrated", Homepage = "https://github.com/hunterhogan/mapFolding", Issues = "https://github.com/hunterhogan/mapFolding/issues", Repository = "https://github.com/hunterhogan/mapFolding.git" }
129
129
  scripts = { OEIS_for_n = "mapFolding.oeis:OEIS_for_n", clearOEIScache = "mapFolding.oeis:clearOEIScache", getOEISids = "mapFolding.oeis:getOEISids" }
130
130
  dependencies = [
131
- "astToolkit>=0.7.1",
132
- "cytoolz",
131
+ "astToolkit",
133
132
  "hunterMakesPy",
134
- "numba",
135
133
  "numpy",
136
134
  "platformdirs",
137
135
  ]
138
136
  optional-dependencies = { development = [
139
137
  "mypy",
140
138
  "pyupgrade",
139
+ "py-spy",
141
140
  "setuptools-scm",
142
141
  ], numba = [
143
142
  "numba",
@@ -1,65 +0,0 @@
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
- def count(bridges: int, startingCurveLocations: dict[int, int]) -> int:
20
- initializeCurveLocations(startingCurveLocations)
21
-
22
- while bridges > 0:
23
- 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
-
65
- return sum(getCurveLocations().values())
File without changes
File without changes
File without changes