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.
- easyRun/NOTcountingFolds.py +7 -11
- easyRun/countFolds.py +11 -10
- easyRun/meanders.py +6 -8
- mapFolding/__init__.py +24 -36
- mapFolding/_e/Z0Z_analysisPython/SORTZ0Z_hypothesis.py +189 -0
- mapFolding/_e/Z0Z_analysisPython/SORTZ0Z_p2d6.py +143 -0
- mapFolding/_e/Z0Z_analysisPython/__init__.py +4 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/__init__.py +0 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/344/270/200.py +369 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/344/270/2001.py +694 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/344/270/200/344/270/211.py +514 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/344/270/200/344/270/2111.py +480 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/344/270/200/344/272/214.py +511 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/344/270/200/344/272/2141.py +515 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/344/270/200/344/272/214/344/270/211.py +485 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/344/270/200/344/272/214/344/270/2111.py +442 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/344/270/211.py +313 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/344/270/2111.py +343 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/344/272/214.py +400 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/344/272/2141.py +497 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/344/272/214/344/270/211.py +463 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/344/272/214/344/270/2111.py +441 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/351/233/266.py +35 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/351/233/2661.py +35 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/351/233/266/344/270/200.py +382 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/351/233/266/344/270/2001.py +630 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/351/233/266/344/270/200/344/270/211.py +488 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/351/233/266/344/270/200/344/270/2111.py +475 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/351/233/266/344/270/200/344/272/214.py +473 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/351/233/266/344/270/200/344/272/2141.py +500 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/351/233/266/344/270/200/344/272/214/344/270/211.py +465 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/351/233/266/344/270/200/344/272/214/344/270/2111.py +439 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/351/233/266/344/270/211.py +599 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/351/233/266/344/270/2111.py +536 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/351/233/266/344/272/214.py +506 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/351/233/266/344/272/2141.py +533 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/351/233/266/344/272/214/344/270/211.py +489 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/aggregated/351/246/226/351/233/266/344/272/214/344/270/2111.py +474 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/200.py +1186 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/2001.py +2158 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/2001Negative.py +2158 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/200Negative.py +1186 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/200/344/270/211.py +1397 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/200/344/270/2111.py +1291 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/200/344/270/2111Negative.py +1291 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/200/344/270/211Negative.py +1397 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/200/344/272/214.py +1240 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/200/344/272/2141.py +1420 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/200/344/272/2141Negative.py +1420 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/200/344/272/214Negative.py +1240 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/200/344/272/214/344/270/211.py +1366 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/200/344/272/214/344/270/2111.py +1274 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/200/344/272/214/344/270/2111Negative.py +1274 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/200/344/272/214/344/270/211Negative.py +1366 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/211.py +1186 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/2111.py +1186 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/2111Negative.py +1186 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/270/211Negative.py +1186 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/272/214.py +1102 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/272/2141.py +1422 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/272/2141Negative.py +1422 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/272/214Negative.py +1102 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/272/214/344/270/211.py +1240 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/272/214/344/270/2111.py +1228 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/272/214/344/270/2111Negative.py +1228 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/344/272/214/344/270/211Negative.py +1240 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266.py +32 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/2661.py +1162 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/2661Negative.py +1162 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266Negative.py +32 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/200.py +1186 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/2001.py +1926 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/2001Negative.py +1926 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/200Negative.py +1186 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/200/344/270/211.py +1291 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/200/344/270/2111.py +1176 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/200/344/270/2111Negative.py +1176 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/200/344/270/211Negative.py +1291 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/200/344/272/214.py +1228 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/200/344/272/2141.py +1324 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/200/344/272/2141Negative.py +1324 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/200/344/272/214Negative.py +1228 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/200/344/272/214/344/270/211.py +1274 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/200/344/272/214/344/270/2111.py +1038 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/200/344/272/214/344/270/2111Negative.py +1038 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/200/344/272/214/344/270/211Negative.py +1274 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/211.py +2158 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/2111.py +1926 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/2111Negative.py +1926 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/270/211Negative.py +2158 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/272/214.py +1422 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/272/2141.py +1364 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/272/2141Negative.py +1364 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/272/214Negative.py +1422 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/272/214/344/270/211.py +1420 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/272/214/344/270/2111.py +1324 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/272/214/344/270/2111Negative.py +1324 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d5/351/246/226/351/233/266/344/272/214/344/270/211Negative.py +1420 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/200.py +3133 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/2001.py +6039 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/2001Negative.py +6039 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/200Negative.py +3133 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/200/344/270/211.py +3527 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/200/344/270/2111.py +2300 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/200/344/270/2111Negative.py +2300 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/200/344/270/211Negative.py +3527 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/200/344/272/214.py +3597 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/200/344/272/2141.py +3317 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/200/344/272/2141Negative.py +3317 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/200/344/272/214Negative.py +3597 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/200/344/272/214/344/270/211.py +3161 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/200/344/272/214/344/270/2111.py +2877 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/200/344/272/214/344/270/2111Negative.py +2877 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/200/344/272/214/344/270/211Negative.py +3161 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/211.py +2981 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/2111.py +3055 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/2111Negative.py +3055 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/270/211Negative.py +2981 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/272/214.py +3221 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/272/2141.py +3988 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/272/2141Negative.py +3988 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/272/214Negative.py +3221 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/272/214/344/270/211.py +3652 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/272/214/344/270/2111.py +2863 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/272/214/344/270/2111Negative.py +2863 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/344/272/214/344/270/211Negative.py +3652 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/200.py +2485 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/2001.py +4566 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/2001Negative.py +4566 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/200Negative.py +2485 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/200/344/270/211.py +3006 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/200/344/270/2111.py +2485 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/200/344/270/2111Negative.py +2485 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/200/344/270/211Negative.py +3006 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/200/344/272/214.py +3304 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/200/344/272/2141.py +3015 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/200/344/272/2141Negative.py +3015 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/200/344/272/214Negative.py +3304 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/200/344/272/214/344/270/211.py +2939 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/200/344/272/214/344/270/2111.py +2589 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/200/344/272/214/344/270/2111Negative.py +2589 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/200/344/272/214/344/270/211Negative.py +2939 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/211.py +3899 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/2111.py +2996 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/2111Negative.py +2996 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/270/211Negative.py +3899 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/272/214.py +3223 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/272/2141.py +3020 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/272/2141Negative.py +3020 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/272/214Negative.py +3223 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/272/214/344/270/211.py +3250 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/272/214/344/270/2111.py +2667 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/272/214/344/270/2111Negative.py +2667 -0
- mapFolding/_e/Z0Z_analysisPython/exclusionData/collatedp2d6/351/246/226/351/233/266/344/272/214/344/270/211Negative.py +3250 -0
- mapFolding/_e/Z0Z_analysisPython/measure.py +162 -0
- mapFolding/_e/Z0Z_analysisPython/positionAnalysis.py +403 -0
- mapFolding/_e/Z0Z_analysisPython/positionAnalysisPileRanges2d6.py +110 -0
- mapFolding/_e/Z0Z_analysisPython/theExcluderBeast.py +640 -0
- mapFolding/_e/Z0Z_analysisPython/toolkit.py +166 -0
- mapFolding/_e/Z0Z_analysisPython/toolkitCSVsequences.py +188 -0
- mapFolding/_e/Z0Z_analysisPython/workBenchPatternFinder.py +284 -0
- mapFolding/_e/Z0Z_notes/__init__.py +0 -0
- mapFolding/_e/Z0Z_notes/knowledgeDump.py +214 -0
- mapFolding/_e/__init__.py +45 -0
- mapFolding/_e/_beDRY.py +547 -0
- mapFolding/_e/_dataDynamic.py +1164 -0
- mapFolding/_e/_measure.py +579 -0
- mapFolding/_e/_semiotics.py +363 -0
- mapFolding/_e/_theTypes.py +31 -0
- mapFolding/_e/algorithms/__init__.py +1 -0
- mapFolding/_e/algorithms/constraintPropagation.py +158 -0
- mapFolding/_e/algorithms/elimination.py +118 -0
- mapFolding/_e/algorithms/eliminationCrease.py +66 -0
- mapFolding/_e/algorithms/iff.py +584 -0
- mapFolding/_e/basecamp.py +89 -0
- mapFolding/_e/dataBaskets.py +123 -0
- mapFolding/_e/dataRaw/__init__.py +0 -0
- mapFolding/_e/easyRun/__init__.py +0 -0
- mapFolding/_e/easyRun/eliminateFolds.py +72 -0
- mapFolding/_e/easyRun/pinning.py +62 -0
- mapFolding/_e/filters.py +384 -0
- mapFolding/_e/pin2/344/270/212nDimensions.py +882 -0
- mapFolding/_e/pin2/344/270/212nDimensionsAnnex.py +551 -0
- mapFolding/_e/pin2/344/270/212nDimensionsByCrease.py +190 -0
- mapFolding/_e/pin2/344/270/212nDimensionsByDomain.py +459 -0
- mapFolding/_e/pinIt.py +436 -0
- mapFolding/_semiotics.py +42 -0
- mapFolding/_theSSOT.py +11 -56
- mapFolding/_theTypes.py +52 -67
- mapFolding/algorithms/matrixMeandersNumPyndas.py +18 -18
- mapFolding/algorithms/oeisIDbyFormula.py +4 -4
- mapFolding/algorithms/zCuzDocStoopidoeisIDbyFormula.py +3 -3
- mapFolding/basecamp.py +11 -80
- mapFolding/beDRY.py +107 -111
- mapFolding/dataBaskets.py +0 -56
- mapFolding/filesystemToolkit.py +15 -11
- mapFolding/oeis.py +17 -16
- mapFolding/reference/matrixMeandersAnalysis/prefixNotationNotes.py +2 -2
- mapFolding/reference/meandersDumpingGround/matrixMeandersBaselineV2.py +0 -1
- mapFolding/reference/meandersDumpingGround/matrixMeandersNumPyV1finalForm.py +8 -10
- mapFolding/someAssemblyRequired/RecipeJob.py +5 -5
- mapFolding/someAssemblyRequired/makeJobTheorem2Numba.py +5 -2
- mapFolding/someAssemblyRequired/makeJobTheorem2codon.py +9 -11
- mapFolding/someAssemblyRequired/mapFoldingModules/makeMapFoldingModules.py +2 -1
- mapFolding/someAssemblyRequired/transformationTools.py +1 -1
- mapFolding/tests/Z0Z_test_e_excluder.py +155 -0
- mapFolding/tests/conftest.py +193 -314
- mapFolding/tests/dataSamples/A001417.py +455 -0
- mapFolding/tests/dataSamples/__init__.py +1 -0
- mapFolding/tests/dataSamples/measurementData.py +1818 -0
- mapFolding/tests/dataSamples/p2DnDomain3_2_/351/246/226/344/270/200_/351/246/226/351/233/266/344/270/200.py +17 -0
- mapFolding/tests/dataSamples/p2DnDomain3_/351/246/226/344/270/200.py +17 -0
- mapFolding/tests/dataSamples/p2DnDomain5_4.py +17 -0
- mapFolding/tests/dataSamples/p2DnDomain6_5.py +17 -0
- mapFolding/tests/dataSamples/p2DnDomain6_7_5_4.py +17 -0
- mapFolding/tests/dataSamples/p2DnDomain7_6.py +17 -0
- 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
- 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
- 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
- mapFolding/tests/dataSamples/p2DnDomain/351/246/226/351/233/266/344/272/214_/351/246/226/344/272/214.py +15 -0
- mapFolding/tests/dataSamples/semioticsData.py +135 -0
- mapFolding/tests/test_computations.py +134 -80
- mapFolding/tests/test_e_computations.py +42 -0
- mapFolding/tests/test_e_dataDynamic.py +189 -0
- mapFolding/tests/test_e_measurements.py +257 -0
- mapFolding/tests/test_e_pinning.py +61 -0
- mapFolding/tests/test_e_semiotics.py +128 -0
- mapFolding/tests/test_filesystem.py +39 -17
- mapFolding/tests/{test_other.py → test_parameterValidation.py} +3 -3
- mapFolding/tests/{test_tasks.py → test_taskDivisions.py} +42 -23
- mapFolding/zCuzDocStoopid/makeDocstrings.py +3 -2
- {mapfolding-0.17.1.dist-info → mapfolding-0.18.0.dist-info}/METADATA +11 -8
- mapfolding-0.18.0.dist-info/RECORD +305 -0
- {mapfolding-0.17.1.dist-info → mapfolding-0.18.0.dist-info}/WHEEL +1 -1
- easyRun/eliminateFolds.py +0 -60
- mapFolding/algorithms/constraintPropagation.py +0 -184
- mapFolding/algorithms/elimination.py +0 -131
- mapFolding/algorithms/eliminationCount.py +0 -26
- mapFolding/algorithms/eliminationPinned.py +0 -35
- mapFolding/algorithms/iff.py +0 -206
- mapFolding/algorithms/patternFinder.py +0 -280
- mapFolding/algorithms/pinning2Dn.py +0 -345
- mapFolding/algorithms/pinning2DnAnnex.py +0 -43
- mapFolding/tests/verify.py +0 -323
- mapfolding-0.17.1.dist-info/RECORD +0 -112
- {mapfolding-0.17.1.dist-info → mapfolding-0.18.0.dist-info}/entry_points.txt +0 -0
- {mapfolding-0.17.1.dist-info → mapfolding-0.18.0.dist-info}/licenses/LICENSE +0 -0
- {mapfolding-0.17.1.dist-info → mapfolding-0.18.0.dist-info}/top_level.txt +0 -0
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
from astToolkit import identifierDotAttribute, parseLogicalPath2astModule
|
|
4
4
|
from astToolkit.containers import IngredientsFunction, IngredientsModule, LedgerOfImports
|
|
5
5
|
from astToolkit.transformationTools import pythonCode2ast_expr
|
|
6
|
-
from hunterMakesPy import autoDecodingRLE
|
|
6
|
+
from hunterMakesPy.dataStructures import autoDecodingRLE
|
|
7
7
|
# TODO 'The____' identifiers are a vestigial semiotic system. Do I still need to import `asname`? If so, would different
|
|
8
8
|
# identifiers better integrate into the current semiotics?
|
|
9
9
|
from mapFolding import (
|
|
@@ -84,7 +84,7 @@ class RecipeJobTheorem2:
|
|
|
84
84
|
shatteredDataclass: ShatteredDataclass = dataclasses.field(default=None, init=True) # pyright: ignore[reportAssignmentType]
|
|
85
85
|
"""Deconstructed dataclass metadata for code transformation."""
|
|
86
86
|
|
|
87
|
-
|
|
87
|
+
#-------- Source -----------------------------------------
|
|
88
88
|
source_astModule: ast.Module = parseLogicalPath2astModule(f'{packageSettings.identifierPackage}.{default['logicalPath']['synthetic']}.theorem2Numba') # noqa: RUF009
|
|
89
89
|
"""Parsed AST of the source module containing the generic algorithm."""
|
|
90
90
|
identifierCallableSource: str = default['function']['counting']
|
|
@@ -102,7 +102,7 @@ class RecipeJobTheorem2:
|
|
|
102
102
|
sourcePackageIdentifier: str | None = packageSettings.identifierPackage
|
|
103
103
|
"""Name of the source package."""
|
|
104
104
|
|
|
105
|
-
|
|
105
|
+
#-------- Filesystem, names of physical objects ------------------------------------------
|
|
106
106
|
pathPackage: PurePosixPath | None = None
|
|
107
107
|
"""Override path for the target package."""
|
|
108
108
|
pathModule: PurePosixPath | None = PurePosixPath(getPathRootJobDEFAULT()) # noqa: RUF009
|
|
@@ -112,7 +112,7 @@ class RecipeJobTheorem2:
|
|
|
112
112
|
pathFilenameFoldsTotal: PurePosixPath = dataclasses.field(default=None, init=True) # pyright: ignore[reportAssignmentType]
|
|
113
113
|
"""Path for writing fold count results."""
|
|
114
114
|
|
|
115
|
-
|
|
115
|
+
#-------- Logical identifiers, as opposed to physical identifiers ------------------------
|
|
116
116
|
packageIdentifier: str | None = None
|
|
117
117
|
"""Target package identifier."""
|
|
118
118
|
logicalPathRoot: identifierDotAttribute | None = None
|
|
@@ -128,7 +128,7 @@ class RecipeJobTheorem2:
|
|
|
128
128
|
logicalPathModuleDataclass: identifierDotAttribute | None = sourceLogicalPathModuleDataclass
|
|
129
129
|
"""Logical path to target dataclass module."""
|
|
130
130
|
|
|
131
|
-
|
|
131
|
+
#-------- Datatypes ------------------------------------------
|
|
132
132
|
type DatatypeFoldsTotal = TheDatatypeFoldsTotal
|
|
133
133
|
"""Type alias for datatype linked to the magnitude of `foldsTotal`."""
|
|
134
134
|
type DatatypeElephino = TheDatatypeElephino
|
|
@@ -10,7 +10,7 @@ progress integration for long-running calculations, and launcher generation for
|
|
|
10
10
|
|
|
11
11
|
from astToolkit import Be, Make, NodeChanger, NodeTourist, parseLogicalPath2astModule, Then
|
|
12
12
|
from astToolkit.containers import astModuleToIngredientsFunction, IngredientsFunction, IngredientsModule
|
|
13
|
-
from hunterMakesPy import autoDecodingRLE
|
|
13
|
+
from hunterMakesPy.dataStructures import autoDecodingRLE
|
|
14
14
|
from mapFolding import (
|
|
15
15
|
DatatypeLeavesTotal, dictionaryOEIS, getFoldsTotalKnown, getPathFilenameFoldsTotal, packageSettings)
|
|
16
16
|
from mapFolding.dataBaskets import MapFoldingState, SymmetricFoldsState
|
|
@@ -19,9 +19,12 @@ from mapFolding.someAssemblyRequired.RecipeJob import customizeDatatypeViaImport
|
|
|
19
19
|
from mapFolding.someAssemblyRequired.toolkitNumba import decorateCallableWithNumba, parametersNumbaLight, SpicesJobNumba
|
|
20
20
|
from mapFolding.someAssemblyRequired.transformationTools import shatter_dataclassesDOTdataclass
|
|
21
21
|
from pathlib import PurePosixPath
|
|
22
|
-
from typing import cast
|
|
22
|
+
from typing import cast, TYPE_CHECKING
|
|
23
23
|
import ast
|
|
24
24
|
|
|
25
|
+
if TYPE_CHECKING:
|
|
26
|
+
from hunterMakesPy import identifierDotAttribute
|
|
27
|
+
|
|
25
28
|
# TODO More convergence with `makeJobTheorem2codon`
|
|
26
29
|
|
|
27
30
|
# TODO Dynamically calculate the bitwidth of each datatype. NOTE I've delayed dynamic calculation because I don't know how to
|
|
@@ -7,6 +7,7 @@ from astToolkit import (
|
|
|
7
7
|
from astToolkit.containers import IngredientsFunction, IngredientsModule
|
|
8
8
|
from astToolkit.transformationTools import removeUnusedParameters, write_astModule
|
|
9
9
|
from hunterMakesPy import raiseIfNone
|
|
10
|
+
from io import TextIOBase
|
|
10
11
|
from mapFolding import DatatypeLeavesTotal, getPathFilenameFoldsTotal, packageSettings
|
|
11
12
|
from mapFolding.dataBaskets import MapFoldingState
|
|
12
13
|
from mapFolding.someAssemblyRequired import DatatypeConfiguration, default, IfThis
|
|
@@ -14,14 +15,11 @@ from mapFolding.someAssemblyRequired.RecipeJob import (
|
|
|
14
15
|
customizeDatatypeViaImport, moveShatteredDataclass_arg2body, RecipeJobTheorem2)
|
|
15
16
|
from mapFolding.syntheticModules.initializeState import transitionOnGroupsOfFolds
|
|
16
17
|
from pathlib import Path, PurePosixPath
|
|
17
|
-
from typing import cast
|
|
18
|
+
from typing import cast
|
|
19
|
+
import ast
|
|
18
20
|
import subprocess
|
|
19
21
|
import sys
|
|
20
22
|
|
|
21
|
-
if TYPE_CHECKING:
|
|
22
|
-
from io import TextIOBase
|
|
23
|
-
import ast
|
|
24
|
-
|
|
25
23
|
# TODO Converge with `makeJobTheorem2Numba`.
|
|
26
24
|
|
|
27
25
|
listDatatypeConfigurations: list[DatatypeConfiguration] = [
|
|
@@ -73,8 +71,8 @@ def _variableCompatibility(ingredientsFunction: IngredientsFunction, job: Recipe
|
|
|
73
71
|
identifier: str = ast_arg.arg
|
|
74
72
|
annotation: ast.expr = raiseIfNone(ast_arg.annotation)
|
|
75
73
|
|
|
76
|
-
|
|
77
|
-
|
|
74
|
+
#-------- `identifier` is target of Augmented Assignment, or --------------
|
|
75
|
+
#-------- `identifier` is target of Assignment and value is Constant. -----
|
|
78
76
|
NodeChanger(
|
|
79
77
|
IfThis.isAnyOf(
|
|
80
78
|
Be.AugAssign.targetIs(IfThis.isNestedNameIdentifier(identifier))
|
|
@@ -84,23 +82,23 @@ def _variableCompatibility(ingredientsFunction: IngredientsFunction, job: Recipe
|
|
|
84
82
|
, doThat=lambda node, annotation=annotation: Grab.valueAttribute(Then.replaceWith(Make.Call(annotation, listParameters=[node.value])))(node)
|
|
85
83
|
).visit(ingredientsFunction.astFunctionDef)
|
|
86
84
|
|
|
87
|
-
|
|
85
|
+
#-------- `identifier` - 1. ----------------------------------------------
|
|
88
86
|
NodeChanger(Be.BinOp.leftIs(IfThis.isNestedNameIdentifier(identifier))
|
|
89
87
|
, doThat=lambda node, annotation=annotation: Grab.rightAttribute(Then.replaceWith(Make.Call(annotation, listParameters=[node.right])))(node)
|
|
90
88
|
).visit(ingredientsFunction.astFunctionDef)
|
|
91
89
|
|
|
92
|
-
|
|
90
|
+
#-------- `identifier` in Comparison. -------------------------------------
|
|
93
91
|
NodeChanger(Be.Compare.leftIs(IfThis.isNestedNameIdentifier(identifier))
|
|
94
92
|
, doThat=lambda node, annotation=annotation: Grab.comparatorsAttribute(lambda at, annotation=annotation: Then.replaceWith([Make.Call(annotation, listParameters=[node.comparators[0]])])(at[0]))(node)
|
|
95
93
|
).visit(ingredientsFunction.astFunctionDef)
|
|
96
94
|
|
|
97
|
-
|
|
95
|
+
#-------- `identifier` has exactly one index value. -----------------------
|
|
98
96
|
NodeChanger(IfThis.isAllOf(Be.Subscript.valueIs(IfThis.isNestedNameIdentifier(identifier))
|
|
99
97
|
, lambda node: not Be.Subscript.sliceIs(Be.Tuple)(node))
|
|
100
98
|
, doThat=lambda node: Grab.sliceAttribute(Then.replaceWith(Make.Call(Make.Name('int'), listParameters=[node.slice])))(node)
|
|
101
99
|
).visit(ingredientsFunction.astFunctionDef)
|
|
102
100
|
|
|
103
|
-
|
|
101
|
+
#-------- `identifier` has multiple index values. -------------------------
|
|
104
102
|
NodeChanger(IfThis.isAllOf(Be.Subscript.valueIs(IfThis.isNestedNameIdentifier(identifier))
|
|
105
103
|
, Be.Subscript.sliceIs(Be.Tuple))
|
|
106
104
|
, doThat=lambda node: Grab.sliceAttribute(Grab.eltsAttribute(
|
|
@@ -5,7 +5,8 @@ from astToolkit import (
|
|
|
5
5
|
from astToolkit.containers import (
|
|
6
6
|
astModuleToIngredientsFunction, IngredientsFunction, IngredientsModule, LedgerOfImports)
|
|
7
7
|
from astToolkit.transformationTools import inlineFunctionDef, removeUnusedParameters, write_astModule
|
|
8
|
-
from hunterMakesPy import
|
|
8
|
+
from hunterMakesPy import raiseIfNone
|
|
9
|
+
from hunterMakesPy.filesystemToolkit import importLogicalPath2Identifier
|
|
9
10
|
from mapFolding import packageSettings
|
|
10
11
|
from mapFolding.someAssemblyRequired import default, DeReConstructField2ast, IfThis, ShatteredDataclass
|
|
11
12
|
from mapFolding.someAssemblyRequired.makingModules_count import (
|
|
@@ -28,7 +28,7 @@ through specialized compilation paths essential for computationally intensive ma
|
|
|
28
28
|
from astToolkit import Be, extractClassDef, identifierDotAttribute, Make, NodeChanger, parseLogicalPath2astModule, Then
|
|
29
29
|
from astToolkit.containers import IngredientsFunction
|
|
30
30
|
from astToolkit.transformationTools import unparseFindReplace
|
|
31
|
-
from hunterMakesPy import importLogicalPath2Identifier
|
|
31
|
+
from hunterMakesPy.filesystemToolkit import importLogicalPath2Identifier
|
|
32
32
|
from mapFolding.someAssemblyRequired import DeReConstructField2ast, IfThis, ShatteredDataclass
|
|
33
33
|
import ast
|
|
34
34
|
import dataclasses
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
"""Tests for the excluder system and analysis tools.
|
|
2
|
+
|
|
3
|
+
This module tests the functionality of the excluder system, including:
|
|
4
|
+
1. The logic for excluding leaves based on pinned piles (`_Z0Z_excludeThisLeaf`, `Z0Z_excluder`).
|
|
5
|
+
2. The generation and analysis of exclusion data (`theExcluderBeast.py`).
|
|
6
|
+
3. The transformation of indices to fraction/addend representations.
|
|
7
|
+
|
|
8
|
+
The tests use `pytest` fixtures and parametrization to ensure flexibility and coverage.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
from fractions import Fraction
|
|
12
|
+
from mapFolding._e.dataBaskets import EliminationState
|
|
13
|
+
from mapFolding._e.pin2上nDimensionsAnnex import Z0Z_excluder
|
|
14
|
+
from mapFolding._e.Z0Z_analysisPython import theExcluderBeast
|
|
15
|
+
from mapFolding._e.Z0Z_analysisPython.theExcluderBeast import (
|
|
16
|
+
_getContiguousEndingAtNegativeOne, _getContiguousFromStart, expressIndexAsFractionAddend, FractionAddend,
|
|
17
|
+
writeAggregatedExclusions, writeExclusionDataCollated, writeExclusionDictionaries)
|
|
18
|
+
from pathlib import Path, PurePath
|
|
19
|
+
from typing import Any
|
|
20
|
+
from unittest.mock import MagicMock, patch
|
|
21
|
+
import pandas
|
|
22
|
+
import pytest
|
|
23
|
+
|
|
24
|
+
#======== Logic Tests (Adapted from test_excluder_logic.py) =======
|
|
25
|
+
|
|
26
|
+
@pytest.mark.parametrize("dimensionsTotal, pileLast, permutationSpace, expectedResult", [
|
|
27
|
+
(6, 99, {7: 4, 12: 36}, True),
|
|
28
|
+
], ids=["2d6_pileLast99_pinned7_4_12_36"])
|
|
29
|
+
def test_Z0Z_excluder(dimensionsTotal: int, pileLast: int, permutationSpace: dict[int, int], expectedResult: bool, monkeypatch: pytest.MonkeyPatch) -> None:
|
|
30
|
+
"""Verify Z0Z_excluder correctly identifies invalid states."""
|
|
31
|
+
state = MagicMock(spec=EliminationState)
|
|
32
|
+
state.dimensionsTotal = dimensionsTotal
|
|
33
|
+
state.pileLast = pileLast
|
|
34
|
+
state.permutationSpace = permutationSpace
|
|
35
|
+
|
|
36
|
+
stubLookup: dict[int, dict[int, dict[int, list[int]]]] = {
|
|
37
|
+
7: {
|
|
38
|
+
4: {
|
|
39
|
+
12: [36]
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
monkeypatch.setattr("mapFolding._e.pin2上nDimensionsAnnex.dictionary2d6AtPileLeafExcludedByPile", stubLookup)
|
|
44
|
+
|
|
45
|
+
result = Z0Z_excluder(state)
|
|
46
|
+
assert result == expectedResult
|
|
47
|
+
|
|
48
|
+
#======== Transformation Tests =======
|
|
49
|
+
|
|
50
|
+
@pytest.mark.parametrize("index, pilesTotal, denominators, expected", [
|
|
51
|
+
(0, 10, (), (Fraction(0, 1), 0)),
|
|
52
|
+
(5, 10, (2,), (Fraction(1, 2), 0)),
|
|
53
|
+
(-1, 10, (), (Fraction(0, 1), -1)),
|
|
54
|
+
], ids=["index=0", "index=5", "index=-1"])
|
|
55
|
+
def test_expressIndexAsFractionAddend(index: int, pilesTotal: int, denominators: tuple[int, ...], expected: FractionAddend) -> None:
|
|
56
|
+
"""Verify index to fraction/addend conversion."""
|
|
57
|
+
assert expressIndexAsFractionAddend(index, pilesTotal, denominators) == expected
|
|
58
|
+
|
|
59
|
+
#======== Analysis Method Tests =======
|
|
60
|
+
|
|
61
|
+
@pytest.mark.parametrize("indices, expected", [
|
|
62
|
+
([0, 1, 2, 5], [0, 1, 2]),
|
|
63
|
+
([1, 2, 3], []),
|
|
64
|
+
([0], []),
|
|
65
|
+
], ids=["contiguous-run", "no-zero-start", "single-value"])
|
|
66
|
+
def test_getContiguousFromStart(indices: list[int], expected: list[int]) -> None:
|
|
67
|
+
assert _getContiguousFromStart(indices) == expected
|
|
68
|
+
|
|
69
|
+
@pytest.mark.parametrize("offsets, expected", [
|
|
70
|
+
([-4, -3, -1], []),
|
|
71
|
+
([-3, -2, -1], [-3, -2, -1]),
|
|
72
|
+
([-1], []),
|
|
73
|
+
], ids=["missing-terminal", "full-run", "single-value"])
|
|
74
|
+
def test_getContiguousEndingAtNegativeOne(offsets: list[int], expected: list[int]) -> None:
|
|
75
|
+
assert _getContiguousEndingAtNegativeOne(offsets) == expected
|
|
76
|
+
|
|
77
|
+
#======== File Generation Tests =======
|
|
78
|
+
|
|
79
|
+
def test_writeExclusionDataCollated_creates_files(path_tmpTesting: Path, monkeypatch: pytest.MonkeyPatch) -> None:
|
|
80
|
+
def stubLeafZero(dimensionsTotal: int) -> int:
|
|
81
|
+
return 0
|
|
82
|
+
|
|
83
|
+
def stubLeafOne(dimensionsTotal: int) -> int:
|
|
84
|
+
return 1
|
|
85
|
+
|
|
86
|
+
monkeypatch.setattr(theExcluderBeast, "functionsHeadDimensions", [stubLeafZero, stubLeafOne])
|
|
87
|
+
monkeypatch.setattr(theExcluderBeast, "dictionaryFunctionsByName", {stubLeafZero.__name__: stubLeafZero, stubLeafOne.__name__: stubLeafOne})
|
|
88
|
+
monkeypatch.setattr(theExcluderBeast, "pathExclusionData", path_tmpTesting)
|
|
89
|
+
|
|
90
|
+
def stubLeafDomains(state: EliminationState) -> dict[int, range]:
|
|
91
|
+
return {0: range(2), 1: range(2)}
|
|
92
|
+
|
|
93
|
+
monkeypatch.setattr(theExcluderBeast, "getDictionaryLeafDomains", stubLeafDomains)
|
|
94
|
+
|
|
95
|
+
def stubDataFrameFoldings(state: EliminationState) -> pandas.DataFrame:
|
|
96
|
+
return pandas.DataFrame({0: [0, 1], 1: [1, 0]})
|
|
97
|
+
|
|
98
|
+
monkeypatch.setattr(theExcluderBeast, "getDataFrameFoldings", stubDataFrameFoldings)
|
|
99
|
+
|
|
100
|
+
pathsCreated: list[PurePath] = writeExclusionDataCollated(listDimensions=[5])
|
|
101
|
+
|
|
102
|
+
assert pathsCreated
|
|
103
|
+
for pathCreated in pathsCreated:
|
|
104
|
+
assert Path(pathCreated).exists()
|
|
105
|
+
assert Path(pathCreated).parent == path_tmpTesting
|
|
106
|
+
assert "leafExcluderData" in Path(pathCreated).read_text(encoding="utf-8")
|
|
107
|
+
|
|
108
|
+
def test_writeAggregatedExclusions_creates_files(path_tmpTesting: Path, monkeypatch: pytest.MonkeyPatch) -> None:
|
|
109
|
+
def stubLeaf(dimensionsTotal: int) -> int:
|
|
110
|
+
return 0
|
|
111
|
+
|
|
112
|
+
monkeypatch.setattr(theExcluderBeast, "functionsHeadDimensions", [stubLeaf])
|
|
113
|
+
monkeypatch.setattr(theExcluderBeast, "pathExclusionData", path_tmpTesting)
|
|
114
|
+
|
|
115
|
+
stub_data: dict[str, dict[str, dict[str, list[tuple[Fraction, int]]]]] = {
|
|
116
|
+
stubLeaf.__name__: {
|
|
117
|
+
stubLeaf.__name__: {
|
|
118
|
+
stubLeaf.__name__: [(Fraction(0, 1), 0), (Fraction(0, 1), 1)]
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
def stub_analyze(*args: Any, **kwargs: Any) -> dict[str, dict[str, dict[str, list[tuple[Fraction, int]]]]]:
|
|
123
|
+
return stub_data
|
|
124
|
+
|
|
125
|
+
monkeypatch.setattr(theExcluderBeast, "analyzeContiguousEndAbsolute", stub_analyze)
|
|
126
|
+
monkeypatch.setattr(theExcluderBeast, "analyzeContiguousEndRelative", stub_analyze)
|
|
127
|
+
monkeypatch.setattr(theExcluderBeast, "analyzeContiguousStartAbsolute", stub_analyze)
|
|
128
|
+
monkeypatch.setattr(theExcluderBeast, "analyzeContiguousStartRelative", stub_analyze)
|
|
129
|
+
monkeypatch.setattr(theExcluderBeast, "analyzeNonContiguousIndicesRelative", stub_analyze)
|
|
130
|
+
|
|
131
|
+
listPathFilenames: list[PurePath] = writeAggregatedExclusions(path_tmpTesting)
|
|
132
|
+
|
|
133
|
+
assert listPathFilenames
|
|
134
|
+
for pathCreated in listPathFilenames:
|
|
135
|
+
assert Path(pathCreated).exists()
|
|
136
|
+
assert Path(pathCreated).parent == path_tmpTesting
|
|
137
|
+
assert "dictionaryExclusions" in Path(pathCreated).read_text(encoding="utf-8")
|
|
138
|
+
|
|
139
|
+
def test_writeExclusionDictionaries_createsFile(path_tmpTesting: Path) -> None:
|
|
140
|
+
"""Verify writeExclusionDictionaries creates the output file."""
|
|
141
|
+
# This function calls loadAggregatedExclusions which looks for files in pathExclusionData.
|
|
142
|
+
# We need to ensure there are files there or mock loadAggregatedExclusions.
|
|
143
|
+
|
|
144
|
+
with patch("mapFolding._e.Z0Z_analysisPython.theExcluderBeast.pathExclusionData", path_tmpTesting), \
|
|
145
|
+
patch("mapFolding._e.Z0Z_analysisPython.theExcluderBeast.loadAggregatedExclusions", return_value={}):
|
|
146
|
+
# It also calls restructureAggregatedExclusionsForMapShape which needs to work with empty dict
|
|
147
|
+
pathExclusionsFile: Path = path_tmpTesting / "_exclusions.py"
|
|
148
|
+
pathCreated: PurePath = writeExclusionDictionaries(pathExclusionsFile)
|
|
149
|
+
|
|
150
|
+
assert Path(pathCreated).exists()
|
|
151
|
+
assert Path(pathCreated).name == "_exclusions.py"
|
|
152
|
+
|
|
153
|
+
content = Path(pathCreated).read_text(encoding="utf-8")
|
|
154
|
+
assert "dictionary2d5LeafExcludedAtPileByPile" in content
|
|
155
|
+
|