mapFolding 0.17.0__py3-none-any.whl → 0.18.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 (245) hide show
  1. easyRun/NOTcountingFolds.py +16 -10
  2. easyRun/__init__.py +1 -0
  3. easyRun/countFolds.py +17 -9
  4. easyRun/meanders.py +6 -8
  5. mapFolding/__init__.py +24 -35
  6. mapFolding/_e/Z0Z_analysisPython/SORTZ0Z_hypothesis.py +189 -0
  7. mapFolding/_e/Z0Z_analysisPython/SORTZ0Z_p2d6.py +143 -0
  8. mapFolding/_e/Z0Z_analysisPython/__init__.py +4 -0
  9. mapFolding/_e/Z0Z_analysisPython/exclusionData/__init__.py +0 -0
  10. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/344/270/200.py +369 -0
  11. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/344/270/2001.py +694 -0
  12. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/344/270/200/344/270/211.py +514 -0
  13. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/344/270/200/344/270/2111.py +480 -0
  14. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/344/270/200/344/272/214.py +511 -0
  15. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/344/270/200/344/272/2141.py +515 -0
  16. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/344/270/200/344/272/214/344/270/211.py +485 -0
  17. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/344/270/200/344/272/214/344/270/2111.py +442 -0
  18. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/344/270/211.py +313 -0
  19. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/344/270/2111.py +343 -0
  20. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/344/272/214.py +400 -0
  21. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/344/272/2141.py +497 -0
  22. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/344/272/214/344/270/211.py +463 -0
  23. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/344/272/214/344/270/2111.py +441 -0
  24. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/351/233/266.py +35 -0
  25. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/351/233/2661.py +35 -0
  26. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/351/233/266/344/270/200.py +382 -0
  27. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/351/233/266/344/270/2001.py +630 -0
  28. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/351/233/266/344/270/200/344/270/211.py +488 -0
  29. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/351/233/266/344/270/200/344/270/2111.py +475 -0
  30. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/351/233/266/344/270/200/344/272/214.py +473 -0
  31. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/351/233/266/344/270/200/344/272/2141.py +500 -0
  32. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/351/233/266/344/270/200/344/272/214/344/270/211.py +465 -0
  33. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/351/233/266/344/270/200/344/272/214/344/270/2111.py +439 -0
  34. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/351/233/266/344/270/211.py +599 -0
  35. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/351/233/266/344/270/2111.py +536 -0
  36. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/351/233/266/344/272/214.py +506 -0
  37. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/351/233/266/344/272/2141.py +533 -0
  38. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/351/233/266/344/272/214/344/270/211.py +489 -0
  39. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/351/233/266/344/272/214/344/270/2111.py +474 -0
  40. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/200.py +1186 -0
  41. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/2001.py +2158 -0
  42. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/2001Negative.py +2158 -0
  43. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/200Negative.py +1186 -0
  44. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/200/344/270/211.py +1397 -0
  45. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/200/344/270/2111.py +1291 -0
  46. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/200/344/270/2111Negative.py +1291 -0
  47. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/200/344/270/211Negative.py +1397 -0
  48. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/200/344/272/214.py +1240 -0
  49. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/200/344/272/2141.py +1420 -0
  50. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/200/344/272/2141Negative.py +1420 -0
  51. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/200/344/272/214Negative.py +1240 -0
  52. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/200/344/272/214/344/270/211.py +1366 -0
  53. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/200/344/272/214/344/270/2111.py +1274 -0
  54. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/200/344/272/214/344/270/2111Negative.py +1274 -0
  55. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/200/344/272/214/344/270/211Negative.py +1366 -0
  56. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/211.py +1186 -0
  57. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/2111.py +1186 -0
  58. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/2111Negative.py +1186 -0
  59. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/211Negative.py +1186 -0
  60. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/272/214.py +1102 -0
  61. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/272/2141.py +1422 -0
  62. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/272/2141Negative.py +1422 -0
  63. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/272/214Negative.py +1102 -0
  64. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/272/214/344/270/211.py +1240 -0
  65. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/272/214/344/270/2111.py +1228 -0
  66. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/272/214/344/270/2111Negative.py +1228 -0
  67. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/272/214/344/270/211Negative.py +1240 -0
  68. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266.py +32 -0
  69. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/2661.py +1162 -0
  70. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/2661Negative.py +1162 -0
  71. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266Negative.py +32 -0
  72. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/200.py +1186 -0
  73. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/2001.py +1926 -0
  74. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/2001Negative.py +1926 -0
  75. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/200Negative.py +1186 -0
  76. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/200/344/270/211.py +1291 -0
  77. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/200/344/270/2111.py +1176 -0
  78. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/200/344/270/2111Negative.py +1176 -0
  79. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/200/344/270/211Negative.py +1291 -0
  80. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/200/344/272/214.py +1228 -0
  81. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/200/344/272/2141.py +1324 -0
  82. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/200/344/272/2141Negative.py +1324 -0
  83. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/200/344/272/214Negative.py +1228 -0
  84. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/200/344/272/214/344/270/211.py +1274 -0
  85. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/200/344/272/214/344/270/2111.py +1038 -0
  86. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/200/344/272/214/344/270/2111Negative.py +1038 -0
  87. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/200/344/272/214/344/270/211Negative.py +1274 -0
  88. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/211.py +2158 -0
  89. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/2111.py +1926 -0
  90. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/2111Negative.py +1926 -0
  91. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/211Negative.py +2158 -0
  92. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/272/214.py +1422 -0
  93. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/272/2141.py +1364 -0
  94. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/272/2141Negative.py +1364 -0
  95. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/272/214Negative.py +1422 -0
  96. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/272/214/344/270/211.py +1420 -0
  97. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/272/214/344/270/2111.py +1324 -0
  98. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/272/214/344/270/2111Negative.py +1324 -0
  99. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/272/214/344/270/211Negative.py +1420 -0
  100. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/200.py +3133 -0
  101. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/2001.py +6039 -0
  102. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/2001Negative.py +6039 -0
  103. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/200Negative.py +3133 -0
  104. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/200/344/270/211.py +3527 -0
  105. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/200/344/270/2111.py +2300 -0
  106. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/200/344/270/2111Negative.py +2300 -0
  107. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/200/344/270/211Negative.py +3527 -0
  108. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/200/344/272/214.py +3597 -0
  109. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/200/344/272/2141.py +3317 -0
  110. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/200/344/272/2141Negative.py +3317 -0
  111. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/200/344/272/214Negative.py +3597 -0
  112. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/200/344/272/214/344/270/211.py +3161 -0
  113. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/200/344/272/214/344/270/2111.py +2877 -0
  114. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/200/344/272/214/344/270/2111Negative.py +2877 -0
  115. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/200/344/272/214/344/270/211Negative.py +3161 -0
  116. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/211.py +2981 -0
  117. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/2111.py +3055 -0
  118. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/2111Negative.py +3055 -0
  119. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/211Negative.py +2981 -0
  120. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/272/214.py +3221 -0
  121. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/272/2141.py +3988 -0
  122. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/272/2141Negative.py +3988 -0
  123. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/272/214Negative.py +3221 -0
  124. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/272/214/344/270/211.py +3652 -0
  125. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/272/214/344/270/2111.py +2863 -0
  126. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/272/214/344/270/2111Negative.py +2863 -0
  127. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/272/214/344/270/211Negative.py +3652 -0
  128. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/200.py +2485 -0
  129. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/2001.py +4566 -0
  130. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/2001Negative.py +4566 -0
  131. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/200Negative.py +2485 -0
  132. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/200/344/270/211.py +3006 -0
  133. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/200/344/270/2111.py +2485 -0
  134. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/200/344/270/2111Negative.py +2485 -0
  135. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/200/344/270/211Negative.py +3006 -0
  136. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/200/344/272/214.py +3304 -0
  137. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/200/344/272/2141.py +3015 -0
  138. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/200/344/272/2141Negative.py +3015 -0
  139. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/200/344/272/214Negative.py +3304 -0
  140. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/200/344/272/214/344/270/211.py +2939 -0
  141. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/200/344/272/214/344/270/2111.py +2589 -0
  142. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/200/344/272/214/344/270/2111Negative.py +2589 -0
  143. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/200/344/272/214/344/270/211Negative.py +2939 -0
  144. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/211.py +3899 -0
  145. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/2111.py +2996 -0
  146. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/2111Negative.py +2996 -0
  147. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/211Negative.py +3899 -0
  148. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/272/214.py +3223 -0
  149. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/272/2141.py +3020 -0
  150. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/272/2141Negative.py +3020 -0
  151. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/272/214Negative.py +3223 -0
  152. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/272/214/344/270/211.py +3250 -0
  153. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/272/214/344/270/2111.py +2667 -0
  154. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/272/214/344/270/2111Negative.py +2667 -0
  155. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/272/214/344/270/211Negative.py +3250 -0
  156. mapFolding/_e/Z0Z_analysisPython/measure.py +162 -0
  157. mapFolding/_e/Z0Z_analysisPython/positionAnalysis.py +403 -0
  158. mapFolding/_e/Z0Z_analysisPython/positionAnalysisPileRanges2d6.py +110 -0
  159. mapFolding/_e/Z0Z_analysisPython/theExcluderBeast.py +640 -0
  160. mapFolding/_e/Z0Z_analysisPython/toolkit.py +166 -0
  161. mapFolding/_e/Z0Z_analysisPython/toolkitCSVsequences.py +188 -0
  162. mapFolding/_e/Z0Z_analysisPython/workBenchPatternFinder.py +284 -0
  163. mapFolding/_e/Z0Z_notes/__init__.py +0 -0
  164. mapFolding/_e/Z0Z_notes/knowledgeDump.py +214 -0
  165. mapFolding/_e/__init__.py +45 -0
  166. mapFolding/_e/_beDRY.py +547 -0
  167. mapFolding/_e/_dataDynamic.py +1164 -0
  168. mapFolding/_e/_measure.py +579 -0
  169. mapFolding/_e/_semiotics.py +363 -0
  170. mapFolding/_e/_theTypes.py +31 -0
  171. mapFolding/_e/algorithms/__init__.py +1 -0
  172. mapFolding/_e/algorithms/constraintPropagation.py +158 -0
  173. mapFolding/_e/algorithms/elimination.py +118 -0
  174. mapFolding/_e/algorithms/eliminationCrease.py +66 -0
  175. mapFolding/_e/algorithms/iff.py +584 -0
  176. mapFolding/_e/basecamp.py +89 -0
  177. mapFolding/_e/dataBaskets.py +123 -0
  178. mapFolding/_e/dataRaw/__init__.py +0 -0
  179. mapFolding/_e/easyRun/__init__.py +0 -0
  180. mapFolding/_e/easyRun/eliminateFolds.py +72 -0
  181. mapFolding/_e/easyRun/pinning.py +62 -0
  182. mapFolding/_e/filters.py +384 -0
  183. mapFolding/_e/pin2/344/270/212nDimensions.py +882 -0
  184. mapFolding/_e/pin2/344/270/212nDimensionsAnnex.py +551 -0
  185. mapFolding/_e/pin2/344/270/212nDimensionsByCrease.py +190 -0
  186. mapFolding/_e/pin2/344/270/212nDimensionsByDomain.py +459 -0
  187. mapFolding/_e/pinIt.py +436 -0
  188. mapFolding/_semiotics.py +42 -0
  189. mapFolding/_theSSOT.py +11 -56
  190. mapFolding/_theTypes.py +52 -68
  191. mapFolding/algorithms/A086345.py +8 -3
  192. mapFolding/algorithms/__init__.py +1 -1
  193. mapFolding/algorithms/matrixMeandersNumPyndas.py +18 -18
  194. mapFolding/algorithms/oeisIDbyFormula.py +4 -4
  195. mapFolding/algorithms/zCuzDocStoopidoeisIDbyFormula.py +3 -3
  196. mapFolding/basecamp.py +13 -28
  197. mapFolding/beDRY.py +108 -99
  198. mapFolding/filesystemToolkit.py +15 -11
  199. mapFolding/oeis.py +17 -16
  200. mapFolding/reference/matrixMeandersAnalysis/prefixNotationNotes.py +2 -2
  201. mapFolding/reference/meandersDumpingGround/matrixMeandersBaselineV2.py +0 -1
  202. mapFolding/reference/meandersDumpingGround/matrixMeandersNumPyV1finalForm.py +8 -10
  203. mapFolding/someAssemblyRequired/RecipeJob.py +5 -5
  204. mapFolding/someAssemblyRequired/makeJobTheorem2Numba.py +5 -2
  205. mapFolding/someAssemblyRequired/makeJobTheorem2codon.py +9 -11
  206. mapFolding/someAssemblyRequired/mapFoldingModules/makeMapFoldingModules.py +2 -1
  207. mapFolding/someAssemblyRequired/transformationTools.py +2 -2
  208. mapFolding/tests/Z0Z_test_e_excluder.py +155 -0
  209. mapFolding/tests/conftest.py +193 -314
  210. mapFolding/tests/dataSamples/A001417.py +455 -0
  211. mapFolding/tests/dataSamples/__init__.py +1 -0
  212. mapFolding/tests/dataSamples/measurementData.py +1818 -0
  213. mapFolding/tests/dataSamples/p2DnDomain3_2_/351/246/226/344/270/200_/351/246/226/351/233/266/344/270/200.py +17 -0
  214. mapFolding/tests/dataSamples/p2DnDomain3_/351/246/226/344/270/200.py +17 -0
  215. mapFolding/tests/dataSamples/p2DnDomain5_4.py +17 -0
  216. mapFolding/tests/dataSamples/p2DnDomain6_5.py +17 -0
  217. mapFolding/tests/dataSamples/p2DnDomain6_7_5_4.py +17 -0
  218. mapFolding/tests/dataSamples/p2DnDomain7_6.py +17 -0
  219. mapFolding/tests/dataSamples/p2DnDomain/351/246/226/344/272/214_/351/246/226/351/233/266/344/270/200/344/272/214.py +17 -0
  220. mapFolding/tests/dataSamples/p2DnDomain/351/246/226/344/272/214_/351/246/226/351/233/266/344/272/214_/351/246/226/351/233/266/344/270/200/344/272/214_/351/246/226/344/270/200/344/272/214.py +17 -0
  221. mapFolding/tests/dataSamples/p2DnDomain/351/246/226/351/233/266/344/270/200/344/272/214_/351/246/226/344/270/200/344/272/214.py +15 -0
  222. mapFolding/tests/dataSamples/p2DnDomain/351/246/226/351/233/266/344/272/214_/351/246/226/344/272/214.py +15 -0
  223. mapFolding/tests/dataSamples/semioticsData.py +135 -0
  224. mapFolding/tests/test_computations.py +133 -88
  225. mapFolding/tests/test_e_computations.py +42 -0
  226. mapFolding/tests/test_e_dataDynamic.py +189 -0
  227. mapFolding/tests/test_e_measurements.py +257 -0
  228. mapFolding/tests/test_e_pinning.py +61 -0
  229. mapFolding/tests/test_e_semiotics.py +128 -0
  230. mapFolding/tests/test_filesystem.py +39 -17
  231. mapFolding/tests/{test_other.py → test_parameterValidation.py} +3 -3
  232. mapFolding/tests/{test_tasks.py → test_taskDivisions.py} +42 -23
  233. mapFolding/zCuzDocStoopid/makeDocstrings.py +3 -2
  234. {mapfolding-0.17.0.dist-info → mapfolding-0.18.0.dist-info}/METADATA +15 -9
  235. mapfolding-0.18.0.dist-info/RECORD +305 -0
  236. {mapfolding-0.17.0.dist-info → mapfolding-0.18.0.dist-info}/WHEEL +1 -1
  237. easyRun/A000682.py +0 -25
  238. easyRun/A005316.py +0 -20
  239. mapFolding/algorithms/A000136constraintPropagation.py +0 -95
  240. mapFolding/algorithms/A000136elimination.py +0 -163
  241. mapFolding/algorithms/A000136eliminationParallel.py +0 -77
  242. mapfolding-0.17.0.dist-info/RECORD +0 -107
  243. {mapfolding-0.17.0.dist-info → mapfolding-0.18.0.dist-info}/entry_points.txt +0 -0
  244. {mapfolding-0.17.0.dist-info → mapfolding-0.18.0.dist-info}/licenses/LICENSE +0 -0
  245. {mapfolding-0.17.0.dist-info → mapfolding-0.18.0.dist-info}/top_level.txt +0 -0
@@ -25,8 +25,8 @@ 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, dictionaryOEIS, dictionaryOEISMapFolding, getFoldsTotalKnown, oeisIDfor_n
29
- from mapFolding.basecamp import NOTcountingFolds
28
+ from mapFolding import dictionaryOEIS, dictionaryOEISMapFolding, getFoldsTotalKnown, oeisIDfor_n
29
+ from mapFolding.basecamp import countFolds, NOTcountingFolds
30
30
  from mapFolding.dataBaskets import MapFoldingState
31
31
  from mapFolding.someAssemblyRequired.RecipeJob import RecipeJobTheorem2
32
32
  from mapFolding.someAssemblyRequired.toolkitNumba import parametersNumbaLight
@@ -34,65 +34,56 @@ from mapFolding.syntheticModules.initializeState import transitionOnGroupsOfFold
34
34
  from mapFolding.tests.conftest import registrarRecordsTemporaryFilesystemObject, standardizedEqualToCallableReturn
35
35
  from numba.core.errors import NumbaPendingDeprecationWarning
36
36
  from pathlib import Path, PurePosixPath
37
+ from typing import TYPE_CHECKING
37
38
  import importlib.util
38
- import multiprocessing
39
39
  import pytest
40
40
  import warnings
41
41
 
42
- if __name__ == '__main__':
43
- multiprocessing.set_start_method('spawn')
44
-
45
- @pytest.mark.parametrize('flow', ['elimination', 'eliminationParallel'])#, 'constraintPropagation']) # ortools requires pandas, which doesn't have Py 3.14 yet.
46
- def test_A000136(flow: str) -> None:
47
- """Test A000136 flow options.
48
-
49
- Parameters
50
- ----------
51
- flow : str
52
- The computational flow algorithm to validate.
53
-
54
- """
55
- oeisID = 'A000136'
56
- CPUlimit = .5
57
- oeis_n = 2
58
- for oeis_n in dictionaryOEISMapFolding[oeisID]['valuesTestValidation']:
59
- if oeis_n < 2:
60
- continue
61
-
62
- expected = dictionaryOEISMapFolding[oeisID]['valuesKnown'][oeis_n]
63
-
64
- standardizedEqualToCallableReturn(
65
- expected
66
- , NOTcountingFolds, oeisID, oeis_n, flow, CPUlimit
67
- )
68
-
69
- @pytest.mark.parametrize('flow', ['algorithm', 'asynchronous', 'theorem2', 'theorem2Numba', 'theorem2Trimmed'])
70
- def test_A007822(flow: str) -> None:
42
+ if TYPE_CHECKING:
43
+ from importlib.machinery import ModuleSpec
44
+ from mapFolding import MetadataOEISid, MetadataOEISidMapFolding
45
+ from types import ModuleType
46
+
47
+ @pytest.mark.parametrize(
48
+ "oeisIdentifier, sequenceIndex, flow, processorLimit",
49
+ [
50
+ pytest.param("A007822", 4, "algorithm", 0.5, id="algorithm"),
51
+ pytest.param("A007822", 4, "asynchronous", 0.5, id="asynchronous"),
52
+ pytest.param("A007822", 4, "theorem2", 0.5, id="theorem2"),
53
+ pytest.param("A007822", 4, "theorem2Numba", 0.5, id="theorem2Numba"),
54
+ pytest.param("A007822", 4, "theorem2Trimmed", 0.5, id="theorem2Trimmed"),
55
+ ],
56
+ )
57
+ def test_A007822(oeisIdentifier: str, sequenceIndex: int, flow: str, processorLimit: float) -> None:
71
58
  """Test A007822 flow options.
72
59
 
73
60
  Parameters
74
61
  ----------
62
+ oeisIdentifier : str
63
+ OEIS identifier to validate.
64
+ sequenceIndex : int
65
+ Sequence index to validate.
75
66
  flow : str
76
- The computational flow algorithm to validate.
67
+ Computation flow to validate.
68
+ processorLimit : float
69
+ CPU limit for the computation.
77
70
 
78
71
  """
79
- oeisID = 'A007822'
80
- CPUlimit = .5
81
- warnings.filterwarnings('ignore', category=NumbaPendingDeprecationWarning)
82
- oeis_n = 2
83
- for oeis_n in dictionaryOEIS[oeisID]['valuesTestValidation']:
84
- if oeis_n < 2:
85
- continue
86
-
87
- expected = dictionaryOEIS[oeisID]['valuesKnown'][oeis_n]
88
-
89
- standardizedEqualToCallableReturn(
90
- expected
91
- , NOTcountingFolds, oeisID, oeis_n, flow, CPUlimit
92
- )
93
-
94
- @pytest.mark.parametrize('flow', ['daoOfMapFolding', 'numba', 'theorem2', 'theorem2Numba', 'theorem2Trimmed'])
95
- def test_countFolds(mapShapeTestCountFolds: tuple[int, ...], flow: str) -> None:
72
+ warnings.filterwarnings("ignore", category=NumbaPendingDeprecationWarning)
73
+ expected: int = dictionaryOEIS[oeisIdentifier]['valuesKnown'][sequenceIndex]
74
+ standardizedEqualToCallableReturn(expected, NOTcountingFolds, oeisIdentifier, sequenceIndex, flow, processorLimit)
75
+
76
+ @pytest.mark.parametrize(
77
+ "oeisIdentifier, sequenceIndex, flow, processorLimit",
78
+ [
79
+ pytest.param("A000136", 3, "daoOfMapFolding", None, id="A000136::daoOfMapFolding"),
80
+ pytest.param("A001415", 3, "numba", None, id="A001415::numba"),
81
+ pytest.param("A001416", 3, "theorem2Numba", None, id="A001416::theorem2Numba"),
82
+ pytest.param("A001417", 3, "theorem2", None, id="A001417::theorem2"),
83
+ pytest.param("A001418", 3, "theorem2Trimmed", None, id="A001418::theorem2Trimmed"),
84
+ ],
85
+ )
86
+ def test_countFolds(oeisIdentifier: str, sequenceIndex: int, flow: str, processorLimit: float | None) -> None:
96
87
  """Validate that different computational flows produce valid results.
97
88
 
98
89
  (AI generated docstring)
@@ -106,16 +97,32 @@ def test_countFolds(mapShapeTestCountFolds: tuple[int, ...], flow: str) -> None:
106
97
 
107
98
  Parameters
108
99
  ----------
109
- mapShapeTestCountFolds : tuple[int, ...]
110
- The map shape dimensions to test fold counting for.
100
+ oeisIdentifier : str
101
+ OEIS identifier to validate.
102
+ sequenceIndex : int
103
+ Sequence index to validate.
111
104
  flow : str
112
- The computational flow algorithm to validate.
105
+ Computation flow to validate.
106
+ processorLimit : float | None
107
+ CPU limit for the computation.
113
108
 
114
109
  """
115
- standardizedEqualToCallableReturn(getFoldsTotalKnown(mapShapeTestCountFolds), countFolds, None, None, None, None, mapShapeTestCountFolds, flow)
116
-
117
- @pytest.mark.parametrize('flow', ['matrixMeanders', 'matrixNumPy', 'matrixPandas'])
118
- def test_meanders(oeisIDmeanders: str, flow: str) -> None:
110
+ mapShape: tuple[int, ...] = dictionaryOEISMapFolding[oeisIdentifier]['getMapShape'](sequenceIndex)
111
+ expected: int = dictionaryOEISMapFolding[oeisIdentifier]['valuesKnown'][sequenceIndex]
112
+ standardizedEqualToCallableReturn(expected, countFolds, None, None, None, processorLimit, mapShape, flow)
113
+
114
+ @pytest.mark.parametrize(
115
+ "oeisIdentifier, sequenceIndex, flow",
116
+ [
117
+ pytest.param("A000682", 3, "matrixMeanders", id="A000682::matrixMeanders"),
118
+ pytest.param("A005316", 3, "matrixMeanders", id="A005316::matrixMeanders"),
119
+ pytest.param("A000682", 3, "matrixNumPy", id="A000682::matrixNumPy"),
120
+ pytest.param("A005316", 3, "matrixNumPy", id="A005316::matrixNumPy"),
121
+ pytest.param("A000682", 3, "matrixPandas", id="A000682::matrixPandas"),
122
+ pytest.param("A005316", 3, "matrixPandas", id="A005316::matrixPandas"),
123
+ ],
124
+ )
125
+ def test_meanders(oeisIdentifier: str, sequenceIndex: int, flow: str) -> None:
119
126
  """Verify Meanders OEIS sequence value calculations against known reference values.
120
127
 
121
128
  Tests the functions in `mapFolding.algorithms.oeisIDbyFormula` by comparing their
@@ -123,18 +130,39 @@ def test_meanders(oeisIDmeanders: str, flow: str) -> None:
123
130
 
124
131
  Parameters
125
132
  ----------
126
- oeisIDMeanders : str
127
- The Meanders OEIS sequence identifier to test calculations for.
133
+ oeisIdentifier : str
134
+ OEIS identifier to validate.
135
+ sequenceIndex : int
136
+ Sequence index to validate.
137
+ flow : str
138
+ Computation flow to validate.
128
139
 
129
140
  """
130
- dictionary = dictionaryOEISMapFolding if oeisIDmeanders in dictionaryOEISMapFolding else dictionaryOEIS
131
- for n in dictionary[oeisIDmeanders]['valuesTestValidation']:
132
- standardizedEqualToCallableReturn(
133
- dictionary[oeisIDmeanders]['valuesKnown'][n]
134
- , NOTcountingFolds, oeisIDmeanders, n, flow, None
135
- )
136
-
137
- def test_NOTcountingFolds(oeisIDother: str) -> None:
141
+ dictionaryCurrent: dict[str, MetadataOEISidMapFolding] | dict[str, MetadataOEISid] = dictionaryOEISMapFolding if oeisIdentifier in dictionaryOEISMapFolding else dictionaryOEIS
142
+ expected: int = dictionaryCurrent[oeisIdentifier]['valuesKnown'][sequenceIndex]
143
+ standardizedEqualToCallableReturn(expected, NOTcountingFolds, oeisIdentifier, sequenceIndex, flow, None)
144
+
145
+ @pytest.mark.parametrize(
146
+ "oeisIdentifier, sequenceIndex",
147
+ [
148
+ pytest.param("A000560", 3, id="A000560::n3"),
149
+ pytest.param("A000682", 3, id="A000682::n3"),
150
+ pytest.param("A001010", 3, id="A001010::n3"),
151
+ pytest.param("A001011", 3, id="A001011::n3"),
152
+ pytest.param("A005315", 3, id="A005315::n3"),
153
+ pytest.param("A005316", 3, id="A005316::n3"),
154
+ pytest.param("A007822", 3, id="A007822::n3"),
155
+ pytest.param("A060206", 3, id="A060206::n3"),
156
+ pytest.param("A077460", 3, id="A077460::n3"),
157
+ pytest.param("A078591", 3, id="A078591::n3"),
158
+ pytest.param("A086345", 3, id="A086345::n3"),
159
+ pytest.param("A178961", 3, id="A178961::n3"),
160
+ pytest.param("A223094", 3, id="A223094::n3"),
161
+ pytest.param("A259702", 3, id="A259702::n3"),
162
+ pytest.param("A301620", 3, id="A301620::n3"),
163
+ ],
164
+ )
165
+ def test_NOTcountingFolds(oeisIdentifier: str, sequenceIndex: int) -> None:
138
166
  """Verify Meanders OEIS sequence value calculations against known reference values.
139
167
 
140
168
  Tests the functions in `mapFolding.algorithms.oeisIDbyFormula` by comparing their
@@ -142,18 +170,28 @@ def test_NOTcountingFolds(oeisIDother: str) -> None:
142
170
 
143
171
  Parameters
144
172
  ----------
145
- oeisIDMeanders : str
146
- The Meanders OEIS sequence identifier to test calculations for.
173
+ oeisIdentifier : str
174
+ OEIS identifier to validate.
175
+ sequenceIndex : int
176
+ Sequence index to validate.
147
177
 
148
178
  """
149
- dictionary = dictionaryOEISMapFolding if oeisIDother in dictionaryOEISMapFolding else dictionaryOEIS
150
- for n in dictionary[oeisIDother]['valuesTestValidation']:
151
- standardizedEqualToCallableReturn(
152
- dictionary[oeisIDother]['valuesKnown'][n]
153
- , NOTcountingFolds, oeisIDother, n, None, None
154
- )
155
-
156
- def test_oeisIDfor_n(oeisIDmapFolding: str) -> None:
179
+ dictionaryCurrent: dict[str, MetadataOEISidMapFolding] | dict[str, MetadataOEISid] = dictionaryOEISMapFolding if oeisIdentifier in dictionaryOEISMapFolding else dictionaryOEIS
180
+ expected: int = dictionaryCurrent[oeisIdentifier]['valuesKnown'][sequenceIndex]
181
+ standardizedEqualToCallableReturn(expected, NOTcountingFolds, oeisIdentifier, sequenceIndex, None, None)
182
+
183
+ @pytest.mark.parametrize(
184
+ "oeisIdentifier, sequenceIndex",
185
+ [
186
+ pytest.param("A000136", 3, id="A000136::n3"),
187
+ pytest.param("A001415", 3, id="A001415::n3"),
188
+ pytest.param("A001416", 3, id="A001416::n3"),
189
+ pytest.param("A001417", 3, id="A001417::n3"),
190
+ pytest.param("A001418", 3, id="A001418::n3"),
191
+ pytest.param("A195646", 2, id="A195646::n2"),
192
+ ],
193
+ )
194
+ def test_oeisIDfor_n(oeisIdentifier: str, sequenceIndex: int) -> None:
157
195
  """Verify OEIS sequence value calculations against known reference values.
158
196
 
159
197
  Tests the `oeisIDfor_n` function by comparing its calculated output against
@@ -166,12 +204,19 @@ def test_oeisIDfor_n(oeisIDmapFolding: str) -> None:
166
204
 
167
205
  Parameters
168
206
  ----------
169
- oeisID : str
170
- The OEIS sequence identifier to test calculations for.
207
+ oeisIdentifier : str
208
+ OEIS identifier to validate.
209
+ sequenceIndex : int
210
+ Sequence index to validate.
171
211
 
172
212
  """
173
- for n in dictionaryOEISMapFolding[oeisIDmapFolding]['valuesTestValidation']:
174
- standardizedEqualToCallableReturn(dictionaryOEISMapFolding[oeisIDmapFolding]['valuesKnown'][n], oeisIDfor_n, oeisIDmapFolding, n)
213
+ expected: int = dictionaryOEISMapFolding[oeisIdentifier]['valuesKnown'][sequenceIndex]
214
+ standardizedEqualToCallableReturn(expected, oeisIDfor_n, oeisIdentifier, sequenceIndex)
215
+
216
+ @pytest.fixture
217
+ def oneTestCuzTestsOverwritingTests() -> tuple[int, ...]: # NOTE TO AI: DO NOT CHANGE THIS IDENTIFIER NAME.
218
+ """Return one deterministic map shape suitable for code generation tests."""
219
+ return dictionaryOEISMapFolding["A000136"]["getMapShape"](3)
175
220
 
176
221
  @pytest.mark.parametrize('pathFilename_tmpTesting', ['.py'], indirect=True)
177
222
  def test_writeJobNumba(oneTestCuzTestsOverwritingTests: tuple[int, ...], pathFilename_tmpTesting: Path) -> None:
@@ -197,11 +242,11 @@ def test_writeJobNumba(oneTestCuzTestsOverwritingTests: tuple[int, ...], pathFil
197
242
  """
198
243
  from mapFolding.someAssemblyRequired.makeJobTheorem2Numba import makeJobNumba # noqa: PLC0415
199
244
  from mapFolding.someAssemblyRequired.toolkitNumba import SpicesJobNumba # noqa: PLC0415
200
- mapShape = oneTestCuzTestsOverwritingTests
201
- state = transitionOnGroupsOfFolds(MapFoldingState(mapShape))
245
+ mapShape: tuple[int, ...] = oneTestCuzTestsOverwritingTests
246
+ state: MapFoldingState = transitionOnGroupsOfFolds(MapFoldingState(mapShape))
202
247
 
203
- pathFilenameModule = pathFilename_tmpTesting.absolute()
204
- pathFilenameFoldsTotal = pathFilenameModule.with_suffix('.foldsTotalTesting')
248
+ pathFilenameModule: Path = pathFilename_tmpTesting.absolute()
249
+ pathFilenameFoldsTotal: Path = pathFilenameModule.with_suffix('.foldsTotalTesting')
205
250
  registrarRecordsTemporaryFilesystemObject(pathFilenameFoldsTotal)
206
251
 
207
252
  jobTest = RecipeJobTheorem2(state
@@ -211,14 +256,14 @@ def test_writeJobNumba(oneTestCuzTestsOverwritingTests: tuple[int, ...], pathFil
211
256
  spices = SpicesJobNumba(useNumbaProgressBar=False, parametersNumba=parametersNumbaLight)
212
257
  makeJobNumba(jobTest, spices)
213
258
 
214
- Don_Lapre_Road_to_Self_Improvement = importlib.util.spec_from_file_location("__main__", pathFilenameModule)
259
+ Don_Lapre_Road_to_Self_Improvement: ModuleSpec | None = importlib.util.spec_from_file_location("__main__", pathFilenameModule)
215
260
  if Don_Lapre_Road_to_Self_Improvement is None:
216
- message = f"Failed to create module specification from {pathFilenameModule}"
261
+ message: str = f"Failed to create module specification from {pathFilenameModule}"
217
262
  raise ImportError(message)
218
263
  if Don_Lapre_Road_to_Self_Improvement.loader is None:
219
264
  message = f"Failed to get loader for module {pathFilenameModule}"
220
265
  raise ImportError(message)
221
- module = importlib.util.module_from_spec(Don_Lapre_Road_to_Self_Improvement)
266
+ module: ModuleType = importlib.util.module_from_spec(Don_Lapre_Road_to_Self_Improvement)
222
267
 
223
268
  module.__name__ = "__main__"
224
269
  Don_Lapre_Road_to_Self_Improvement.loader.exec_module(module)
@@ -0,0 +1,42 @@
1
+ from mapFolding import dictionaryOEISMapFolding
2
+ from mapFolding._e.basecamp import eliminateFolds
3
+ from mapFolding.tests.conftest import standardizedEqualToCallableReturn
4
+ import pytest
5
+
6
+ @pytest.mark.parametrize(
7
+ "oeisID, n, flow, CPUlimit",
8
+ [
9
+ pytest.param("A001417", 4, "crease", 0.25),
10
+
11
+ pytest.param("A000136", 5, "constraintPropagation", 0.25),
12
+ pytest.param("A001415", 5, "constraintPropagation", 0.25),
13
+ pytest.param("A001416", 4, "constraintPropagation", 0.25),
14
+ pytest.param("A001417", 4, "constraintPropagation", 0.25),
15
+ pytest.param("A001418", 3, "constraintPropagation", 0.25),
16
+ pytest.param("A195646", 2, "constraintPropagation", 0.25),
17
+ # *[pytest.param(oeisID, metadata["offset"], flow, 1)
18
+ # for oeisID, metadata in dictionaryOEISMapFolding.items()
19
+ # for flow in ["elimination"]]
20
+
21
+
22
+ ],
23
+ )
24
+ def test_eliminateFoldsMapShape(oeisID: str, n: int, flow: str, CPUlimit: float) -> None:
25
+ """Validate `eliminateFolds` and different flows produce valid results.
26
+
27
+ Parameters
28
+ ----------
29
+ oeisID : str
30
+ OEIS identifier to validate.
31
+ sequenceIndex : int
32
+ Sequence index to validate.
33
+ flow : str
34
+ Computation flow to validate.
35
+ processorLimit : float
36
+ CPU limit for the computation.
37
+ """
38
+ mapShape: tuple[int, ...] = dictionaryOEISMapFolding[oeisID]["getMapShape"](n)
39
+ state = None
40
+ pathLikeWriteFoldsTotal: None = None
41
+ expected: int = dictionaryOEISMapFolding[oeisID]['valuesKnown'][n]
42
+ standardizedEqualToCallableReturn(expected, eliminateFolds, mapShape, state, pathLikeWriteFoldsTotal, CPUlimit, flow)
@@ -0,0 +1,189 @@
1
+ """Tests for elimination algorithm data functions.
2
+
3
+ These tests verify the correctness of functions in `mapFolding._e._data` that compute
4
+ leaf domains, pile ranges, and addend dictionaries for map folding elimination algorithms.
5
+
6
+ The test data is stored in `tests/dataSamples/A001417.py` and supports multiple `mapShape`
7
+ configurations. Currently, data exists for:
8
+ - (2,)*4 → 16 leaves (2d4)
9
+ - (2,)*5 → 32 leaves (2d5)
10
+ - (2,)*6 → 64 leaves (2d6)
11
+
12
+ When adding new test data for additional `mapShape` values, add the data to `A001417.py`
13
+ and the tests will automatically pick them up via parametrization.
14
+ """
15
+
16
+ from collections.abc import Callable, Iterable, Sequence
17
+ from mapFolding._e import (
18
+ getDictionaryLeafDomains, getDictionaryPileRanges, getDomainDimension一, getDomainDimension二, getDomainDimension首二,
19
+ getDomain二一零and二一, getDomain二零and二, getDomain首零一二and首一二, getDomain首零二and首二, getLeafDomain, getLeavesCreaseAnte,
20
+ getLeavesCreasePost, getPileRange)
21
+ from mapFolding._e.dataBaskets import EliminationState
22
+ from mapFolding.tests.dataSamples import (
23
+ A001417, p2DnDomain3_2_首一_首零一, p2DnDomain5_4, p2DnDomain6_7_5_4, p2DnDomain7_6, p2DnDomain首二_首零二_首零一二_首一二,
24
+ p2DnDomain首零一二_首一二, p2DnDomain首零二_首二)
25
+ from more_itertools import all_unique, unique_to_each
26
+ from types import ModuleType
27
+ import pytest
28
+
29
+ @pytest.mark.parametrize("mapShape", list(A001417.dictionaryLeafDomainKnown), ids=[f"mapShape={shape}" for shape in A001417.dictionaryLeafDomainKnown])
30
+ def test_getDictionaryLeafDomains(mapShape: tuple[int, ...]) -> None:
31
+ """Verify getDictionaryLeafDomains against authoritative leaf domain data for all leaves."""
32
+ state = EliminationState(mapShape=mapShape)
33
+ dictionaryLeafDomainsAuthoritativeData = A001417.dictionaryLeafDomainKnown[mapShape]
34
+
35
+ dictionaryLeafDomainsActual = getDictionaryLeafDomains(state)
36
+
37
+ assert len(dictionaryLeafDomainsActual) == state.leavesTotal, (
38
+ f"getDictionaryLeafDomains: dictionary length {len(dictionaryLeafDomainsActual)} != {state.leavesTotal} for {mapShape=}."
39
+ )
40
+
41
+ for leaf in range(state.leavesTotal):
42
+ rangeActual = dictionaryLeafDomainsActual[leaf]
43
+ startAuthoritativeData, stopAuthoritativeData, stepAuthoritativeData = dictionaryLeafDomainsAuthoritativeData[leaf]
44
+ assert rangeActual.start == startAuthoritativeData, (
45
+ f"getDictionaryLeafDomains: range.start mismatch at {leaf=} for {mapShape=}. "
46
+ f"Expected {startAuthoritativeData}, got {rangeActual.start}."
47
+ )
48
+ assert rangeActual.stop == stopAuthoritativeData, (
49
+ f"getDictionaryLeafDomains: range.stop mismatch at {leaf=} for {mapShape=}. "
50
+ f"Expected {stopAuthoritativeData}, got {rangeActual.stop}."
51
+ )
52
+ assert rangeActual.step == stepAuthoritativeData, (
53
+ f"getDictionaryLeafDomains: range.step mismatch at {leaf=} for {mapShape=}. "
54
+ f"Expected {stepAuthoritativeData}, got {rangeActual.step}."
55
+ )
56
+
57
+ @pytest.mark.parametrize("mapShape", list(A001417.dictionaryPileRangesKnown), ids=[f"mapShape={shape}" for shape in A001417.dictionaryPileRangesKnown])
58
+ def test_getDictionaryPileRanges(mapShape: tuple[int, ...]) -> None:
59
+ """Verify getDictionaryPileRanges against authoritative pile range data for all piles."""
60
+ state = EliminationState(mapShape=mapShape)
61
+ dictionaryPileRangesAuthoritativeData = A001417.dictionaryPileRangesKnown[mapShape]
62
+
63
+ dictionaryPileRangesActual = getDictionaryPileRanges(state)
64
+
65
+ assert len(dictionaryPileRangesActual) == state.leavesTotal, (
66
+ f"getDictionaryPileRanges: dictionary length {len(dictionaryPileRangesActual)} != {state.leavesTotal} for {mapShape=}."
67
+ )
68
+
69
+ for pile in range(state.leavesTotal):
70
+ assert dictionaryPileRangesActual[pile] == dictionaryPileRangesAuthoritativeData[pile], (
71
+ f"getDictionaryPileRanges: mismatch at {pile=} for {mapShape=}. "
72
+ f"Expected {dictionaryPileRangesAuthoritativeData[pile]}, got {dictionaryPileRangesActual[pile]}."
73
+ )
74
+
75
+ @pytest.mark.parametrize("mapShape", list(A001417.dictionaryLeafDomainKnown), ids=[f"mapShape={shape}" for shape in A001417.dictionaryLeafDomainKnown])
76
+ def test_getLeafDomain(mapShape: tuple[int, ...]) -> None:
77
+ """Verify getLeafDomain against authoritative leaf domain data for all leaves."""
78
+ state = EliminationState(mapShape=mapShape)
79
+ dictionaryLeafDomainsAuthoritativeData = A001417.dictionaryLeafDomainKnown[mapShape]
80
+
81
+ for leaf in range(state.leavesTotal):
82
+ rangeActual = getLeafDomain(state, leaf)
83
+ startAuthoritativeData, stopAuthoritativeData, stepAuthoritativeData = dictionaryLeafDomainsAuthoritativeData[leaf]
84
+ assert rangeActual.start == startAuthoritativeData, (
85
+ f"getLeafDomain: range.start mismatch at {leaf=} for {mapShape=}. "
86
+ f"Expected {startAuthoritativeData}, got {rangeActual.start}."
87
+ )
88
+ assert rangeActual.stop == stopAuthoritativeData, (
89
+ f"getLeafDomain: range.stop mismatch at {leaf=} for {mapShape=}. "
90
+ f"Expected {stopAuthoritativeData}, got {rangeActual.stop}."
91
+ )
92
+ assert rangeActual.step == stepAuthoritativeData, (
93
+ f"getLeafDomain: range.step mismatch at {leaf=} for {mapShape=}. "
94
+ f"Expected {stepAuthoritativeData}, got {rangeActual.step}."
95
+ )
96
+
97
+ @pytest.mark.parametrize("dimensionsTotal", [5, 6], ids=lambda dimensionsTotal: f"2d{dimensionsTotal}")
98
+ @pytest.mark.parametrize("domainFunction,moduleAuthoritativeData", [
99
+ (getDomainDimension一, p2DnDomain3_2_首一_首零一),
100
+ (getDomainDimension二, p2DnDomain6_7_5_4),
101
+ (getDomainDimension首二, p2DnDomain首二_首零二_首零一二_首一二),
102
+ (getDomain二一零and二一, p2DnDomain7_6),
103
+ (getDomain二零and二, p2DnDomain5_4),
104
+ (getDomain首零一二and首一二, p2DnDomain首零一二_首一二),
105
+ (getDomain首零二and首二, p2DnDomain首零二_首二),
106
+ ], ids=lambda domainFunction: domainFunction.__name__)
107
+ def test_getLeafDomainsCombined(domainFunction: Callable[[EliminationState], Sequence[tuple[int, ...]]], moduleAuthoritativeData: ModuleType, dimensionsTotal: int) -> None:
108
+ """Verify combined domain function against authoritative dataset: completeness, uniqueness, correctness."""
109
+ mapShape: tuple[int, ...] = (2,) * dimensionsTotal
110
+ state = EliminationState(mapShape=mapShape)
111
+ tuplesDomainActual: tuple[tuple[int, ...], ...] = tuple(domainFunction(state))
112
+ tuplesDomainAuthoritativeData: tuple[tuple[int, ...], ...] = getattr(moduleAuthoritativeData, f"listDomain2D{dimensionsTotal}")
113
+
114
+ tuplesMissingFromActual, tuplesExtraInActual = unique_to_each(tuplesDomainAuthoritativeData, tuplesDomainActual)
115
+ tuplesMissingFromActual = tuple(tuplesMissingFromActual)
116
+ tuplesExtraInActual = tuple(tuplesExtraInActual)
117
+ hasAllUnique: bool = all_unique(tuplesDomainActual)
118
+
119
+ assert hasAllUnique, (
120
+ f"{domainFunction.__name__}: returned duplicate tuples for {mapShape=}."
121
+ )
122
+ assert len(tuplesMissingFromActual) == 0, (
123
+ f"{domainFunction.__name__}: missing {len(tuplesMissingFromActual)} tuples from authoritative data for {mapShape=}. "
124
+ f"Missing samples: {sorted(tuplesMissingFromActual)[:3]}"
125
+ )
126
+ assert len(tuplesExtraInActual) == 0, (
127
+ f"{domainFunction.__name__}: returned {len(tuplesExtraInActual)} tuples not in authoritative data for {mapShape=}. "
128
+ f"Extra samples: {sorted(tuplesExtraInActual)[:3]}"
129
+ )
130
+
131
+ @pytest.mark.parametrize("mapShape", list(A001417.dictionaryPileRangesKnown), ids=[f"mapShape={shape}" for shape in A001417.dictionaryPileRangesKnown])
132
+ def test_getPileRange(mapShape: tuple[int, ...]) -> None:
133
+ """Verify getPileRange against authoritative pile range data for all piles."""
134
+ state = EliminationState(mapShape=mapShape)
135
+ dictionaryPileRangesAuthoritativeData: dict[int, tuple[int, ...]] = A001417.dictionaryPileRangesKnown[mapShape]
136
+
137
+ for pile in range(state.leavesTotal):
138
+ tupleLeavesPileActual: tuple[int, ...] = tuple(getPileRange(state, pile))
139
+ tupleLeavesPileAuthoritativeData: tuple[int, ...] = dictionaryPileRangesAuthoritativeData[pile]
140
+
141
+ assert tupleLeavesPileActual == tupleLeavesPileAuthoritativeData, (
142
+ f"getPileRange: mismatch at {pile=} for {mapShape=}. "
143
+ f"Expected {tupleLeavesPileAuthoritativeData}, got {tupleLeavesPileActual}."
144
+ )
145
+
146
+ @pytest.mark.parametrize("dimensionsTotal", [5, 6], ids=lambda dimensionsTotal: f"2d{dimensionsTotal}")
147
+ @pytest.mark.parametrize(
148
+ "creaseKind,creaseFunction,dictionaryExpectedByMapShape",
149
+ [
150
+ ("increase", getLeavesCreasePost, A001417.dictionaryCreasesIncreaseKnown),
151
+ ("decrease", getLeavesCreaseAnte, A001417.dictionaryCreasesDecreaseKnown),
152
+ ],
153
+ ids=["increase", "decrease"],
154
+ )
155
+ def test_getLeavesCrease(creaseKind: str, creaseFunction: Callable[[EliminationState, int], Iterable[int]], dictionaryExpectedByMapShape: dict[tuple[int, ...], dict[int, list[int]]], dimensionsTotal: int) -> None:
156
+ mapShape: tuple[int, ...] = (2,) * dimensionsTotal
157
+ state: EliminationState = EliminationState(mapShape=mapShape)
158
+ dictionaryExpectedByLeaf: dict[int, list[int]] = dictionaryExpectedByMapShape[mapShape]
159
+
160
+ for leaf in range(state.leavesTotal):
161
+ listLeavesActual: list[int] = list(creaseFunction(state, leaf))
162
+ listLeavesExpectedSorted: list[int] = dictionaryExpectedByLeaf[leaf]
163
+
164
+ assert sorted(listLeavesActual) == listLeavesExpectedSorted, (
165
+ f"{creaseFunction.__name__} ({creaseKind}): mismatch for {mapShape=}, {leaf=}. "
166
+ f"Expected(sorted)={listLeavesExpectedSorted}, got(sorted)={sorted(listLeavesActual)}."
167
+ )
168
+
169
+ assert all_unique(listLeavesActual), (
170
+ f"{creaseFunction.__name__} ({creaseKind}): duplicates found for {mapShape=}, {leaf=}. "
171
+ f"Actual={listLeavesActual}."
172
+ )
173
+
174
+ for leafPost in listLeavesActual:
175
+ assert 0 <= leafPost < state.leavesTotal, (
176
+ f"{creaseFunction.__name__} ({creaseKind}): out-of-range value for {mapShape=}, {leaf=}. "
177
+ f"Got {leafPost}, expected 0 <= leafPost < {state.leavesTotal}."
178
+ )
179
+ bitFlip: int = leaf ^ leafPost
180
+ assert (bitFlip > 0) and ((bitFlip & (bitFlip - 1)) == 0), (
181
+ f"{creaseFunction.__name__} ({creaseKind}): expected one-bit flip for {mapShape=}, {leaf=}. "
182
+ f"Got {leafPost=}, {bitFlip=} (leaf^leafPost)."
183
+ )
184
+
185
+ listBitFlips: list[int] = [leaf ^ leafPost for leafPost in listLeavesActual]
186
+ assert listBitFlips == sorted(listBitFlips), (
187
+ f"{creaseFunction.__name__} ({creaseKind}): expected bit flips in increasing dimension order for {mapShape=}, {leaf=}. "
188
+ f"Got bit flips {listBitFlips}."
189
+ )