mapFolding 0.15.3__py3-none-any.whl → 0.15.4__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 (50) hide show
  1. mapFolding/__init__.py +15 -11
  2. mapFolding/_theSSOT.py +55 -62
  3. mapFolding/_theTypes.py +66 -4
  4. mapFolding/algorithms/__init__.py +1 -0
  5. mapFolding/algorithms/matrixMeanders.py +348 -0
  6. mapFolding/algorithms/oeisIDbyFormula.py +113 -0
  7. mapFolding/basecamp.py +55 -3
  8. mapFolding/oeis.py +40 -54
  9. mapFolding/{_oeisFormulas/matrixMeanders64.py → reference/meandersDumpingGround/matrixMeanders64retired.py} +37 -29
  10. mapFolding/someAssemblyRequired/makeAllModules.py +5 -5
  11. mapFolding/syntheticModules/algorithmA007822Numba.py +4 -2
  12. mapFolding/tests/conftest.py +28 -9
  13. mapFolding/tests/test_computations.py +31 -9
  14. mapFolding/tests/test_oeis.py +2 -20
  15. {mapfolding-0.15.3.dist-info → mapfolding-0.15.4.dist-info}/METADATA +1 -1
  16. {mapfolding-0.15.3.dist-info → mapfolding-0.15.4.dist-info}/RECORD +33 -47
  17. {mapfolding-0.15.3.dist-info → mapfolding-0.15.4.dist-info}/entry_points.txt +0 -1
  18. mapFolding/_oeisFormulas/A000136.py +0 -4
  19. mapFolding/_oeisFormulas/A000560.py +0 -4
  20. mapFolding/_oeisFormulas/A000682.py +0 -85
  21. mapFolding/_oeisFormulas/A001010.py +0 -19
  22. mapFolding/_oeisFormulas/A001011.py +0 -5
  23. mapFolding/_oeisFormulas/A005315.py +0 -4
  24. mapFolding/_oeisFormulas/A005316.py +0 -10
  25. mapFolding/_oeisFormulas/A223094.py +0 -7
  26. mapFolding/_oeisFormulas/A259702.py +0 -4
  27. mapFolding/_oeisFormulas/A301620.py +0 -6
  28. mapFolding/_oeisFormulas/Z0Z_aOFn.py +0 -34
  29. mapFolding/_oeisFormulas/Z0Z_notes.py +0 -16
  30. mapFolding/_oeisFormulas/Z0Z_oeisMeanders.py +0 -74
  31. mapFolding/_oeisFormulas/Z0Z_symmetry.py +0 -131
  32. mapFolding/_oeisFormulas/__init__.py +0 -1
  33. mapFolding/_oeisFormulas/matrixMeanders.py +0 -134
  34. mapFolding/_oeisFormulas/matrixMeandersAnnex.py +0 -84
  35. /mapFolding/{daoOfMapFolding.py → algorithms/daoOfMapFolding.py} +0 -0
  36. /mapFolding/reference/{A005316JavaPort.py → meandersDumpingGround/A005316JavaPort.py} +0 -0
  37. /mapFolding/reference/{A005316imperative.py → meandersDumpingGround/A005316imperative.py} +0 -0
  38. /mapFolding/reference/{A005316intOptimized.py → meandersDumpingGround/A005316intOptimized.py} +0 -0
  39. /mapFolding/reference/{A005316optimized128bit.py → meandersDumpingGround/A005316optimized128bit.py} +0 -0
  40. /mapFolding/reference/{A005316primitiveOptimized.py → meandersDumpingGround/A005316primitiveOptimized.py} +0 -0
  41. /mapFolding/reference/{A005316redis.py → meandersDumpingGround/A005316redis.py} +0 -0
  42. /mapFolding/reference/{A005316write2disk.py → meandersDumpingGround/A005316write2disk.py} +0 -0
  43. /mapFolding/reference/{matrixMeandersBaseline.py → meandersDumpingGround/matrixMeandersBaseline.py} +0 -0
  44. /mapFolding/reference/{matrixMeandersBaselineAnnex.py → meandersDumpingGround/matrixMeandersBaselineAnnex.py} +0 -0
  45. /mapFolding/reference/{matrixMeandersBaselineV2.py → meandersDumpingGround/matrixMeandersBaselineV2.py} +0 -0
  46. /mapFolding/reference/{matrixMeandersSimpleQueue.py → meandersDumpingGround/matrixMeandersSimpleQueue.py} +0 -0
  47. /mapFolding/reference/{matrixMeandersSlicePop.py → meandersDumpingGround/matrixMeandersSlicePop.py} +0 -0
  48. {mapfolding-0.15.3.dist-info → mapfolding-0.15.4.dist-info}/WHEEL +0 -0
  49. {mapfolding-0.15.3.dist-info → mapfolding-0.15.4.dist-info}/licenses/LICENSE +0 -0
  50. {mapfolding-0.15.3.dist-info → mapfolding-0.15.4.dist-info}/top_level.txt +0 -0
@@ -25,24 +25,26 @@ The `test_writeJobNumba` function shows how to test dynamically generated code,
25
25
  which is useful if you're working with the code synthesis features of the package.
26
26
  """
27
27
 
28
- from mapFolding import countFolds, getFoldsTotalKnown, oeisIDfor_n
29
- from mapFolding._oeisFormulas.Z0Z_oeisMeanders import dictionaryOEISMeanders
28
+ from mapFolding import countFolds, dictionaryOEISMapFolding, dictionaryOEISMeanders, getFoldsTotalKnown, oeisIDfor_n
29
+ from mapFolding.algorithms import oeisIDbyFormula
30
30
  from mapFolding.dataBaskets import MapFoldingState
31
- from mapFolding.oeis import dictionaryOEIS
32
31
  from mapFolding.someAssemblyRequired.makeAllModules import parametersNumbaLight
33
32
  from mapFolding.someAssemblyRequired.RecipeJob import RecipeJobTheorem2
34
33
  from mapFolding.syntheticModules.initializeState import transitionOnGroupsOfFolds
35
34
  from mapFolding.tests.conftest import registrarRecordsTemporaryFilesystemObject, standardizedEqualToCallableReturn
36
35
  from pathlib import Path, PurePosixPath
37
- from typing import Literal
36
+ from typing import Literal, TYPE_CHECKING
38
37
  import importlib.util
39
38
  import multiprocessing
40
39
  import pytest
41
40
 
41
+ if TYPE_CHECKING:
42
+ from collections.abc import Callable
43
+
42
44
  if __name__ == '__main__':
43
45
  multiprocessing.set_start_method('spawn')
44
46
 
45
- def test_aOFn_calculate_value(oeisID: str) -> None:
47
+ def test_aOFn_calculate_value_mapFolding(oeisID: str) -> None:
46
48
  """Verify OEIS sequence value calculations against known reference values.
47
49
 
48
50
  Tests the `oeisIDfor_n` function by comparing its calculated output against
@@ -59,8 +61,28 @@ def test_aOFn_calculate_value(oeisID: str) -> None:
59
61
  The OEIS sequence identifier to test calculations for.
60
62
 
61
63
  """
62
- for n in dictionaryOEIS[oeisID]['valuesTestValidation']:
63
- standardizedEqualToCallableReturn(dictionaryOEIS[oeisID]['valuesKnown'][n], oeisIDfor_n, oeisID, n)
64
+ for n in dictionaryOEISMapFolding[oeisID]['valuesTestValidation']:
65
+ standardizedEqualToCallableReturn(dictionaryOEISMapFolding[oeisID]['valuesKnown'][n], oeisIDfor_n, oeisID, n)
66
+
67
+ def test_aOFn_calculate_value_meanders(oeisIDMeanders: str) -> None:
68
+ """Verify Meanders OEIS sequence value calculations against known reference values.
69
+
70
+ Tests the functions in `mapFolding.algorithms.oeisIDbyFormula` by comparing their
71
+ calculated output against known correct values from the OEIS database for Meanders IDs.
72
+
73
+ Parameters
74
+ ----------
75
+ oeisIDMeanders : str
76
+ The Meanders OEIS sequence identifier to test calculations for.
77
+
78
+ """
79
+ oeisIDcallable: Callable[[int], int] = getattr(oeisIDbyFormula, oeisIDMeanders)
80
+ for n in dictionaryOEISMeanders[oeisIDMeanders]['valuesTestValidation']:
81
+ standardizedEqualToCallableReturn(
82
+ dictionaryOEISMeanders[oeisIDMeanders]['valuesKnown'][n],
83
+ oeisIDcallable,
84
+ n,
85
+ )
64
86
 
65
87
  @pytest.mark.parametrize('flow', ['daoOfMapFolding', 'numba', 'theorem2', 'theorem2Numba', 'theorem2Trimmed'])
66
88
  def test_flowControl(mapShapeTestCountFolds: tuple[int, ...], flow: str) -> None:
@@ -104,14 +126,14 @@ def test_flowControlByOEISid(oeisID: str, flow: str) -> None:
104
126
  mapShape = None
105
127
 
106
128
  oeis_n = 2
107
- for oeis_n in dictionaryOEIS[oeisID]['valuesTestValidation']:
129
+ for oeis_n in dictionaryOEISMapFolding[oeisID]['valuesTestValidation']:
108
130
  if oeis_n < 2:
109
131
  continue
110
132
 
111
133
  if oeisID in dictionaryOEISMeanders:
112
134
  expected = dictionaryOEISMeanders[oeisID]['valuesKnown'][oeis_n]
113
135
  else:
114
- expected = dictionaryOEIS[oeisID]['valuesKnown'][oeis_n]
136
+ expected = dictionaryOEISMapFolding[oeisID]['valuesKnown'][oeis_n]
115
137
 
116
138
  standardizedEqualToCallableReturn(
117
139
  expected
@@ -26,7 +26,7 @@ which is crucial for maintaining package reliability in production environments.
26
26
 
27
27
  from contextlib import redirect_stdout
28
28
  from mapFolding.oeis import (
29
- _standardizeOEISid, clearOEIScache, dictionaryOEIS, getOEISids, OEIS_for_n, oeisIDfor_n, oeisIDsImplemented)
29
+ _standardizeOEISid, dictionaryOEISMapFolding, getOEISids, OEIS_for_n, oeisIDfor_n, oeisIDsImplemented)
30
30
  from mapFolding.tests.conftest import standardizedEqualToCallableReturn, standardizedSystemExit
31
31
  from typing import Any
32
32
  import io
@@ -57,24 +57,6 @@ def test_aOFn_invalid_n(oeisID_1random: str, badN: Any) -> None:
57
57
  def test_aOFn_zeroDim_A001418() -> None:
58
58
  standardizedEqualToCallableReturn(ArithmeticError, oeisIDfor_n, 'A001418', 0)
59
59
 
60
- # ===== OEIS Cache Tests =====
61
- @pytest.mark.parametrize("cacheExists", [True, False])
62
- @unittest.mock.patch('pathlib.Path.exists')
63
- @unittest.mock.patch('pathlib.Path.unlink')
64
- def test_clearOEIScache(mock_unlink: unittest.mock.MagicMock, mock_exists: unittest.mock.MagicMock, cacheExists: bool) -> None:
65
- """Test OEIS cache clearing with both existing and non-existing cache."""
66
- mock_exists.return_value = cacheExists
67
- clearOEIScache()
68
-
69
- if cacheExists:
70
- # Each OEIS ID has two cache files
71
- expected_calls = len(dictionaryOEIS) * 2
72
- assert mock_unlink.call_count == expected_calls
73
- mock_unlink.assert_has_calls([unittest.mock.call(missing_ok=True)] * expected_calls)
74
- else:
75
- mock_exists.assert_called_once()
76
- mock_unlink.assert_not_called()
77
-
78
60
  # ===== Command Line Interface Tests =====
79
61
  def testHelpText() -> None:
80
62
  """Test that help text is complete and examples are valid."""
@@ -87,7 +69,7 @@ def testHelpText() -> None:
87
69
  # Verify content
88
70
  for oeisID in oeisIDsImplemented:
89
71
  assert oeisID in helpText
90
- assert dictionaryOEIS[oeisID]['description'] in helpText
72
+ assert dictionaryOEISMapFolding[oeisID]['description'] in helpText
91
73
 
92
74
  # Extract and verify examples
93
75
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mapFolding
3
- Version: 0.15.3
3
+ Version: 0.15.4
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
@@ -1,38 +1,16 @@
1
- mapFolding/__init__.py,sha256=UqUsMLADRoBiWI7YTwQqdP7gnoQ2HrerquHXPRTPeFM,3703
2
- mapFolding/_theSSOT.py,sha256=nmZF-licd9nBMEFD8o-7M8eMIRMKJsxB6IokVWSpa0Y,4832
3
- mapFolding/_theTypes.py,sha256=BQnby53q7cbX11yOHXTW663R6ODHRoDGZqVCUN3v2Bo,3683
4
- mapFolding/basecamp.py,sha256=kn_agLy_kQj0OxGdjxr5hp2S8lKaL2XJFrHQiktBLzI,12984
1
+ mapFolding/__init__.py,sha256=6iou-H1W0rZdGmo7WjLwdYbR44fP_hVxeT2vjLh9e_A,3965
2
+ mapFolding/_theSSOT.py,sha256=SoG6tKzhjpc7gnG1b3qLfpXiT2_GR3yYTWMpble6If4,5224
3
+ mapFolding/_theTypes.py,sha256=F2pCHexrlbHTgMpQn58jDhkwAMFUSBp28gQp21n86o0,6559
4
+ mapFolding/basecamp.py,sha256=TITldxLm889eqBPXmlAilbC6Bmi_QNafzaLWYe1jptg,15755
5
5
  mapFolding/beDRY.py,sha256=iYATcrYrAWkKaAecjA_awELBtZP5Q3snU4053dIsEwU,13941
6
- mapFolding/daoOfMapFolding.py,sha256=yLqaAqMwHIVFAtig3T46aZZQLAjCtQzYoAi0iMs_2CY,5482
7
6
  mapFolding/dataBaskets.py,sha256=04tVULSbWbPkKkLjTofWfVOr6gWcs38XILvU0-ftHIU,15191
8
7
  mapFolding/filesystemToolkit.py,sha256=Ex5tyugRQurXIgUNVtkQYfWMq8fM4e-izX01MBXU5_8,11006
9
- mapFolding/oeis.py,sha256=nP_-cSNMkEsC0VWD93AqTO4lA7VFfkVsG-c3DnkwsaU,19093
8
+ mapFolding/oeis.py,sha256=f9yywOQzvdG8ofqmRL1_-1BlO8rgo4TdEo6VyXHiJNw,18639
10
9
  mapFolding/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
- mapFolding/_oeisFormulas/A000136.py,sha256=G_vqOdb6s_YBbrCkHKjQDnlYfOZ4suXRtie6bRI7hhE,105
12
- mapFolding/_oeisFormulas/A000560.py,sha256=sN5-BAjL0oDk7YXZ2kx7ffBDX-gC28mmOj4CxHkM36c,113
13
- mapFolding/_oeisFormulas/A000682.py,sha256=rO37K3iBVg6iLPhJtiPnl5LK5A2CoTHmV2U4rAPZzIc,3415
14
- mapFolding/_oeisFormulas/A001010.py,sha256=-QjtVNo34EqOeQjOufuI32b7e6gn1aj5I5j_I_aAlyo,431
15
- mapFolding/_oeisFormulas/A001011.py,sha256=IlPvOdz0tSGSKTxKXTFYD41fO1N0TtUwwgvewbbteQs,177
16
- mapFolding/_oeisFormulas/A005315.py,sha256=g1P52zUuWCLFbTb_i6U75sVzXfUGaCM3rJonXNRgVr4,109
17
- mapFolding/_oeisFormulas/A005316.py,sha256=3B4_2TT_ip3CcYngEaFS-rTNDx-x2TZ0r_J0f8IMJbQ,234
18
- mapFolding/_oeisFormulas/A223094.py,sha256=z7t6RcRQlhXdbYImIER15KwG1_W7iV4MNIRDx9Q_Efs,284
19
- mapFolding/_oeisFormulas/A259702.py,sha256=9hUs8jzwOnJGmBsueS1yGsLjau4YVa0Yd9lYMG8UFso,123
20
- mapFolding/_oeisFormulas/A301620.py,sha256=pY0OJsCLhIEDHQUKpeSMTZ2SUFvcqt83uCOPE_lZCsw,225
21
- mapFolding/_oeisFormulas/Z0Z_aOFn.py,sha256=aH0SEXnmnW_U7kJZLqu7IwLz06rNyT9Qo3631fgVDX0,1096
22
- mapFolding/_oeisFormulas/Z0Z_notes.py,sha256=V1w42d1loZJ_Zu3TneViZDqsJPFaPuGuyvbYe0cdWf8,1060
23
- mapFolding/_oeisFormulas/Z0Z_oeisMeanders.py,sha256=pN2cawDvwpN-uSkgKqpOk2ddr8bg38ZOjVd6WMI4wC0,2785
24
- mapFolding/_oeisFormulas/Z0Z_symmetry.py,sha256=hgI-79X3BeG3tT4MOU2XXEHfWq53G3Sr0YpviRFg2rI,4173
25
- mapFolding/_oeisFormulas/__init__.py,sha256=n83beVb7HHplXYAM5HveaIAuR7KrJG99OaNHJGMb_uc,44
26
- mapFolding/_oeisFormulas/matrixMeanders.py,sha256=84EYLaILzF683nBt644AEf3-EtxfFuZ-DBV1NNP3wWA,7602
27
- mapFolding/_oeisFormulas/matrixMeanders64.py,sha256=7JVkfzjNP7xYkK5VM_ahPoJ1bu1tD4BlFCGggSHocas,9253
28
- mapFolding/_oeisFormulas/matrixMeandersAnnex.py,sha256=ly4ZTMxdAffHCsIjiembakIDyMiRjAfj1MSZMzsCP9E,5754
29
- mapFolding/reference/A005316JavaPort.py,sha256=6qqTzbD3PTwYGtqaywEURGXtNFx1lp8ofEwpQeEvAHc,4899
30
- mapFolding/reference/A005316imperative.py,sha256=hhjUxELOktNBmHrwIoxVA-mcFsOWgg01p780OBeqL04,3816
31
- mapFolding/reference/A005316intOptimized.py,sha256=oO9ktdYeFwtosVp5KliwH8JmCSxfjapjBM1iMECuDAc,4121
32
- mapFolding/reference/A005316optimized128bit.py,sha256=6JxmVBIQnN0rH0MQIZtu_wgY1Wbms8hZCWarMe5NLLU,3416
33
- mapFolding/reference/A005316primitiveOptimized.py,sha256=iFig6Edv1E774xrlVUFLyscC40DqDhV-oh4hOnG2DLI,4116
34
- mapFolding/reference/A005316redis.py,sha256=MPeiobrs3VsNZOOKYBg52oVp0OjVDzLEdsRKfrZ9LrU,4328
35
- mapFolding/reference/A005316write2disk.py,sha256=NMVrdhe5KhnXQfaQ5Xr7Pwl5oXYEOM1DrMISDDOCVVw,5633
10
+ mapFolding/algorithms/__init__.py,sha256=gARPqfySaeSWMfApQ5wSxzy7ZdgLdKYsLqsRSEYWwWI,28
11
+ mapFolding/algorithms/daoOfMapFolding.py,sha256=yLqaAqMwHIVFAtig3T46aZZQLAjCtQzYoAi0iMs_2CY,5482
12
+ mapFolding/algorithms/matrixMeanders.py,sha256=XLcaiUH66PlIzEQb4bD7oZpWjFGxysnj_w-KiXxIj5E,20740
13
+ mapFolding/algorithms/oeisIDbyFormula.py,sha256=Ke1SOVGzE3uDq0tAS2kHzo8AtT_tntmXpgcizNx6DVs,2889
36
14
  mapFolding/reference/__init__.py,sha256=GKcSgYE49NcTISx-JZbELXyq-eRkMeTL5g4DXInWFw0,2206
37
15
  mapFolding/reference/flattened.py,sha256=0eHgLFIeIeVUsI5zF5oSy5iWYrjOMzxr7KjDxiTe01k,16078
38
16
  mapFolding/reference/hunterNumba.py,sha256=iLfyqwGdAh6c5GbapnKsWhAsNsR3O-fyGGHAdohluLw,7258
@@ -40,16 +18,24 @@ mapFolding/reference/irvineJavaPort.py,sha256=XnsL4g33LRrYwAhcrAVt-ujsP6QD6fbyCs
40
18
  mapFolding/reference/jaxCount.py,sha256=t8ons45zyWNJQ-nmn1qbhNsTkTnRzf7ATauaYvIlkRI,14853
41
19
  mapFolding/reference/lunnonNumpy.py,sha256=mMgrgbrBpe4nmo72ThEI-MGH0OwEHmfMPczSXHp2qKo,4357
42
20
  mapFolding/reference/lunnonWhile.py,sha256=ZL8GAQtPs5nJZSgoDl5USrLSS_zs03y98y1Z9E4jOmQ,3799
43
- mapFolding/reference/matrixMeandersBaseline.py,sha256=8Z98MMfhTCdoa75HWZz4DO166EiHZCu5eHeFzhgK42s,3003
44
- mapFolding/reference/matrixMeandersBaselineAnnex.py,sha256=d2Oh4JZxz53ox_ArhIxpMTOuA7rtE9wnEPojpFcnlfc,5817
45
- mapFolding/reference/matrixMeandersBaselineV2.py,sha256=VpRiIGhnk-DbxwsHwCeCwXqcKLSNyHl-iRGLDH9ZGMY,7674
46
- mapFolding/reference/matrixMeandersSimpleQueue.py,sha256=pOfaS315OKIBG9GSqSJwUDcEhfnV2XduM9IPqHrBvJg,4083
47
- mapFolding/reference/matrixMeandersSlicePop.py,sha256=XyiesSQAH1dRplYx_CdR1FzcXvgmmxzj27V4aIqPp7o,5353
48
21
  mapFolding/reference/rotatedEntryPoint.py,sha256=3IJU7Hc2PDSE71wmSkDs4Z3t0Px9NBSzmCsVrgQuQyU,10274
49
22
  mapFolding/reference/total_countPlus1vsPlusN.py,sha256=yJZAVLVdoXqHag2_N6_6CT-Q6HXBgRro-eny93-Rlpw,9307
50
23
  mapFolding/reference/jobsCompleted/__init__.py,sha256=TU93ZGUW1xEkT6d9mQFn_rp5DvRy0ZslEB2Q6MF5ZDc,2596
51
24
  mapFolding/reference/jobsCompleted/[2x19]/p2x19.py,sha256=_tvYtfzMWVo2VtUbIAieoscb4N8FFflgTdW4-ljBUuA,19626
52
25
  mapFolding/reference/jobsCompleted/p2x19/p2x19.py,sha256=eZEw4Me4ocTt6VXoK2-Sbd5SowZtxRIbN9dZmc7OCVg,6395
26
+ mapFolding/reference/meandersDumpingGround/A005316JavaPort.py,sha256=6qqTzbD3PTwYGtqaywEURGXtNFx1lp8ofEwpQeEvAHc,4899
27
+ mapFolding/reference/meandersDumpingGround/A005316imperative.py,sha256=hhjUxELOktNBmHrwIoxVA-mcFsOWgg01p780OBeqL04,3816
28
+ mapFolding/reference/meandersDumpingGround/A005316intOptimized.py,sha256=oO9ktdYeFwtosVp5KliwH8JmCSxfjapjBM1iMECuDAc,4121
29
+ mapFolding/reference/meandersDumpingGround/A005316optimized128bit.py,sha256=6JxmVBIQnN0rH0MQIZtu_wgY1Wbms8hZCWarMe5NLLU,3416
30
+ mapFolding/reference/meandersDumpingGround/A005316primitiveOptimized.py,sha256=iFig6Edv1E774xrlVUFLyscC40DqDhV-oh4hOnG2DLI,4116
31
+ mapFolding/reference/meandersDumpingGround/A005316redis.py,sha256=MPeiobrs3VsNZOOKYBg52oVp0OjVDzLEdsRKfrZ9LrU,4328
32
+ mapFolding/reference/meandersDumpingGround/A005316write2disk.py,sha256=NMVrdhe5KhnXQfaQ5Xr7Pwl5oXYEOM1DrMISDDOCVVw,5633
33
+ mapFolding/reference/meandersDumpingGround/matrixMeanders64retired.py,sha256=oRVgf6zkWRjk7dWR-Px41M_5spdvKy_Pich0qd7oxVA,9270
34
+ mapFolding/reference/meandersDumpingGround/matrixMeandersBaseline.py,sha256=8Z98MMfhTCdoa75HWZz4DO166EiHZCu5eHeFzhgK42s,3003
35
+ mapFolding/reference/meandersDumpingGround/matrixMeandersBaselineAnnex.py,sha256=d2Oh4JZxz53ox_ArhIxpMTOuA7rtE9wnEPojpFcnlfc,5817
36
+ mapFolding/reference/meandersDumpingGround/matrixMeandersBaselineV2.py,sha256=VpRiIGhnk-DbxwsHwCeCwXqcKLSNyHl-iRGLDH9ZGMY,7674
37
+ mapFolding/reference/meandersDumpingGround/matrixMeandersSimpleQueue.py,sha256=pOfaS315OKIBG9GSqSJwUDcEhfnV2XduM9IPqHrBvJg,4083
38
+ mapFolding/reference/meandersDumpingGround/matrixMeandersSlicePop.py,sha256=XyiesSQAH1dRplYx_CdR1FzcXvgmmxzj27V4aIqPp7o,5353
53
39
  mapFolding/someAssemblyRequired/A007822rawMaterials.py,sha256=_IeOaxuA3IoHzsrm7qRPO_M1ZT09ATLJl7xpTXiqg8E,1697
54
40
  mapFolding/someAssemblyRequired/RecipeJob.py,sha256=yGGPHq9JX-Gf7QlJz50EPpkO7sADwGvSZNA1aC_F_PQ,9866
55
41
  mapFolding/someAssemblyRequired/__init__.py,sha256=UNDh6O86jT5ywlw9LgeWsUHwOfNvoMJRDAzYXbwCbeM,5779
@@ -57,14 +43,14 @@ mapFolding/someAssemblyRequired/_toolIfThis.py,sha256=VDZC10Xo3E1Y5n6FmaBBbOBR-r
57
43
  mapFolding/someAssemblyRequired/_toolkitContainers.py,sha256=Xbo1QJT8KtrWcAvQ-eLzOEzR8N78WfF43fJKGRIebA4,13625
58
44
  mapFolding/someAssemblyRequired/getLLVMforNoReason.py,sha256=tY0-2K0BFkwLAAjSrFJLPoG8CevDHOFc3OH3TxXANzg,2806
59
45
  mapFolding/someAssemblyRequired/infoBooth.py,sha256=GWiqnHbqk7te_pvVuk4G_gbFa_W2aeSx19w4pakvqfM,2300
60
- mapFolding/someAssemblyRequired/makeAllModules.py,sha256=mNIT-qUJt75qJLTCVElbZPIZNH36qOG3akAJ57JerTo,44490
46
+ mapFolding/someAssemblyRequired/makeAllModules.py,sha256=V-vjzHQsD4O2SP--zCik7y7eblKZNPgU9CrUKZ7wAwY,44530
61
47
  mapFolding/someAssemblyRequired/makeJobTheorem2Numba.py,sha256=wflkPttFID9vao4C4CohoUCYgbMWD7GhZ7TO9h5mwtE,17196
62
48
  mapFolding/someAssemblyRequired/makeJobTheorem2codon.py,sha256=JasXcDMBVO1t0m84z1Q3T30dIZCteLsxVUK0QL3jYdA,11495
63
49
  mapFolding/someAssemblyRequired/toolkitNumba.py,sha256=nCCVsGidAlcKRVAvA__hu4bXtat3B-cO9YloKtqOAc4,14919
64
50
  mapFolding/someAssemblyRequired/transformationTools.py,sha256=nPGZsvb5GquaCCxdDh_XzNIZYSiVJpWKd7wfhfRvxnk,11512
65
51
  mapFolding/syntheticModules/__init__.py,sha256=evVFqhCGa-WZKDiLcnQWjs-Bj34eRnfSLqz_d7dFYZY,83
66
52
  mapFolding/syntheticModules/algorithmA007822.py,sha256=rJHwImwcFGAysYoNME79qmNhoa3ebRgXb7ktKZLtSZ8,7074
67
- mapFolding/syntheticModules/algorithmA007822Numba.py,sha256=k7w-TicOkjV05bYPNK5s0kzWrBzS3EfVfQafZxBBa1Q,7222
53
+ mapFolding/syntheticModules/algorithmA007822Numba.py,sha256=Ae_UZ2My56GJZ8ZA6WSeLWb7Rml3tcgxpY7r6-lTP6Y,7228
68
54
  mapFolding/syntheticModules/countParallelNumba.py,sha256=6sHWzGc6ch3HjKVB8krvaBec_KoHv3gpfN_F5Vl1SP8,7870
69
55
  mapFolding/syntheticModules/daoOfMapFoldingNumba.py,sha256=5oMb8pttNKslN6wss9JIQXSnmjgE2q_2-3fIrh1pEW0,6033
70
56
  mapFolding/syntheticModules/dataPacking.py,sha256=SzRmDNr2OZP6Xk4krLqxTuWAUtUJxBDXmHEqlBHzNPI,2407
@@ -78,15 +64,15 @@ mapFolding/syntheticModules/theorem2A007822Trimmed.py,sha256=ekbKQ_FIZgaQ9m7NrxD
78
64
  mapFolding/syntheticModules/theorem2Numba.py,sha256=AFe-KI97ilPgPFA22ASAhfUetaTA249K7By_vqu1Crs,3416
79
65
  mapFolding/syntheticModules/theorem2Trimmed.py,sha256=geKX3So1SqhENlKeEO2dV6S3rGsxBp-AItB4hRbwbBI,2699
80
66
  mapFolding/tests/__init__.py,sha256=QVCHSMFVvTxV3mAyYOLkMFAFyBJ514zdoVnDmpBJnTo,1336
81
- mapFolding/tests/conftest.py,sha256=IveGDDJrdbeyf4gZ7-V_3WGAzKkMfwu8mksRe8ZSZCs,14625
82
- mapFolding/tests/test_computations.py,sha256=tCrJCYT2akUu_jYJudL4jZWRTTEwDMF5mOyxILSSOyM,7465
67
+ mapFolding/tests/conftest.py,sha256=fLBZFStVJEIfbt6PQNVyAEdMVyck_lwhEB0eZYgQSwU,15255
68
+ mapFolding/tests/test_computations.py,sha256=OTKnDqNOrTLhkfkoq0NX5veEsGQPlz140SROBWHI8U0,8297
83
69
  mapFolding/tests/test_filesystem.py,sha256=0rYQ62f4e3HOoymXrxDWbqNEBJQ7DGN8RUOMI84tE2Q,3892
84
- mapFolding/tests/test_oeis.py,sha256=ejqaOMB61c1oUEBblPPBG9hFFXffpKuIS0CJMe7Rd1o,5497
70
+ mapFolding/tests/test_oeis.py,sha256=qwi9z_BnpeGO4QwTHj_WOiP21gf2rUgDdxhc90zWsl8,4754
85
71
  mapFolding/tests/test_other.py,sha256=ScBiJ78LnyAaW-RhxcouX6Xw10wgpSdqfvT4LO3WjnQ,4766
86
72
  mapFolding/tests/test_tasks.py,sha256=_pr9JRWjjNKA7sww70XvkJJdGPruBVzubM63RmD_Du0,4013
87
- mapfolding-0.15.3.dist-info/licenses/LICENSE,sha256=NxH5Y8BdC-gNU-WSMwim3uMbID2iNDXJz7fHtuTdXhk,19346
88
- mapfolding-0.15.3.dist-info/METADATA,sha256=IAmZt0STmU9jkM-hIf80G1FJgDvIS25698U9tAkgHI4,5234
89
- mapfolding-0.15.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
90
- mapfolding-0.15.3.dist-info/entry_points.txt,sha256=F3OUeZR1XDTpoH7k3wXuRb3KF_kXTTeYhu5AGK1SiOQ,146
91
- mapfolding-0.15.3.dist-info/top_level.txt,sha256=aG3bjFBoxxuaV3Iu1wZAd241Ubs3cdaJtKYBQBDIjsg,11
92
- mapfolding-0.15.3.dist-info/RECORD,,
73
+ mapfolding-0.15.4.dist-info/licenses/LICENSE,sha256=NxH5Y8BdC-gNU-WSMwim3uMbID2iNDXJz7fHtuTdXhk,19346
74
+ mapfolding-0.15.4.dist-info/METADATA,sha256=BXwMx_DXwPRzBfAXUWNsBUVp71OvXFIXkpOuToAOYqs,5234
75
+ mapfolding-0.15.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
76
+ mapfolding-0.15.4.dist-info/entry_points.txt,sha256=-mH9DjW9tDRMPaeoSWKKywG35cR28m12H_jtmrB4eY8,98
77
+ mapfolding-0.15.4.dist-info/top_level.txt,sha256=aG3bjFBoxxuaV3Iu1wZAd241Ubs3cdaJtKYBQBDIjsg,11
78
+ mapfolding-0.15.4.dist-info/RECORD,,
@@ -1,4 +1,3 @@
1
1
  [console_scripts]
2
2
  OEIS_for_n = mapFolding.oeis:OEIS_for_n
3
- clearOEIScache = mapFolding.oeis:clearOEIScache
4
3
  getOEISids = mapFolding.oeis:getOEISids
@@ -1,4 +0,0 @@
1
- from mapFolding._oeisFormulas.A000682 import A000682
2
-
3
- def A000136(n: int) -> int:
4
- return n * A000682(n)
@@ -1,4 +0,0 @@
1
- from mapFolding._oeisFormulas.A000682 import A000682
2
-
3
- def A000560(n: int) -> int:
4
- return A000682(n + 1) // 2
@@ -1,85 +0,0 @@
1
- """Semi-meanders.
2
-
3
- n = 3 `startingCurveLocations` keys = 3
4
- n = 4 `startingCurveLocations` keys = 4
5
- n = 5 `startingCurveLocations` keys = 4
6
- n = 6 `startingCurveLocations` keys = 5
7
- n = 7 `startingCurveLocations` keys = 5
8
- n = 8 `startingCurveLocations` keys = 6
9
- n = 9 `startingCurveLocations` keys = 6
10
- n = 10 `startingCurveLocations` keys = 7
11
- n = 11 `startingCurveLocations` keys = 7
12
- n = 12 `startingCurveLocations` keys = 8
13
- n = 13 `startingCurveLocations` keys = 8
14
- n = 14 `startingCurveLocations` keys = 9
15
- n = 15 `startingCurveLocations` keys = 9
16
- n = 16 `startingCurveLocations` keys = 10
17
- n = 17 `startingCurveLocations` keys = 10
18
- n = 18 `startingCurveLocations` keys = 11
19
- n = 19 `startingCurveLocations` keys = 11
20
- n = 20 `startingCurveLocations` keys = 12
21
- n = 21 `startingCurveLocations` keys = 12
22
- n = 22 `startingCurveLocations` keys = 13
23
- n = 23 `startingCurveLocations` keys = 13
24
- n = 24 `startingCurveLocations` keys = 14
25
- n = 25 `startingCurveLocations` keys = 14
26
- n = 26 `startingCurveLocations` keys = 15
27
- n = 27 `startingCurveLocations` keys = 15
28
- n = 28 `startingCurveLocations` keys = 16
29
- n = 29 `startingCurveLocations` keys = 16
30
- n = 30 `startingCurveLocations` keys = 17
31
- n = 31 `startingCurveLocations` keys = 17
32
- n = 32 `startingCurveLocations` keys = 18
33
- n = 33 `startingCurveLocations` keys = 18
34
- n = 34 `startingCurveLocations` keys = 19
35
- n = 35 `startingCurveLocations` keys = 19
36
- n = 36 `startingCurveLocations` keys = 20
37
- n = 37 `startingCurveLocations` keys = 20
38
- n = 38 `startingCurveLocations` keys = 21
39
- n = 39 `startingCurveLocations` keys = 21
40
- n = 40 `startingCurveLocations` keys = 22
41
- n = 41 `startingCurveLocations` keys = 22
42
- n = 42 `startingCurveLocations` keys = 23
43
- n = 43 `startingCurveLocations` keys = 23
44
- n = 44 `startingCurveLocations` keys = 24
45
- n = 45 `startingCurveLocations` keys = 24
46
- n = 46 `startingCurveLocations` keys = 25
47
- n = 47 `startingCurveLocations` keys = 25
48
- n = 48 `startingCurveLocations` keys = 26
49
- n = 49 `startingCurveLocations` keys = 26
50
- n = 50 `startingCurveLocations` keys = 27
51
- n = 51 `startingCurveLocations` keys = 27
52
- n = 52 `startingCurveLocations` keys = 28
53
- n = 53 `startingCurveLocations` keys = 28
54
- n = 54 `startingCurveLocations` keys = 29
55
- n = 55 `startingCurveLocations` keys = 29
56
- n = 56 `startingCurveLocations` keys = 30
57
- n = 57 `startingCurveLocations` keys = 30
58
- n = 58 `startingCurveLocations` keys = 31
59
- n = 59 `startingCurveLocations` keys = 31
60
- n = 60 `startingCurveLocations` keys = 32
61
- n = 61 `startingCurveLocations` keys = 32
62
- """
63
-
64
- # TODO figure out how to call the correct module
65
- # In other situations, I use a so-called dispatcher amd that has helped make code transformation easier, too.
66
- from mapFolding._oeisFormulas.matrixMeanders import count # noqa: ERA001
67
- from mapFolding._oeisFormulas.matrixMeanders64 import count as count64
68
-
69
- def initializeA000682(n: int) -> dict[int, int]:
70
- curveLocationsMAXIMUM = 1 << (2 * n + 4)
71
-
72
- curveSeed: int = 5 - (n & 0b1) * 4
73
- listCurveLocations = [(curveSeed << 1) | curveSeed]
74
-
75
- while listCurveLocations[-1] < curveLocationsMAXIMUM:
76
- curveSeed = (curveSeed << 4) | 0b101
77
- listCurveLocations.append((curveSeed << 1) | curveSeed)
78
-
79
- return dict.fromkeys(listCurveLocations, 1)
80
-
81
- def A000682(n: int) -> int:
82
- # count64(n - 1, initializeA000682(n - 1))
83
- # print()
84
- return count(n - 1, initializeA000682(n - 1))
85
- # return count64(n - 1, initializeA000682(n - 1))
@@ -1,19 +0,0 @@
1
- from mapFolding import countFolds
2
- from mapFolding._oeisFormulas.A000682 import A000682
3
-
4
- def A001010(n: int) -> int:
5
- """Complicated.
6
-
7
- a(2n-1) = 2*A007822(n)
8
- OddQ[n], 2*A007822[[(n - 1)/2 + 1]]]
9
-
10
- a(2n) = 2*A000682(n+1)
11
- EvenQ[n], 2*A000682[[n/2 + 1]]
12
- """
13
- if n & 0b1:
14
- foldsTotal = 2 * countFolds(oeisID='A007822', oeis_n=(n - 1)//2 + 1, flow='theorem2Numba')
15
- else:
16
- foldsTotal = 2 * A000682(n // 2 + 1)
17
-
18
- return foldsTotal
19
-
@@ -1,5 +0,0 @@
1
- from mapFolding._oeisFormulas.A000136 import A000136
2
- from mapFolding._oeisFormulas.A001010 import A001010
3
-
4
- def A001011(n: int) -> int:
5
- return (A001010(n) + A000136(n)) // 4
@@ -1,4 +0,0 @@
1
- from mapFolding._oeisFormulas.A005316 import A005316
2
-
3
- def A005315(n: int) -> int:
4
- return A005316(2 * n - 1)
@@ -1,10 +0,0 @@
1
- from mapFolding._oeisFormulas.matrixMeanders import count
2
-
3
- def initializeA005316(n: int) -> dict[int, int]:
4
- if n & 0b1:
5
- return {22: 1}
6
- else:
7
- return {15: 1}
8
-
9
- def A005316(n: int) -> int:
10
- return count(n-1, initializeA005316(n-1))
@@ -1,7 +0,0 @@
1
- from mapFolding._oeisFormulas.A000136 import A000136
2
- from mapFolding._oeisFormulas.A000682 import A000682
3
-
4
- def A223094(n: int) -> int:
5
- return A000136(n) - A000682(n + 1)
6
-
7
- # %F A223094 For n >= 3: a(n) = n! - Sum_{k=3..n-1} (a(k)*n!/k!) - A000682(n+1). - _Roger Ford_, Aug 24 2024
@@ -1,4 +0,0 @@
1
- from mapFolding._oeisFormulas.A000682 import A000682
2
-
3
- def A259702(n: int) -> int:
4
- return A000682(n) // 2 - A000682(n - 1)
@@ -1,6 +0,0 @@
1
- from mapFolding._oeisFormulas.A000682 import A000682
2
-
3
- def A301620(n: int) -> int:
4
- return A000682(n + 2) - 2 * A000682(n + 1)
5
-
6
- # %F A301620 a(n) = Sum_{k=3..floor((n+3)/2)} (A259689(n+1,k)*(k-2)). - _Roger Ford_, Dec 10 2018
@@ -1,34 +0,0 @@
1
- # pyright: reportUnusedImport=false
2
- from mapFolding._oeisFormulas.A000136 import A000136
3
- from mapFolding._oeisFormulas.A000682 import A000682
4
- from mapFolding._oeisFormulas.A001010 import A001010
5
- from mapFolding._oeisFormulas.Z0Z_oeisMeanders import dictionaryOEISMeanders
6
- from mapFolding.oeis import dictionaryOEIS
7
- import sys
8
- import time
9
-
10
- # ruff: noqa: ERA001
11
-
12
- if __name__ == '__main__':
13
- def _write() -> None:
14
- sys.stdout.write(
15
- f"{(booleanColor:=(foldsTotal == dictionaryOEISMeanders[oeisID]['valuesKnown'][n]))}\t" # pyright: ignore[reportIndexIssue, reportUnknownVariableType]
16
- f"\033[{(not booleanColor)*91}m"
17
- f"{n}\t"
18
- f"{foldsTotal}\t"
19
- # f"{dictionaryOEISMeanders[oeisID]['valuesKnown'][n]=}\t"
20
- f"{time.perf_counter() - timeStart:.2f}\t"
21
- # f"{description}\t"
22
- "\033[0m\n"
23
- )
24
- oeisID = 'A001010'
25
- oeisID = 'A000136'
26
- oeisID = 'A000682'
27
- for n in range(3,17):
28
-
29
- # sys.stdout.write(f"{n = }\n")
30
-
31
- timeStart = time.perf_counter()
32
- foldsTotal = eval(oeisID)(n) # noqa: S307
33
- # sys.stdout.write(f"{n} {foldsTotal} {time.perf_counter() - timeStart:.2f}\n")
34
- _write()
@@ -1,16 +0,0 @@
1
- """Half-formed thoughts.
2
-
3
- I have unintentionally made `bridges -= 1` almost meaningless.
4
-
5
- Unlike multidimensional map folding, the computation of curveLocations_sub_i for bridges=p does not need to happen during the
6
- series of computation for bridges=p. Each curveLocations_sub_i produces between no curveLocations, curveLocations_sub_q,
7
- curveLocations_sub_r, curveLocations_sub_s, and curveLocations_sub_t, which are recorded as keys in dictionaryCurveLocations.
8
-
9
- `while bridges > 0: bridges -= 1` tacitly attaches metadata to each key in dictionaryCurveLocations: specifically the value of
10
- `bridges`. The computation is not complete until the `bridges` value of each key reaches 0.
11
-
12
- Therefore, it is hypothetically possible to use one dictionary and to explicitly track the `bridges` value for each key. In
13
- that scenario, the dictionary is effectively a list of jobs. And instead of being at the mercy of the amount of resources
14
- needed by each decrement, bridges -= 1, we can use well-researched techniques to manage resources and the order of
15
- execution.
16
- """
@@ -1,74 +0,0 @@
1
- from mapFolding._oeisFormulas.A000560 import A000560
2
- from mapFolding._oeisFormulas.A000682 import A000682
3
- from mapFolding._oeisFormulas.A001010 import A001010
4
- from mapFolding._oeisFormulas.A001011 import A001011
5
- from mapFolding._oeisFormulas.A005315 import A005315
6
- from mapFolding._oeisFormulas.A005316 import A005316
7
- from mapFolding._oeisFormulas.A223094 import A223094
8
- from mapFolding._oeisFormulas.A259702 import A259702
9
- from mapFolding._oeisFormulas.A301620 import A301620
10
- from mapFolding.oeis import getOEISidInformation, getOEISidValues
11
- from typing import TypedDict
12
- import sys
13
-
14
- oeisIDsMeanders: list[str] = [
15
- 'A000560',
16
- 'A000682',
17
- 'A001010',
18
- 'A001011',
19
- 'A005315',
20
- 'A005316',
21
- 'A223094',
22
- 'A259702',
23
- 'A301620',
24
- ]
25
-
26
- # ruff: noqa: ERA001
27
- class MetadataOEISidMeanders(TypedDict):
28
- """Settings for an implemented OEIS sequence."""
29
-
30
- description: str
31
- """The OEIS.org description of the integer sequence."""
32
- # getMapShape: Callable[[int], tuple[int, ...]]
33
- """Function to convert the OEIS sequence index, 'n', to its `mapShape` tuple."""
34
- offset: int
35
- """The starting index, 'n', of the sequence, typically 0 or 1."""
36
- # valuesBenchmark: list[int]
37
- """List of index values, 'n', to use when benchmarking the algorithm performance."""
38
- valuesKnown: dict[int, int]
39
- """Dictionary of sequence indices, 'n', to their known values, `foldsTotal`."""
40
- # valuesTestParallelization: list[int]
41
- """List of index values, 'n', to use when testing parallelization performance."""
42
- # valuesTestValidation: list[int]
43
- """List of index values, 'n', to use when testing validation performance."""
44
- # valueUnknown: int
45
- """The smallest value of 'n' for for which `foldsTotal` is unknown."""
46
-
47
- dictionaryOEISMeanders: dict[str, MetadataOEISidMeanders] = {
48
- oeisID: {
49
- 'description': getOEISidInformation(oeisID)[0],
50
- 'offset': getOEISidInformation(oeisID)[1],
51
- 'valuesKnown': getOEISidValues(oeisID),
52
- }
53
- for oeisID in oeisIDsMeanders
54
- }
55
-
56
- # ruff: noqa: S101
57
- # pyright: reportIndexIssue=false
58
-
59
- rangeTest = range(5, 13)
60
-
61
- if __name__ == '__main__':
62
- for n in rangeTest:
63
-
64
- assert A000560(n) == dictionaryOEISMeanders['A000560']['valuesKnown'][n]
65
- assert A000682(n) == dictionaryOEISMeanders['A000682']['valuesKnown'][n]
66
- assert A001010(n) == dictionaryOEISMeanders['A001010']['valuesKnown'][n]
67
- assert A001011(n) == dictionaryOEISMeanders['A001011']['valuesKnown'][n]
68
- assert A005315(n) == dictionaryOEISMeanders['A005315']['valuesKnown'][n]
69
- assert A005316(n) == dictionaryOEISMeanders['A005316']['valuesKnown'][n]
70
- assert A223094(n) == dictionaryOEISMeanders['A223094']['valuesKnown'][n]
71
- assert A259702(n) == dictionaryOEISMeanders['A259702']['valuesKnown'][n]
72
- assert A301620(n) == dictionaryOEISMeanders['A301620']['valuesKnown'][n]
73
-
74
- sys.stdout.write(f"\nTrue for {str(rangeTest)}\n")