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
@@ -0,0 +1,89 @@
1
+ # ruff: noqa: E701
2
+ from mapFolding import (
3
+ defineProcessorLimit, getPathFilenameFoldsTotal, packageSettings, saveFoldsTotal, saveFoldsTotalFAILearly)
4
+ from mapFolding._e import mapShapeIs2上nDimensions
5
+ from mapFolding._e.dataBaskets import EliminationState
6
+ from os import PathLike
7
+ from pathlib import Path, PurePath
8
+
9
+ def eliminateFolds(mapShape: tuple[int, ...] | None = None
10
+ , state: EliminationState | None = None
11
+ , pathLikeWriteFoldsTotal: PathLike[str] | PurePath | None = None
12
+ # , * # TODO improve `standardizedEqualToCallableReturn` so it will work with keyword arguments
13
+ , CPUlimit: bool | float | int | None = None # noqa: FBT001
14
+ , flow: str | None = None
15
+ ) -> int:
16
+ """
17
+ Compute foldsTotal by elimination.
18
+
19
+ Parameters
20
+ ----------
21
+ mapShape : tuple[int, ...] | None = None
22
+ Tuple of integers representing the dimensions of the map to be folded. Mathematicians almost always use the term
23
+ "dimensions", such as in the seminal paper, "Multi-dimensional map-folding". Nevertheless, in contemporary Python
24
+ programming, in the context of these algorithms, the term "shape" makes it much easier to align the mathematics with the
25
+ syntax of the programming language.
26
+ pathLikeWriteFoldsTotal : PathLike[str] | PurePath | None = None
27
+ A filename, a path of only directories, or a path with directories and a filename to which `countFolds` will write the
28
+ value of `foldsTotal`. If `pathLikeWriteFoldsTotal` is a path of only directories, `countFolds` creates a filename based
29
+ on the map dimensions.
30
+ CPUlimit : bool | float | int | None = None
31
+ If relevant, whether and how to limit the number of processors `countFolds` will use.
32
+ - `False`, `None`, or `0`: No limits on processor usage; uses all available processors. All other values will
33
+ potentially limit processor usage.
34
+ - `True`: Yes, limit the processor usage; limits to 1 processor.
35
+ - `int >= 1`: The maximum number of available processors to use.
36
+ - `0 < float < 1`: The maximum number of processors to use expressed as a fraction of available processors.
37
+ - `-1 < float < 0`: The number of processors to *not* use expressed as a fraction of available processors.
38
+ - `int <= -1`: The number of available processors to *not* use.
39
+ - If the value of `CPUlimit` is a `float` greater than 1 or less than -1, `countFolds` truncates the value to an `int`
40
+ with the same sign as the `float`.
41
+ flow : str | None = None
42
+ My stupid way of selecting the version of the algorithm to use in the computation.
43
+
44
+ Returns
45
+ -------
46
+ foldsTotal : int
47
+ Number of distinct ways to fold a map of the given dimensions.
48
+ """
49
+ #-------- state ---------------------------------------------------------------------
50
+ if not state:
51
+ if not mapShape:
52
+ message: str = (f"""I received these values:
53
+ `{mapShape = }` and `{state = }`,
54
+ but I was unable to select a map of which to count the folds."""
55
+ )
56
+ raise ValueError(message)
57
+ state = EliminationState(mapShape)
58
+
59
+ #-------- concurrency limit -----------------------------------------------------
60
+
61
+ concurrencyLimit: int = defineProcessorLimit(CPUlimit, packageSettings.concurrencyPackage)
62
+
63
+ #-------- memorialization instructions ---------------------------------------------
64
+
65
+ if pathLikeWriteFoldsTotal is not None:
66
+ pathFilenameFoldsTotal: Path | None = getPathFilenameFoldsTotal(state.mapShape, pathLikeWriteFoldsTotal)
67
+ saveFoldsTotalFAILearly(pathFilenameFoldsTotal)
68
+ else:
69
+ pathFilenameFoldsTotal = None
70
+
71
+ #-------- Algorithm version -----------------------------------------------------
72
+ match flow:
73
+ case 'constraintPropagation': from mapFolding._e.algorithms.constraintPropagation import doTheNeedful # noqa: PLC0415
74
+ case 'crease':
75
+ if mapShapeIs2上nDimensions(state.mapShape, youMustBeDimensionsTallToPinThis=4):
76
+ from mapFolding._e.algorithms.eliminationCrease import doTheNeedful # noqa: PLC0415
77
+ else:
78
+ message: str = "As of 25 December 2025, this algorithm only works on mapShape = (2,) * n, n >= 4. Did I forget to update this barrier?"
79
+ raise NotImplementedError(message)
80
+ case 'elimination' | _: from mapFolding._e.algorithms.elimination import doTheNeedful # noqa: PLC0415
81
+
82
+ state = doTheNeedful(state, concurrencyLimit)
83
+
84
+ #-------- Follow memorialization instructions ---------------------------------------------
85
+
86
+ if pathFilenameFoldsTotal is not None:
87
+ saveFoldsTotal(pathFilenameFoldsTotal, state.foldsTotal)
88
+
89
+ return state.foldsTotal
@@ -0,0 +1,123 @@
1
+ """Use data baskets to easily move data, including values that affect computations: don't limit yourself to one data basket per algorithm."""
2
+ from mapFolding import getLeavesTotal
3
+ from mapFolding._e import (
4
+ Folding, getProductsOfDimensions, getSumsOfProductsOfDimensions, getSumsOfProductsOfDimensionsNearest首, Leaf,
5
+ LeafOrPileRangeOfLeaves, PermutationSpace, Pile)
6
+ from math import prod
7
+ import dataclasses
8
+
9
+ @dataclasses.dataclass(slots=True)
10
+ class EliminationState:
11
+ """Computational state for algorithms that compute `foldsTotal` by elimination.
12
+
13
+ This data basket stores both mutable workbench fields (which change during the search) and
14
+ precomputed constants derived from `mapShape` (which do not change after `__post_init__`).
15
+
16
+ Attributes
17
+ ----------
18
+ mapShape : tuple[int, ...]
19
+ Dimension lengths of the map being analyzed.
20
+ groupsOfFolds : int = 0
21
+ Count of distinct `Folding` pattern groups found so far.
22
+ listFolding : list[`Folding`]
23
+ List of `Folding` patterns found.
24
+ listPermutationSpace : list[`PermutationSpace`]
25
+ List of exclusive `PermutationSpace` dictionaries.
26
+ pile : `Pile` = -1
27
+ The current `pile` on the workbench.
28
+ permutationSpace : `PermutationSpace`
29
+ The current `PermutationSpace` dictionary on the workbench.
30
+ Theorem2Multiplier : int = 1
31
+ Multiplier applied by Theorem 2 optimizations.
32
+ Theorem3Multiplier : int = 1
33
+ Multiplier applied by Theorem 3 optimizations.
34
+ Theorem4Multiplier : int = 1
35
+ Multiplier applied by Theorem 4 optimizations.
36
+ dimensionsTotal : int
37
+ Unchanging total number of axes in `mapShape`.
38
+ foldingCheckSum : int
39
+ Unchanging triangular-number check-sum for a valid `Folding`.
40
+ leafLast : `Leaf`
41
+ Unchanging 0-indexed largest `leaf` value.
42
+ leavesTotal : int
43
+ Unchanging total number of leaves in the map.
44
+ pileLast : `Pile`
45
+ Unchanging 0-indexed largest `pile` value.
46
+ pilesTotal : int
47
+ Unchanging total number of piles in the map.
48
+ productsOfDimensions : tuple[int, ...]
49
+ Unchanging products of dimension lengths, from the empty product through all dimensions.
50
+ sumsOfProductsOfDimensions : tuple[int, ...]
51
+ Unchanging sums of `productsOfDimensions` from the head.
52
+ sumsOfProductsOfDimensionsNearest首 : tuple[int, ...]
53
+ Unchanging sums of `productsOfDimensions` from the head `首`.
54
+ 首 : int
55
+ Unchanging single-base positional-numeral value of the first out-of-bounds Cartesian coordinate.
56
+
57
+ Notes
58
+ -----
59
+ The computed `foldsTotal` is `groupsOfFolds * leavesTotal * Theorem2Multiplier * Theorem3Multiplier * Theorem4Multiplier`.
60
+
61
+ """
62
+
63
+ mapShape: tuple[int, ...] = dataclasses.field(init=True)
64
+ """Dimensions of the map being analyzed for folding patterns."""
65
+
66
+ groupsOfFolds: int = 0
67
+ """`foldsTotal` is divisible by `leavesTotal`; the algorithm counts each `Folding` that represents a group of `leavesTotal`-many foldings."""
68
+
69
+ listFolding: list[Folding] = dataclasses.field(default_factory=list[Folding], init=True)
70
+ """A list of `Folding` patterns found."""
71
+ listPermutationSpace: list[PermutationSpace] = dataclasses.field(default_factory=list[PermutationSpace], init=True)
72
+ """A list of dictionaries (`{pile: leaf or possible leaves}`) that each define an exclusive permutation space: no overlap between dictionaries."""
73
+
74
+ pile: Pile = -1
75
+ """The `pile` on the workbench."""
76
+ permutationSpace: PermutationSpace = dataclasses.field(default_factory=dict[Pile, LeafOrPileRangeOfLeaves], init=True)
77
+ """The `permutationSpace` dictionary (`{pile: leaf or possible leaves}`) on the workbench."""
78
+
79
+ Theorem2aMultiplier: int = 1
80
+ Theorem2Multiplier: int = 1
81
+ Theorem3Multiplier: int = 1
82
+ Theorem4Multiplier: int = 1
83
+
84
+ dimensionsTotal: int = dataclasses.field(init=False)
85
+ """Unchanging total number of dimensions in the map."""
86
+ foldingCheckSum: int = dataclasses.field(init=False)
87
+ """Unchanging triangular number check-sum for a valid `Folding`."""
88
+ leafLast: Leaf = dataclasses.field(init=False)
89
+ """Unchanging 0-indexed largest `leaf` in a `Folding`."""
90
+ leavesTotal: int = dataclasses.field(init=False)
91
+ """Unchanging total number of leaves in the map."""
92
+ pileLast: Pile = dataclasses.field(init=False)
93
+ """Unchanging 0-indexed final `pile` in a `Folding`."""
94
+ pilesTotal: int = dataclasses.field(init=False)
95
+ """Unchanging total number of piles in the map."""
96
+ productsOfDimensions: tuple[int, ...] = dataclasses.field(init=False)
97
+ """Unchanging list of products of map dimensions from the product of no dimensions, `[0]`, to the product of all dimensions, `[dimensionsTotal + inclusive]`."""
98
+ sumsOfProductsOfDimensions: tuple[int, ...] = dataclasses.field(init=False)
99
+ """Unchanging list of sums of products of map dimensions from the sum of no products, `[0]`, to the sum of all products, `[len(productsOfDimensions) + inclusive]`."""
100
+ sumsOfProductsOfDimensionsNearest首: tuple[int, ...] = dataclasses.field(init=False)
101
+ """Unchanging list of sums of products of map dimensions starting from the head `首`, from the sum of no products, `[0]`, to the sum of all products, `[len(productsOfDimensions) + inclusive]`."""
102
+ 首: int = dataclasses.field(init=False)
103
+ """Unchanging single-base positional-numeral value of the Cartesian coordinates that are the first to be _out-of-bounds_ for the `mapShape`."""
104
+
105
+ @property
106
+ def foldsTotal(self) -> int:
107
+ """The computed number of distinct `Folding` patterns for this `mapShape`."""
108
+ return prod((self.groupsOfFolds, self.Theorem2aMultiplier, self.Theorem2Multiplier, self.Theorem3Multiplier, self.Theorem4Multiplier))
109
+
110
+ def __post_init__(self) -> None:
111
+ """One-time computation of unchanging values."""
112
+ self.dimensionsTotal = len(self.mapShape)
113
+ self.leavesTotal = getLeavesTotal(self.mapShape)
114
+ if 0 < self.leavesTotal:
115
+ self.Theorem2aMultiplier = self.leavesTotal
116
+ self.leafLast = self.leavesTotal - 1
117
+ self.foldingCheckSum = self.leafLast * self.leavesTotal // 2 # https://en.wikipedia.org/wiki/Triangular_number
118
+ self.pilesTotal = self.leavesTotal
119
+ self.pileLast = self.pilesTotal - 1
120
+ self.首 = self.leavesTotal
121
+ self.productsOfDimensions = getProductsOfDimensions(self.mapShape)
122
+ self.sumsOfProductsOfDimensions = getSumsOfProductsOfDimensions(self.mapShape)
123
+ self.sumsOfProductsOfDimensionsNearest首 = getSumsOfProductsOfDimensionsNearest首(self.productsOfDimensions, self.dimensionsTotal, self.dimensionsTotal)
File without changes
File without changes
@@ -0,0 +1,72 @@
1
+ # ruff: noqa
2
+ # pyright: basic
3
+ from functools import partial
4
+ from itertools import filterfalse
5
+ from mapFolding import ansiColorReset, ansiColors, dictionaryOEISMapFolding, packageSettings
6
+ from mapFolding._e import PermutationSpace
7
+ from mapFolding._e.basecamp import eliminateFolds
8
+ from mapFolding._e.dataBaskets import EliminationState
9
+ from mapFolding._e.filters import between, extractPinnedLeaves
10
+ from mapFolding._e.pin2上nDimensions import (
11
+ pinLeavesDimensions0零一, pinLeavesDimension一, pinLeavesDimension二, pinLeavesDimension首二, pinPilesAtEnds, pinPile零Ante首零)
12
+ from os import PathLike
13
+ from pathlib import Path, PurePath
14
+ from tqdm import tqdm
15
+ import csv
16
+ import sys
17
+ import time
18
+
19
+ if __name__ == "__main__":
20
+
21
+ def _write() -> None:
22
+ sys.stdout.write(
23
+ f"{(match := foldsTotal == dictionaryOEISMapFolding[oeisID]['valuesKnown'][n])}\t"
24
+ f"{(ansiColors.YellowOnRed, ansiColors.GreenOnBlack)[match]}"
25
+ f"{n}\t"
26
+ # f"{mapShape}\t"
27
+ f"{foldsTotal}\t"
28
+ f"{dictionaryOEISMapFolding[oeisID]['valuesKnown'][n]}\t"
29
+ f"{time.perf_counter() - timeStart:.2f}\t"
30
+ f"{ansiColorReset}\n"
31
+ )
32
+
33
+ pathLikeWriteFoldsTotal: PathLike[str] | PurePath | None = None
34
+ oeisID: str = ""
35
+ flow: str = ""
36
+ CPUlimit: bool | float | int | None = -2
37
+ state: EliminationState | None = None
38
+
39
+ flow = "constraintPropagation"
40
+ flow = "elimination"
41
+ flow = "crease"
42
+
43
+ oeisID: str = "A195646"
44
+ oeisID: str = "A000136"
45
+ oeisID: str = "A001416"
46
+ oeisID: str = "A001418"
47
+ oeisID: str = "A001415"
48
+ oeisID: str = "A001417"
49
+
50
+ sys.stdout.write(f"{ansiColors[int(oeisID, 36) % len(ansiColors)]}{oeisID} ")
51
+ sys.stdout.write(f"{ansiColors[int(flow, 36) % len(ansiColors)]}{flow}")
52
+ sys.stdout.write(ansiColorReset + "\n")
53
+
54
+ for n in range(6,7):
55
+ mapShape: tuple[int, ...] = dictionaryOEISMapFolding[oeisID]["getMapShape"](n)
56
+ if oeisID == "A001417" and n > 3:
57
+ state = EliminationState(mapShape)
58
+ # state = pinPilesAtEnds(state, 4)
59
+ state = pinPile零Ante首零(state)
60
+ state = pinLeavesDimensions0零一(state)
61
+ # state = pinLeavesDimension二(state)
62
+ # state = pinLeavesDimension首二(state)
63
+
64
+ timeStart = time.perf_counter()
65
+ foldsTotal: int = eliminateFolds(mapShape=mapShape, state=state, pathLikeWriteFoldsTotal=pathLikeWriteFoldsTotal, CPUlimit=CPUlimit, flow=flow)
66
+
67
+ _write()
68
+
69
+ r"""
70
+ title running && start "working" /B /HIGH /wait py -X faulthandler=0 -X tracemalloc=0 -X frozen_modules=on mapFolding\_e\easyRun\eliminateFolds.py & title I'm done
71
+ """
72
+
@@ -0,0 +1,62 @@
1
+ # ruff: noqa: T201, T203, D103, TC003, ERA001 # noqa: RUF100
2
+ # pyright: reportUnusedImport=false
3
+ from collections.abc import Callable, Iterable
4
+ from cytoolz.curried import map as toolz_map
5
+ from cytoolz.functoolz import compose
6
+ from gmpy2 import fac
7
+ from mapFolding._e import (
8
+ DOTvalues, getDictionaryConditionalLeafPredecessors, getDictionaryLeafDomains, getDictionaryPileRanges, getLeafDomain,
9
+ getLeavesCreaseAnte, getLeavesCreasePost, getPileRange, PermutationSpace, PileRangeOfLeaves)
10
+ from mapFolding._e.dataBaskets import EliminationState
11
+ from mapFolding._e.filters import extractPilesWithPileRangeOfLeaves
12
+ from mapFolding._e.pin2上nDimensions import (
13
+ pinLeavesDimensions0零一, pinLeavesDimension二, pinLeavesDimension首二, pinPilesAtEnds, pinPile零Ante首零)
14
+ from mapFolding._e.Z0Z_analysisPython.toolkit import verifyPinning2Dn
15
+ from math import prod
16
+ from pprint import pprint
17
+ import time
18
+
19
+ def printStatisticsPermutations(state: EliminationState) -> None:
20
+ def prodOfDOTvalues(listPileRangeOfLeaves: Iterable[PileRangeOfLeaves]) -> int:
21
+ return prod([pileRangeOfLeaves.bit_count() - 1 for pileRangeOfLeaves in listPileRangeOfLeaves])
22
+ permutationsPermutationSpaceTotal: Callable[[list[PermutationSpace]], int] = compose(sum, toolz_map(compose(prodOfDOTvalues, DOTvalues, extractPilesWithPileRangeOfLeaves)))
23
+ print(len(str(mm:=fac(state.leavesTotal))), mm, "Maximum permutations of leaves")
24
+ print(len(str(rr:=prod(toolz_map(len, filter(None, DOTvalues(getDictionaryPileRanges(state))))))), rr, "dictionaryPileRanges")
25
+ print(len(str(pp:=permutationsPermutationSpaceTotal(state.listPermutationSpace))), pp, "Pinning these leaves")
26
+
27
+ if __name__ == '__main__':
28
+ state = EliminationState((2,) * 6)
29
+
30
+ printThis = True
31
+
32
+ """
33
+ 4th order piles and leaves dimensions 0, 零, 一. 2d6.
34
+ 11.42 seconds
35
+ 2688492703286605023848766675550409414155249702868353306025321493319522402099200 permutations
36
+ len(state.listPermutationSpace)=3205
37
+ 2537 surplus dictionaries: 79%
38
+ """
39
+
40
+ if printThis:
41
+ timeStart: float = time.perf_counter()
42
+ state: EliminationState = pinPile零Ante首零(state)
43
+ state: EliminationState = pinLeavesDimensions0零一(state)
44
+ print(f"{time.perf_counter() - timeStart:.2f}\tpinning")
45
+ verifyPinning2Dn(state)
46
+ print(f"{time.perf_counter() - timeStart:.2f}\tverifyPinning2Dn")
47
+ printStatisticsPermutations(state)
48
+ print(f"{len(state.listPermutationSpace)=}")
49
+
50
+ elif printThis:
51
+ state: EliminationState = pinLeavesDimension首二(state)
52
+ state: EliminationState = pinPilesAtEnds(state, 4)
53
+ print(state.sumsOfProductsOfDimensionsNearest首)
54
+ pprint(dictionaryPileRanges := getDictionaryPileRanges(state), width=200)
55
+ pprint(dictionaryLeafDomains := getDictionaryLeafDomains(state))
56
+ pprint(getDictionaryConditionalLeafPredecessors(state), width=260)
57
+ state: EliminationState = pinLeavesDimension二(state)
58
+ print(*getLeavesCreasePost(state, 22))
59
+ print(*getLeavesCreaseAnte(state, 53))
60
+ print(*(format(x, '06b') for x in getPileRange(state, 60)))
61
+ print(list(getLeafDomain(state, 37)))
62
+ pprint(state.listPermutationSpace)