mapFolding 0.17.1__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 (248) hide show
  1. easyRun/NOTcountingFolds.py +7 -11
  2. easyRun/countFolds.py +11 -10
  3. easyRun/meanders.py +6 -8
  4. mapFolding/__init__.py +24 -36
  5. mapFolding/_e/Z0Z_analysisPython/SORTZ0Z_hypothesis.py +189 -0
  6. mapFolding/_e/Z0Z_analysisPython/SORTZ0Z_p2d6.py +143 -0
  7. mapFolding/_e/Z0Z_analysisPython/__init__.py +4 -0
  8. mapFolding/_e/Z0Z_analysisPython/exclusionData/__init__.py +0 -0
  9. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/344/270/200.py +369 -0
  10. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/344/270/2001.py +694 -0
  11. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/344/270/200/344/270/211.py +514 -0
  12. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/344/270/200/344/270/2111.py +480 -0
  13. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/344/270/200/344/272/214.py +511 -0
  14. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/344/270/200/344/272/2141.py +515 -0
  15. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/344/270/200/344/272/214/344/270/211.py +485 -0
  16. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/344/270/200/344/272/214/344/270/2111.py +442 -0
  17. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/344/270/211.py +313 -0
  18. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/344/270/2111.py +343 -0
  19. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/344/272/214.py +400 -0
  20. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/344/272/2141.py +497 -0
  21. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/344/272/214/344/270/211.py +463 -0
  22. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/344/272/214/344/270/2111.py +441 -0
  23. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/351/233/266.py +35 -0
  24. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/351/233/2661.py +35 -0
  25. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/351/233/266/344/270/200.py +382 -0
  26. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/351/233/266/344/270/2001.py +630 -0
  27. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/351/233/266/344/270/200/344/270/211.py +488 -0
  28. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/351/233/266/344/270/200/344/270/2111.py +475 -0
  29. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/351/233/266/344/270/200/344/272/214.py +473 -0
  30. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/351/233/266/344/270/200/344/272/2141.py +500 -0
  31. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/351/233/266/344/270/200/344/272/214/344/270/211.py +465 -0
  32. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/351/233/266/344/270/200/344/272/214/344/270/2111.py +439 -0
  33. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/351/233/266/344/270/211.py +599 -0
  34. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/351/233/266/344/270/2111.py +536 -0
  35. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/351/233/266/344/272/214.py +506 -0
  36. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/351/233/266/344/272/2141.py +533 -0
  37. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/351/233/266/344/272/214/344/270/211.py +489 -0
  38. mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/351/233/266/344/272/214/344/270/2111.py +474 -0
  39. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/200.py +1186 -0
  40. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/2001.py +2158 -0
  41. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/2001Negative.py +2158 -0
  42. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/200Negative.py +1186 -0
  43. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/200/344/270/211.py +1397 -0
  44. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/200/344/270/2111.py +1291 -0
  45. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/200/344/270/2111Negative.py +1291 -0
  46. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/200/344/270/211Negative.py +1397 -0
  47. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/200/344/272/214.py +1240 -0
  48. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/200/344/272/2141.py +1420 -0
  49. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/200/344/272/2141Negative.py +1420 -0
  50. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/200/344/272/214Negative.py +1240 -0
  51. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/200/344/272/214/344/270/211.py +1366 -0
  52. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/200/344/272/214/344/270/2111.py +1274 -0
  53. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/200/344/272/214/344/270/2111Negative.py +1274 -0
  54. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/200/344/272/214/344/270/211Negative.py +1366 -0
  55. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/211.py +1186 -0
  56. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/2111.py +1186 -0
  57. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/2111Negative.py +1186 -0
  58. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/211Negative.py +1186 -0
  59. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/272/214.py +1102 -0
  60. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/272/2141.py +1422 -0
  61. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/272/2141Negative.py +1422 -0
  62. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/272/214Negative.py +1102 -0
  63. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/272/214/344/270/211.py +1240 -0
  64. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/272/214/344/270/2111.py +1228 -0
  65. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/272/214/344/270/2111Negative.py +1228 -0
  66. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/272/214/344/270/211Negative.py +1240 -0
  67. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266.py +32 -0
  68. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/2661.py +1162 -0
  69. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/2661Negative.py +1162 -0
  70. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266Negative.py +32 -0
  71. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/200.py +1186 -0
  72. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/2001.py +1926 -0
  73. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/2001Negative.py +1926 -0
  74. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/200Negative.py +1186 -0
  75. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/200/344/270/211.py +1291 -0
  76. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/200/344/270/2111.py +1176 -0
  77. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/200/344/270/2111Negative.py +1176 -0
  78. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/200/344/270/211Negative.py +1291 -0
  79. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/200/344/272/214.py +1228 -0
  80. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/200/344/272/2141.py +1324 -0
  81. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/200/344/272/2141Negative.py +1324 -0
  82. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/200/344/272/214Negative.py +1228 -0
  83. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/200/344/272/214/344/270/211.py +1274 -0
  84. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/200/344/272/214/344/270/2111.py +1038 -0
  85. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/200/344/272/214/344/270/2111Negative.py +1038 -0
  86. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/200/344/272/214/344/270/211Negative.py +1274 -0
  87. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/211.py +2158 -0
  88. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/2111.py +1926 -0
  89. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/2111Negative.py +1926 -0
  90. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/211Negative.py +2158 -0
  91. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/272/214.py +1422 -0
  92. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/272/2141.py +1364 -0
  93. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/272/2141Negative.py +1364 -0
  94. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/272/214Negative.py +1422 -0
  95. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/272/214/344/270/211.py +1420 -0
  96. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/272/214/344/270/2111.py +1324 -0
  97. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/272/214/344/270/2111Negative.py +1324 -0
  98. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/272/214/344/270/211Negative.py +1420 -0
  99. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/200.py +3133 -0
  100. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/2001.py +6039 -0
  101. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/2001Negative.py +6039 -0
  102. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/200Negative.py +3133 -0
  103. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/200/344/270/211.py +3527 -0
  104. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/200/344/270/2111.py +2300 -0
  105. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/200/344/270/2111Negative.py +2300 -0
  106. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/200/344/270/211Negative.py +3527 -0
  107. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/200/344/272/214.py +3597 -0
  108. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/200/344/272/2141.py +3317 -0
  109. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/200/344/272/2141Negative.py +3317 -0
  110. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/200/344/272/214Negative.py +3597 -0
  111. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/200/344/272/214/344/270/211.py +3161 -0
  112. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/200/344/272/214/344/270/2111.py +2877 -0
  113. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/200/344/272/214/344/270/2111Negative.py +2877 -0
  114. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/200/344/272/214/344/270/211Negative.py +3161 -0
  115. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/211.py +2981 -0
  116. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/2111.py +3055 -0
  117. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/2111Negative.py +3055 -0
  118. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/211Negative.py +2981 -0
  119. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/272/214.py +3221 -0
  120. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/272/2141.py +3988 -0
  121. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/272/2141Negative.py +3988 -0
  122. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/272/214Negative.py +3221 -0
  123. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/272/214/344/270/211.py +3652 -0
  124. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/272/214/344/270/2111.py +2863 -0
  125. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/272/214/344/270/2111Negative.py +2863 -0
  126. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/272/214/344/270/211Negative.py +3652 -0
  127. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/200.py +2485 -0
  128. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/2001.py +4566 -0
  129. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/2001Negative.py +4566 -0
  130. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/200Negative.py +2485 -0
  131. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/200/344/270/211.py +3006 -0
  132. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/200/344/270/2111.py +2485 -0
  133. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/200/344/270/2111Negative.py +2485 -0
  134. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/200/344/270/211Negative.py +3006 -0
  135. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/200/344/272/214.py +3304 -0
  136. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/200/344/272/2141.py +3015 -0
  137. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/200/344/272/2141Negative.py +3015 -0
  138. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/200/344/272/214Negative.py +3304 -0
  139. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/200/344/272/214/344/270/211.py +2939 -0
  140. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/200/344/272/214/344/270/2111.py +2589 -0
  141. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/200/344/272/214/344/270/2111Negative.py +2589 -0
  142. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/200/344/272/214/344/270/211Negative.py +2939 -0
  143. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/211.py +3899 -0
  144. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/2111.py +2996 -0
  145. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/2111Negative.py +2996 -0
  146. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/211Negative.py +3899 -0
  147. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/272/214.py +3223 -0
  148. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/272/2141.py +3020 -0
  149. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/272/2141Negative.py +3020 -0
  150. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/272/214Negative.py +3223 -0
  151. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/272/214/344/270/211.py +3250 -0
  152. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/272/214/344/270/2111.py +2667 -0
  153. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/272/214/344/270/2111Negative.py +2667 -0
  154. mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/272/214/344/270/211Negative.py +3250 -0
  155. mapFolding/_e/Z0Z_analysisPython/measure.py +162 -0
  156. mapFolding/_e/Z0Z_analysisPython/positionAnalysis.py +403 -0
  157. mapFolding/_e/Z0Z_analysisPython/positionAnalysisPileRanges2d6.py +110 -0
  158. mapFolding/_e/Z0Z_analysisPython/theExcluderBeast.py +640 -0
  159. mapFolding/_e/Z0Z_analysisPython/toolkit.py +166 -0
  160. mapFolding/_e/Z0Z_analysisPython/toolkitCSVsequences.py +188 -0
  161. mapFolding/_e/Z0Z_analysisPython/workBenchPatternFinder.py +284 -0
  162. mapFolding/_e/Z0Z_notes/__init__.py +0 -0
  163. mapFolding/_e/Z0Z_notes/knowledgeDump.py +214 -0
  164. mapFolding/_e/__init__.py +45 -0
  165. mapFolding/_e/_beDRY.py +547 -0
  166. mapFolding/_e/_dataDynamic.py +1164 -0
  167. mapFolding/_e/_measure.py +579 -0
  168. mapFolding/_e/_semiotics.py +363 -0
  169. mapFolding/_e/_theTypes.py +31 -0
  170. mapFolding/_e/algorithms/__init__.py +1 -0
  171. mapFolding/_e/algorithms/constraintPropagation.py +158 -0
  172. mapFolding/_e/algorithms/elimination.py +118 -0
  173. mapFolding/_e/algorithms/eliminationCrease.py +66 -0
  174. mapFolding/_e/algorithms/iff.py +584 -0
  175. mapFolding/_e/basecamp.py +89 -0
  176. mapFolding/_e/dataBaskets.py +123 -0
  177. mapFolding/_e/dataRaw/__init__.py +0 -0
  178. mapFolding/_e/easyRun/__init__.py +0 -0
  179. mapFolding/_e/easyRun/eliminateFolds.py +72 -0
  180. mapFolding/_e/easyRun/pinning.py +62 -0
  181. mapFolding/_e/filters.py +384 -0
  182. mapFolding/_e/pin2/344/270/212nDimensions.py +882 -0
  183. mapFolding/_e/pin2/344/270/212nDimensionsAnnex.py +551 -0
  184. mapFolding/_e/pin2/344/270/212nDimensionsByCrease.py +190 -0
  185. mapFolding/_e/pin2/344/270/212nDimensionsByDomain.py +459 -0
  186. mapFolding/_e/pinIt.py +436 -0
  187. mapFolding/_semiotics.py +42 -0
  188. mapFolding/_theSSOT.py +11 -56
  189. mapFolding/_theTypes.py +52 -67
  190. mapFolding/algorithms/matrixMeandersNumPyndas.py +18 -18
  191. mapFolding/algorithms/oeisIDbyFormula.py +4 -4
  192. mapFolding/algorithms/zCuzDocStoopidoeisIDbyFormula.py +3 -3
  193. mapFolding/basecamp.py +11 -80
  194. mapFolding/beDRY.py +107 -111
  195. mapFolding/dataBaskets.py +0 -56
  196. mapFolding/filesystemToolkit.py +15 -11
  197. mapFolding/oeis.py +17 -16
  198. mapFolding/reference/matrixMeandersAnalysis/prefixNotationNotes.py +2 -2
  199. mapFolding/reference/meandersDumpingGround/matrixMeandersBaselineV2.py +0 -1
  200. mapFolding/reference/meandersDumpingGround/matrixMeandersNumPyV1finalForm.py +8 -10
  201. mapFolding/someAssemblyRequired/RecipeJob.py +5 -5
  202. mapFolding/someAssemblyRequired/makeJobTheorem2Numba.py +5 -2
  203. mapFolding/someAssemblyRequired/makeJobTheorem2codon.py +9 -11
  204. mapFolding/someAssemblyRequired/mapFoldingModules/makeMapFoldingModules.py +2 -1
  205. mapFolding/someAssemblyRequired/transformationTools.py +1 -1
  206. mapFolding/tests/Z0Z_test_e_excluder.py +155 -0
  207. mapFolding/tests/conftest.py +193 -314
  208. mapFolding/tests/dataSamples/A001417.py +455 -0
  209. mapFolding/tests/dataSamples/__init__.py +1 -0
  210. mapFolding/tests/dataSamples/measurementData.py +1818 -0
  211. mapFolding/tests/dataSamples/p2DnDomain3_2_/351/246/226/344/270/200_/351/246/226/351/233/266/344/270/200.py +17 -0
  212. mapFolding/tests/dataSamples/p2DnDomain3_/351/246/226/344/270/200.py +17 -0
  213. mapFolding/tests/dataSamples/p2DnDomain5_4.py +17 -0
  214. mapFolding/tests/dataSamples/p2DnDomain6_5.py +17 -0
  215. mapFolding/tests/dataSamples/p2DnDomain6_7_5_4.py +17 -0
  216. mapFolding/tests/dataSamples/p2DnDomain7_6.py +17 -0
  217. 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
  218. 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
  219. 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
  220. mapFolding/tests/dataSamples/p2DnDomain/351/246/226/351/233/266/344/272/214_/351/246/226/344/272/214.py +15 -0
  221. mapFolding/tests/dataSamples/semioticsData.py +135 -0
  222. mapFolding/tests/test_computations.py +134 -80
  223. mapFolding/tests/test_e_computations.py +42 -0
  224. mapFolding/tests/test_e_dataDynamic.py +189 -0
  225. mapFolding/tests/test_e_measurements.py +257 -0
  226. mapFolding/tests/test_e_pinning.py +61 -0
  227. mapFolding/tests/test_e_semiotics.py +128 -0
  228. mapFolding/tests/test_filesystem.py +39 -17
  229. mapFolding/tests/{test_other.py → test_parameterValidation.py} +3 -3
  230. mapFolding/tests/{test_tasks.py → test_taskDivisions.py} +42 -23
  231. mapFolding/zCuzDocStoopid/makeDocstrings.py +3 -2
  232. {mapfolding-0.17.1.dist-info → mapfolding-0.18.0.dist-info}/METADATA +11 -8
  233. mapfolding-0.18.0.dist-info/RECORD +305 -0
  234. {mapfolding-0.17.1.dist-info → mapfolding-0.18.0.dist-info}/WHEEL +1 -1
  235. easyRun/eliminateFolds.py +0 -60
  236. mapFolding/algorithms/constraintPropagation.py +0 -184
  237. mapFolding/algorithms/elimination.py +0 -131
  238. mapFolding/algorithms/eliminationCount.py +0 -26
  239. mapFolding/algorithms/eliminationPinned.py +0 -35
  240. mapFolding/algorithms/iff.py +0 -206
  241. mapFolding/algorithms/patternFinder.py +0 -280
  242. mapFolding/algorithms/pinning2Dn.py +0 -345
  243. mapFolding/algorithms/pinning2DnAnnex.py +0 -43
  244. mapFolding/tests/verify.py +0 -323
  245. mapfolding-0.17.1.dist-info/RECORD +0 -112
  246. {mapfolding-0.17.1.dist-info → mapfolding-0.18.0.dist-info}/entry_points.txt +0 -0
  247. {mapfolding-0.17.1.dist-info → mapfolding-0.18.0.dist-info}/licenses/LICENSE +0 -0
  248. {mapfolding-0.17.1.dist-info → mapfolding-0.18.0.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  # ruff: noqa
2
2
  from collections import ChainMap
3
- from mapFolding import dictionaryOEIS, dictionaryOEISMapFolding
3
+ from mapFolding import ansiColorReset, ansiColors, dictionaryOEIS, dictionaryOEISMapFolding
4
4
  from mapFolding.basecamp import NOTcountingFolds
5
5
  import sys
6
6
  import time
@@ -11,11 +11,11 @@ if __name__ == '__main__':
11
11
  def _write() -> None:
12
12
  sys.stdout.write(
13
13
  f"{(match:=countTotal == dictionaryONE[oeisID]['valuesKnown'][n])}\t"
14
- f"\033[{(not match)*91}m"
14
+ f"{(ansiColors.YellowOnRed, ansiColors.GreenOnBlack)[match]}"
15
15
  f"{n}\t"
16
16
  f"{countTotal}\t"
17
17
  f"{time.perf_counter() - timeStart:.2f}\t"
18
- "\033[0m\n"
18
+ f"{ansiColorReset}\n"
19
19
  )
20
20
 
21
21
  CPUlimit: bool | float | int | None = -2
@@ -26,14 +26,10 @@ if __name__ == '__main__':
26
26
 
27
27
  flow = 'algorithm'
28
28
  flow = 'theorem2'
29
- flow = 'eliminationParallel'
30
- flow = 'elimination_combi'
31
- flow = 'constraintPropagation'
32
- flow = 'elimination'
33
29
 
34
- sys.stdout.write(f"\033[{30+int(oeisID,11)%8};{40+int(oeisID,12)%8}m{oeisID} ")
35
- sys.stdout.write(f"\033[{31+int(flow,35)%7};{41+int(flow,36)%7}m{flow}")
36
- sys.stdout.write("\033[0m\n")
30
+ sys.stdout.write(f"{ansiColors[int(oeisID,36)%len(ansiColors)]}{oeisID} ")
31
+ sys.stdout.write(f"{ansiColors[int(flow,36)%len(ansiColors)]}{flow}")
32
+ sys.stdout.write(ansiColorReset + '\n')
37
33
 
38
34
  nList: list[int] = []
39
35
  nList.extend(range(7, 11))
@@ -49,6 +45,6 @@ if __name__ == '__main__':
49
45
  _write()
50
46
 
51
47
  r"""
52
- deactivate && C:\apps\mapFolding\.vtail\Scripts\activate.bat && title good && cls
48
+
53
49
  title running && start "working" /B /HIGH /wait py -X faulthandler=0 -X tracemalloc=0 -X frozen_modules=on easyRun\NOTcountingFolds.py & title I'm done
54
50
  """
easyRun/countFolds.py CHANGED
@@ -1,7 +1,8 @@
1
1
  # ruff: noqa
2
2
  # pyright: basic
3
3
  from collections.abc import Sequence
4
- from mapFolding import countFolds, dictionaryOEISMapFolding
4
+ from mapFolding import ansiColorReset, ansiColors, dictionaryOEISMapFolding
5
+ from mapFolding.basecamp import countFolds
5
6
  from os import PathLike
6
7
  from pathlib import PurePath
7
8
  import sys
@@ -11,12 +12,12 @@ if __name__ == '__main__':
11
12
  def _write() -> None:
12
13
  sys.stdout.write(
13
14
  f"{(match:=foldsTotal == dictionaryOEISMapFolding[oeisID]['valuesKnown'][n])}\t"
14
- f"\033[{(not match)*91}m"
15
+ f"{(ansiColors.YellowOnRed, ansiColors.GreenOnBlack)[match]}"
15
16
  f"{n}\t"
16
17
  f"{foldsTotal}\t"
17
18
  f"{dictionaryOEISMapFolding[oeisID]['valuesKnown'][n]}\t"
18
19
  f"{time.perf_counter() - timeStart:.2f}\t"
19
- "\033[0m\n"
20
+ f"{ansiColorReset}\n"
20
21
  )
21
22
 
22
23
  listDimensions: Sequence[int] | None = None
@@ -24,23 +25,23 @@ if __name__ == '__main__':
24
25
  computationDivisions: int | str | None = None
25
26
  CPUlimit: bool | float | int | None = None
26
27
  # mapShape: tuple[int, ...] | None = None
27
- flow = 'daoOfMapFolding'
28
28
  flow = 'numba'
29
29
  flow = 'theorem2'
30
30
  flow = 'theorem2Numba'
31
+ flow = 'daoOfMapFolding'
31
32
 
32
33
  oeisID: str = 'A195646'
34
+ oeisID: str = 'A001416'
33
35
  oeisID: str = 'A001418'
36
+ oeisID: str = 'A001417'
34
37
  oeisID: str = 'A000136'
35
- oeisID: str = 'A001416'
36
38
  oeisID: str = 'A001415'
37
- oeisID: str = 'A001417'
38
39
 
39
- sys.stdout.write(f"\033[{30+int(oeisID,11)%8};{40+int(oeisID,12)%8}m{oeisID} ")
40
- sys.stdout.write(f"\033[{31+int(flow,35)%7};{41+int(flow,36)%7}m{flow}")
41
- sys.stdout.write("\033[0m\n")
40
+ sys.stdout.write(f"{ansiColors[int(oeisID,36)%len(ansiColors)]}{oeisID} ")
41
+ sys.stdout.write(f"{ansiColors[int(flow,36)%len(ansiColors)]}{flow}")
42
+ sys.stdout.write(ansiColorReset + '\n')
42
43
 
43
- for n in range(6,7):
44
+ for n in range(2):
44
45
 
45
46
  mapShape: tuple[int, ...] = dictionaryOEISMapFolding[oeisID]['getMapShape'](n)
46
47
 
easyRun/meanders.py CHANGED
@@ -1,26 +1,24 @@
1
1
  # ruff: noqa
2
2
  # pyright: basic
3
- from mapFolding import dictionaryOEIS
3
+ from mapFolding import ansiColorReset, ansiColors, dictionaryOEIS
4
4
  from mapFolding.basecamp import NOTcountingFolds
5
5
  import gc
6
- import multiprocessing
7
6
  import sys
8
7
  import time
9
8
  import warnings
10
9
 
11
10
  def write() -> None:
12
11
  sys.stdout.write(
13
- f"{(booleanColor:=(countTotal == dictionaryOEIS[oeisID]['valuesKnown'][n]))}\t"
14
- f"\033[{(not booleanColor)*91}m"
12
+ f"{(match:=(countTotal == dictionaryOEIS[oeisID]['valuesKnown'][n]))}\t"
13
+ f"{(ansiColors.YellowOnRed, ansiColors.GreenOnBlack)[match]}"
15
14
  f"{n}\t"
16
15
  # f"{countTotal}\t"
17
16
  # f"{dictionaryOEISMeanders[oeisID]['valuesKnown'][n]}\t"
18
17
  f"{time.perf_counter() - timeStart:.2f}\t"
19
- "\033[0m\n"
18
+ f"{ansiColorReset}\n"
20
19
  )
21
20
 
22
21
  if __name__ == '__main__':
23
- multiprocessing.set_start_method('spawn')
24
22
  if sys.version_info >= (3, 14):
25
23
  warnings.filterwarnings("ignore", category=FutureWarning)
26
24
 
@@ -34,7 +32,7 @@ if __name__ == '__main__':
34
32
  ]:
35
33
  sys.stdout.write(f"\n{oeisID}\n")
36
34
 
37
- """TODO Identifiers. improve
35
+ """# TODO Identifiers. improve
38
36
  "generate up to four targets."
39
37
  1. Adding a new loop.
40
38
  2. Dragging up a loop end.
@@ -63,7 +61,7 @@ if __name__ == '__main__':
63
61
  sys.stdout.write(f"{n} {countTotal} {time.perf_counter() - timeStart:.2f}\n")
64
62
 
65
63
  r"""
66
- deactivate && C:\apps\mapFolding\.vtail\Scripts\activate.bat && title good && cls
64
+
67
65
  title running && start "meanders" /B /HIGH /wait py -X faulthandler=0 -X tracemalloc=0 -X frozen_modules=on easyRun\meanders.py && title I'm done || title Error
68
66
 
69
67
  """
mapFolding/__init__.py CHANGED
@@ -1,50 +1,38 @@
1
1
  """Map folding, meanders, stamp folding, semi-meanders. Experiment with algorithm transformations, and analyze computational states."""
2
2
 
3
+ # isort: split
4
+ from mapFolding._semiotics import (
5
+ ansiColorReset as ansiColorReset, ansiColors as ansiColors, decreasing as decreasing, inclusive as inclusive,
6
+ zeroIndexed as zeroIndexed)
7
+
8
+ # isort: split
3
9
  from mapFolding._theTypes import (
4
- Array1DElephino as Array1DElephino,
5
- Array1DFoldsTotal as Array1DFoldsTotal,
6
- Array1DLeavesTotal as Array1DLeavesTotal,
7
- Array2DLeavesTotal as Array2DLeavesTotal,
8
- Array3DLeavesTotal as Array3DLeavesTotal,
9
- axisOfLength as axisOfLength,
10
- DatatypeElephino as DatatypeElephino,
11
- DatatypeFoldsTotal as DatatypeFoldsTotal,
12
- DatatypeLeavesTotal as DatatypeLeavesTotal,
13
- MetadataOEISid as MetadataOEISid,
14
- MetadataOEISidManuallySet as MetadataOEISidManuallySet,
15
- MetadataOEISidMapFolding as MetadataOEISidMapFolding,
16
- MetadataOEISidMapFoldingManuallySet as MetadataOEISidMapFoldingManuallySet,
17
- NumPyElephino as NumPyElephino,
18
- NumPyFoldsTotal as NumPyFoldsTotal,
19
- NumPyIntegerType as NumPyIntegerType,
20
- NumPyLeavesTotal as NumPyLeavesTotal,
21
- ShapeArray as ShapeArray,
22
- ShapeSlicer as ShapeSlicer)
10
+ Array1DElephino as Array1DElephino, Array1DFoldsTotal as Array1DFoldsTotal, Array1DLeavesTotal as Array1DLeavesTotal,
11
+ Array2DLeavesTotal as Array2DLeavesTotal, Array3DLeavesTotal as Array3DLeavesTotal, axisOfLength as axisOfLength,
12
+ DatatypeElephino as DatatypeElephino, DatatypeFoldsTotal as DatatypeFoldsTotal,
13
+ DatatypeLeavesTotal as DatatypeLeavesTotal, MetadataOEISid as MetadataOEISid,
14
+ MetadataOEISidManuallySet as MetadataOEISidManuallySet, MetadataOEISidMapFolding as MetadataOEISidMapFolding,
15
+ MetadataOEISidMapFoldingManuallySet as MetadataOEISidMapFoldingManuallySet, NumPyElephino as NumPyElephino,
16
+ NumPyFoldsTotal as NumPyFoldsTotal, NumPyIntegerType as NumPyIntegerType, NumPyLeavesTotal as NumPyLeavesTotal,
17
+ ShapeArray as ShapeArray, ShapeSlicer as ShapeSlicer)
23
18
 
19
+ # isort: split
24
20
  from mapFolding._theSSOT import packageSettings as packageSettings
25
21
 
22
+ # isort: split
26
23
  from mapFolding.beDRY import (
27
- exclude as exclude,
28
- getConnectionGraph as getConnectionGraph,
29
- getLeavesTotal as getLeavesTotal,
30
- getTaskDivisions as getTaskDivisions,
31
- makeDataContainer as makeDataContainer,
32
- setProcessorLimit as setProcessorLimit,
24
+ defineProcessorLimit as defineProcessorLimit, getConnectionGraph as getConnectionGraph,
25
+ getLeavesTotal as getLeavesTotal, getTaskDivisions as getTaskDivisions, makeDataContainer as makeDataContainer,
33
26
  validateListDimensions as validateListDimensions)
34
27
 
28
+ # isort: split
35
29
  from mapFolding.filesystemToolkit import (
36
- getFilenameFoldsTotal as getFilenameFoldsTotal,
37
- getPathFilenameFoldsTotal as getPathFilenameFoldsTotal,
38
- getPathRootJobDEFAULT as getPathRootJobDEFAULT,
39
- saveFoldsTotal as saveFoldsTotal,
30
+ getFilenameFoldsTotal as getFilenameFoldsTotal, getPathFilenameFoldsTotal as getPathFilenameFoldsTotal,
31
+ getPathRootJobDEFAULT as getPathRootJobDEFAULT, saveFoldsTotal as saveFoldsTotal,
40
32
  saveFoldsTotalFAILearly as saveFoldsTotalFAILearly)
41
33
 
42
- from mapFolding.basecamp import countFolds as countFolds, eliminateFolds as eliminateFolds
43
-
34
+ # isort: split
44
35
  from mapFolding.oeis import (
45
- dictionaryOEIS as dictionaryOEIS,
46
- dictionaryOEISMapFolding as dictionaryOEISMapFolding,
47
- getFoldsTotalKnown as getFoldsTotalKnown,
48
- getOEISids as getOEISids,
49
- OEIS_for_n as OEIS_for_n,
36
+ dictionaryOEIS as dictionaryOEIS, dictionaryOEISMapFolding as dictionaryOEISMapFolding,
37
+ getFoldsTotalKnown as getFoldsTotalKnown, getOEISids as getOEISids, OEIS_for_n as OEIS_for_n,
50
38
  oeisIDfor_n as oeisIDfor_n)
@@ -0,0 +1,189 @@
1
+ # ruff: noqa
2
+ from cytoolz.dicttoolz import valfilter
3
+ from functools import cache
4
+ from gmpy2 import bit_flip, bit_mask, bit_test, is_even
5
+ from hunterMakesPy import raiseIfNone
6
+ from mapFolding import decreasing
7
+ from mapFolding._e import dimensionNearestTail, dimensionNearest首, howManyDimensionsHaveOddParity, leafOrigin, 零
8
+ from mapFolding._e.algorithms.iff import getCreasePost, ImaOddLeaf
9
+ from mapFolding._e.dataBaskets import EliminationState
10
+ from math import log2, prod
11
+ from pprint import pprint
12
+
13
+ def getDictionaryAddends4Next(state: EliminationState) -> dict[int, list[int]]:
14
+ @cache
15
+ def workhorse(mapShape: tuple[int, ...], dimensionsTotal: int, leavesTotal: int) -> dict[int, list[int]]:
16
+ dictionaryAddends: dict[int, list[int]] = {leafOrigin: [1]}
17
+
18
+ productsOfDimensions: list[int] = [prod(mapShape[0:dimension], start=1) for dimension in range(dimensionsTotal)]
19
+
20
+ for leaf in range(零, leavesTotal):
21
+ products下_leaf: list[int] = productsOfDimensions.copy()
22
+
23
+ theMaskOfDirectionality = bit_mask(leavesTotal - 零) & leaf
24
+ for index in range(dimensionsTotal):
25
+ if bit_test(theMaskOfDirectionality, index):
26
+ products下_leaf[index] *= -1
27
+
28
+ slicingIndexStart: int = howManyDimensionsHaveOddParity(leaf) & 1 ^ 1
29
+ slicingIndexEnd = dimensionNearest首(leaf) * (slicingIndexStart ^ 1) or None
30
+
31
+ if (slicingIndexStart == 1) and is_even(leaf):
32
+ slicingIndexStart += dimensionNearestTail(leaf)
33
+
34
+ products下_leaf = products下_leaf[slicingIndexStart:None]
35
+ products下_leaf = products下_leaf[0:slicingIndexEnd]
36
+ dictionaryAddends[leaf] = products下_leaf
37
+
38
+ return dictionaryAddends
39
+ return workhorse(state.mapShape, state.dimensionsTotal, state.leavesTotal)
40
+
41
+ def getDictionaryAddends4Prior(state: EliminationState) -> dict[int, list[int]]:
42
+ @cache
43
+ def workhorse(mapShape: tuple[int, ...], dimensionsTotal: int, leavesTotal: int) -> dict[int, list[int]]:
44
+ dictionaryAddends: dict[int, list[int]] = {leafOrigin: [], 零: [-1]}
45
+
46
+ productsOfDimensions: list[int] = [prod(mapShape[0:dimension], start=1) for dimension in range(dimensionsTotal)]
47
+
48
+ for leaf in range(leavesTotal + decreasing, 1, decreasing):
49
+ products下_leaf: list[int] = productsOfDimensions.copy()
50
+
51
+ theMaskOfDirectionality = bit_mask(leavesTotal - 零) & leaf
52
+ for index in range(dimensionsTotal):
53
+ if bit_test(theMaskOfDirectionality, index):
54
+ products下_leaf[index] *= -1
55
+
56
+ slicingIndexStart: int = howManyDimensionsHaveOddParity(leaf) & 1
57
+ slicingIndexEnd = dimensionNearest首(leaf) * (slicingIndexStart ^ 1) or None
58
+
59
+ if (slicingIndexStart == 1) and is_even(leaf):
60
+ slicingIndexStart += dimensionNearestTail(leaf)
61
+
62
+ products下_leaf = products下_leaf[slicingIndexStart:None]
63
+ products下_leaf = products下_leaf[0:slicingIndexEnd]
64
+ dictionaryAddends[leaf] = products下_leaf
65
+
66
+ return dictionaryAddends
67
+ return workhorse(state.mapShape, state.dimensionsTotal, state.leavesTotal)
68
+
69
+ if __name__ == '__main__':
70
+ state = EliminationState((2,) * 5)
71
+
72
+ dictionaryAddends4Next: dict[int, list[int]] = getDictionaryAddends4Next(state)
73
+ dictionaryAddends4Prior: dict[int, list[int]] = getDictionaryAddends4Prior(state)
74
+
75
+ printThis = False
76
+
77
+ for leaf in range(state.leavesTotal):
78
+ dictionaryNextCreaseLeafV0: dict[int, int | None] = {dimension: getCreasePost(state.mapShape, leaf, dimension) for dimension in range(state.dimensionsTotal)}
79
+ listAddendLeaves = sorted([leaf + addend for addend in dictionaryAddends4Next[leaf]])
80
+ if printThis:
81
+ print(leaf, end='\t')
82
+ print(leaf)
83
+ for indexAddend, leafW in enumerate(listAddendLeaves):
84
+ if leafW > leaf:
85
+ # NOTE parity of leaf is ALWAYS even on this branch
86
+ # continue
87
+ dimension = next(dim for dim, creaseLeaf in dictionaryNextCreaseLeafV0.items() if creaseLeaf == leafW)
88
+ if printThis:
89
+ print(ImaOddLeaf(state.mapShape, leaf, dimension), end='\t')
90
+ print(leafW in dictionaryNextCreaseLeafV0.values(), end='\t')
91
+ print('\t', indexAddend, leafW, dictionaryNextCreaseLeafV0, len(listAddendLeaves), listAddendLeaves, leafW==dictionaryNextCreaseLeafV0[indexAddend+1 + (state.dimensionsTotal - 1 - len(listAddendLeaves))])
92
+ else:
93
+ # NOTE parity of leaf is ALWAYS odd on this branch
94
+ # holy fuck, I've had all of this data for weeks but didn't realize it was huge.
95
+ # continue
96
+ dictionaryNextCreaseLeafW: dict[int, int | None] = {dimension: getCreasePost(state.mapShape, leafW, dimension) for dimension in range(state.dimensionsTotal)}
97
+ dimension = next(dim for dim, creaseLeaf in dictionaryNextCreaseLeafW.items() if creaseLeaf == leaf)
98
+ if printThis:
99
+ print(ImaOddLeaf(state.mapShape, leaf, dimension), end='\t')
100
+ print(leaf in dictionaryNextCreaseLeafW.values(), end='\t')
101
+
102
+ if printThis:
103
+ print()
104
+
105
+ printThis = False
106
+
107
+ dictionaryListNextCreaseLeaf: dict[int, list[int | None]] = {leaf: [] for leaf in range(state.leavesTotal)}
108
+ dictionaryNextCreaseLeaf: dict[int, dict[int, int | None]] = {leaf: {} for leaf in range(state.leavesTotal)}
109
+ for leaf in range(state.leavesTotal):
110
+ dictionaryListNextCreaseLeaf[leaf] = list(dictionaryNextCreaseLeaf[leaf].values())
111
+ dictionaryNextCreaseLeaf[leaf] = {dimension: getCreasePost(state.mapShape, leaf, dimension) for dimension in range(state.dimensionsTotal)}
112
+ dictionaryNextCreaseLeaf[leaf] = valfilter(bool, dictionaryNextCreaseLeaf[leaf])
113
+ listLeavesNextAndPriorInSequence = valfilter(lambda flipped: flipped > leaf, {dimension: bit_flip(leaf, dimension) for dimension in range(state.dimensionsTotal)})
114
+ if printThis:
115
+ print(leaf, len(dictionaryNextCreaseLeaf[leaf]), dictionaryNextCreaseLeaf[leaf], dictionaryNextCreaseLeaf[leaf] == listLeavesNextAndPriorInSequence, sep='\t')
116
+
117
+ printThis = False
118
+
119
+ for leaf in range(state.leavesTotal):
120
+ listAddendLeaves = [leaf + addend for addend in dictionaryAddends4Next[leaf]]
121
+ listAddendPriorLeaves = [leaf + addend for addend in dictionaryAddends4Prior[leaf]]
122
+ list1 = list(dict.fromkeys([*listAddendLeaves, *listAddendPriorLeaves]))
123
+ if len(list1) < state.dimensionsTotal and 0 < leaf:
124
+ index = int(log2(leaf))
125
+ list1.insert(index, 0)
126
+
127
+ listLeavesNextAndPriorInSequence = [int(bit_flip(leaf, dimension)) for dimension in range(state.dimensionsTotal)]
128
+
129
+ if leaf == leafOrigin:
130
+ listLeavesNext = [1]
131
+ listLeavesPrior = []
132
+ else:
133
+ slicingIndexStart: int = howManyDimensionsHaveOddParity(leaf) & 1 ^ 1
134
+ slicingIndexEnd = dimensionNearest首(leaf) * (slicingIndexStart ^ 1) or None
135
+
136
+ if (slicingIndexStart == 1) and is_even(leaf):
137
+ slicingIndexStart += dimensionNearestTail(leaf)
138
+ listLeavesNext = listLeavesNextAndPriorInSequence[slicingIndexStart: slicingIndexEnd]
139
+
140
+ slicingIndexStart = howManyDimensionsHaveOddParity(leaf) & 1
141
+ slicingIndexEnd = dimensionNearest首(leaf) * (slicingIndexStart ^ 1) or None
142
+
143
+ if (slicingIndexStart == 1) and is_even(leaf):
144
+ slicingIndexStart += dimensionNearestTail(leaf)
145
+ listLeavesPrior = listLeavesNextAndPriorInSequence[slicingIndexStart: slicingIndexEnd]
146
+
147
+ if leaf == 1:
148
+ listLeavesPrior = [0]
149
+
150
+ if printThis:
151
+ print(leaf, listAddendLeaves==listLeavesNext, listAddendPriorLeaves==listLeavesPrior, listLeavesNextAndPriorInSequence, sep='\t', end='\n')
152
+ else:
153
+ if printThis:
154
+ print(leaf, leaf.bit_count() - 1 & 1, dimensionNearestTail(leaf), sep='\t', end='\n')
155
+ print(leaf, listAddendLeaves, listAddendPriorLeaves, listLeavesNextAndPriorInSequence, sep='\n', end='\n\n')
156
+ print(leaf, listLeavesNextAndPriorInSequence, sorted(list1) == sorted(listLeavesNextAndPriorInSequence), sep='\t', end='\n')
157
+ print(leaf, list1, listLeavesNextAndPriorInSequence, sorted(list1), sorted(listLeavesNextAndPriorInSequence), sep='\n', end='\n\n')
158
+
159
+ printThis = False
160
+
161
+ creasesByDimension: dict[int, list[tuple[int, int]]] = {dimension: [] for dimension in range(state.dimensionsTotal)}
162
+ for dimension in range(state.dimensionsTotal):
163
+ for leaf in range(state.leavesTotal):
164
+ leafW = dictionaryNextCreaseLeaf[leaf].get(dimension)
165
+ if leafW is not None:
166
+ creasesByDimension[dimension].append((leaf, leafW))
167
+ if printThis:
168
+ pprint(creasesByDimension, width=140, compact=True)
169
+
170
+ printThis = False
171
+
172
+ for qq, ww in dictionaryListNextCreaseLeaf.items():
173
+ if printThis:
174
+ print(qq, *ww, sep='\t')
175
+
176
+ printThis = True
177
+
178
+ for leaf, dd in dictionaryNextCreaseLeaf.items():
179
+ tt = True
180
+ if printThis:
181
+ print(leaf, len(dd), sep='\t', end='\t')
182
+ for nn in dd.values():
183
+ qq = dictionaryNextCreaseLeaf[raiseIfNone(nn)]
184
+ tt &= len(dd) == 1+ len(qq)
185
+ if printThis:
186
+ print(len(qq), end='\t')
187
+ if printThis:
188
+ print(bool(tt))
189
+
@@ -0,0 +1,143 @@
1
+ # pyright: basic
2
+ # ruff: noqa
3
+ from functools import partial
4
+ from itertools import pairwise, permutations, product as CartesianProduct
5
+ from pathlib import Path
6
+ from pprint import pprint
7
+ from toolz import compose
8
+ import numpy
9
+ import pickle
10
+
11
+ fileStem = "p2d4"
12
+ pathFilename: Path = Path(f"/apps/mapFolding/Z0Z_notes/{fileStem}.csv")
13
+
14
+ headerLength = 182
15
+ headerLength = 86
16
+ headerLength = 38
17
+ data2Dn: str = pathFilename.read_text(encoding="utf-8")[headerLength:None]
18
+
19
+ def parseLineToIntegers(textLine: str) -> list[int]:
20
+ return [int(numberText) for numberText in textLine.strip().split(",")]
21
+
22
+ listFoldings2Dn: list[list[int]] = []
23
+
24
+ for textLine in data2Dn.splitlines():
25
+ sequenceIntegers = parseLineToIntegers(textLine)
26
+ listFoldings2Dn.append(sequenceIntegers)
27
+
28
+ arrayFoldings2Dn = numpy.array(listFoldings2Dn, dtype=numpy.uint8)
29
+
30
+ pathFilename.with_name(f'listFoldings{fileStem}.pkl').write_bytes(pickle.dumps(listFoldings2Dn))
31
+ pathFilename.with_name(f'arrayFoldings{fileStem}.pkl').write_bytes(pickle.dumps(arrayFoldings2Dn))
32
+
33
+ dictionaryDifferencesReverse: dict[int, list[int]] = {}
34
+
35
+ for rowIndex in range(arrayFoldings2Dn.shape[0]):
36
+ for columnIndex in range(1, arrayFoldings2Dn.shape[1]):
37
+ valueOriginal = int(arrayFoldings2Dn[rowIndex, columnIndex])
38
+ valueLeft = int(arrayFoldings2Dn[rowIndex, columnIndex - 1])
39
+ differenceToLeft = valueLeft - valueOriginal
40
+
41
+ if valueOriginal not in dictionaryDifferencesReverse:
42
+ dictionaryDifferencesReverse[valueOriginal] = []
43
+
44
+ if differenceToLeft not in dictionaryDifferencesReverse[valueOriginal]:
45
+ dictionaryDifferencesReverse[valueOriginal].append(differenceToLeft)
46
+
47
+ for valueOriginal in dictionaryDifferencesReverse:
48
+ dictionaryDifferencesReverse[valueOriginal].sort(key=abs)
49
+
50
+
51
+ pprint(dictionaryDifferencesReverse)
52
+
53
+ l5 = listLeft = [8] + [8, 16] + [2]
54
+ r4 = listRight = [8] + [8, 16]
55
+
56
+ l6 = listLeft = [8] + [8, 16] # 2,6 is on the list of 3,2.
57
+ # However, to concatenate leafLeft,3,2,6 with 2,6,7,leafRight, leafLeft+4 == leafRight ,1,3,2,6,7,5, ,11,3,2,6,7,15, ,19,3,2,6,7,23, ,35,3,2,6,7,39,
58
+ r7 = listRight = [8] + [8, 16] + [-2]
59
+ # 7: [-2, -4, 8, 16, 32],
60
+ l=6; r=7
61
+
62
+ l8 = listLeft = [1] + [1, 2]
63
+ r40 = listRight = [1] + [1, 2] + [16]
64
+
65
+ l16 = listLeft = [1] + [1, 2, 4]
66
+ r48 = listRight = [1] + [1, 2, 4] + [-16] # 48 > 16
67
+
68
+ l56 = listLeft = [1] + [1, 2] + [-16]
69
+ r24 = listRight = [1] + [1, 2] #24,16 is on the list of 8,40.
70
+
71
+ l9 = listLeft = [16] + [16] + [2]
72
+ r8 = listRight = [16] + [16]
73
+ l=9; r=8
74
+
75
+ l52 = listLeft = [1] + [1] + [-16]
76
+ r20 = listRight = [1] + [1]
77
+ # NOTE appends, below.
78
+ l=52; r=20
79
+ # 16, 21, 22, 28
80
+ # 36, 53, 54, 60
81
+
82
+ l4 = listLeft = [1] + [1]
83
+ r36 = listRight = [1] + [1] + [16]
84
+ l=4; r=36
85
+ # 37, 38, 32, 44, 52
86
+ # +1, +2, -4, +8, +16
87
+
88
+ l10 = listLeft = [16] + [16]
89
+ r11 = listRight = [16] + [16] + [-2]
90
+ # NOTE appends, below.
91
+ l=10; r=11
92
+ # 9, 15, 3, 27, 43
93
+ # -2, +4, -8, +16, +32
94
+
95
+ l3 = listLeft = [4] + [4, 8, 16] + [-2] # 3 > 2
96
+ r2 = listRight = [4] + [4, 8, 16]
97
+ l=3; r=2
98
+
99
+ ll = []
100
+ for index in range(1, len(listLeft)):
101
+ ll.append(l + sum(listLeft[0:index]))
102
+ rr = []
103
+ for index in range(1, len(listRight)):
104
+ rr.append(r + sum(listRight[0:index]))
105
+
106
+ if l > r:
107
+ ll.append(l + listLeft[-1])
108
+ rr.append(r + sum(listRight[0:None]))
109
+ else:
110
+ ll.append(l + sum(listLeft[0:None]))
111
+ rr.append(r + listRight[-1])
112
+
113
+ if (l == 4) and (r == 36): # NOTE idk.
114
+ rr.append(44)
115
+
116
+ if (l == 6) and (r == 7): # 2,6 is on the list of 3,2.
117
+ ll.append(2)
118
+
119
+ if (l == 9) and (r == 8): # NOTE I can't explain 13. 9+4=13.
120
+ ll.append(13)
121
+
122
+ if (l == 10) and (r == 11): # NOTE similar to 9,8.
123
+ rr.append(15) # An additional, stand-alone +4. 11+4=15.
124
+ ll.append(14) # An additional, stand-alone +4. 10+4=14.
125
+ ll.append(2) # 2,10 is on the list of 3,2.
126
+
127
+ if (l == 52) and (r == 20): # 20,16 is on the list of 16,48.
128
+ rr.append(16)
129
+ rr.append(28)
130
+ ll.append(60)
131
+
132
+ if (l == 56) and (r == 24): # 24,16 is on the list of 16,48.
133
+ rr.append(16)
134
+
135
+ # infix: str = f",{l},{r}"
136
+ # total = 0
137
+ # for left, right in CartesianProduct(ll, rr):
138
+ # this: str = f",{left}{infix},{right},"
139
+ # count = data2Dn.count(this)
140
+ # total += count
141
+ # print(f"{count}\t{this}")
142
+
143
+ # print(total)
@@ -0,0 +1,4 @@
1
+ """Analysis tools written in Python to help develop the "elimination" algorithms.
2
+
3
+ These are not intended for long-term use. If a function evolves into something I want to keep, I should find a better home for it.
4
+ """