passagemath-gap-pkg-semigroups 10.6.29__cp312-abi3-musllinux_1_2_aarch64.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.

Potentially problematic release.


This version of passagemath-gap-pkg-semigroups might be problematic. Click here for more details.

Files changed (356) hide show
  1. gap/pkg/semigroups/CHANGELOG.md +1699 -0
  2. gap/pkg/semigroups/CONTRIBUTING.md +91 -0
  3. gap/pkg/semigroups/GNUmakefile +110 -0
  4. gap/pkg/semigroups/GNUmakefile.in +110 -0
  5. gap/pkg/semigroups/GPL +674 -0
  6. gap/pkg/semigroups/LICENSE +16 -0
  7. gap/pkg/semigroups/Makefile +26 -0
  8. gap/pkg/semigroups/Makefile.gappkg +225 -0
  9. gap/pkg/semigroups/PackageInfo.g +529 -0
  10. gap/pkg/semigroups/README.md +102 -0
  11. gap/pkg/semigroups/VERSIONS +112 -0
  12. gap/pkg/semigroups/aclocal.m4 +375 -0
  13. gap/pkg/semigroups/autogen.sh +25 -0
  14. gap/pkg/semigroups/bin/aarch64-unknown-linux-musl-default64-kv10/semigroups.so +0 -0
  15. gap/pkg/semigroups/config.guess +1807 -0
  16. gap/pkg/semigroups/config.log +1021 -0
  17. gap/pkg/semigroups/config.status +1131 -0
  18. gap/pkg/semigroups/config.sub +1960 -0
  19. gap/pkg/semigroups/configure +9742 -0
  20. gap/pkg/semigroups/configure.ac +71 -0
  21. gap/pkg/semigroups/data/doc/greens.pickle +1 -0
  22. gap/pkg/semigroups/data/gens/fullbool-8.pickle.gz +0 -0
  23. gap/pkg/semigroups/data/gens/fullbool.pickle.gz +0 -0
  24. gap/pkg/semigroups/data/gens/hall.pickle.gz +0 -0
  25. gap/pkg/semigroups/data/gens/reflex-6.pickle.gz +0 -0
  26. gap/pkg/semigroups/data/gens/reflex.pickle.gz +0 -0
  27. gap/pkg/semigroups/data/tst/bipart4 +10 -0
  28. gap/pkg/semigroups/data/tst/pperm10 +1 -0
  29. gap/pkg/semigroups/data/tst/tables.gz +0 -0
  30. gap/pkg/semigroups/data/tst/testdata +1 -0
  31. gap/pkg/semigroups/data/tst/testinstall.pickle +1 -0
  32. gap/pkg/semigroups/data/tst/trans3 +7 -0
  33. gap/pkg/semigroups/data/tst/trans3-old +7 -0
  34. gap/pkg/semigroups/environment.yml +7 -0
  35. gap/pkg/semigroups/gap/attributes/acting.gd +15 -0
  36. gap/pkg/semigroups/gap/attributes/acting.gi +297 -0
  37. gap/pkg/semigroups/gap/attributes/attr.gd +91 -0
  38. gap/pkg/semigroups/gap/attributes/attr.gi +1214 -0
  39. gap/pkg/semigroups/gap/attributes/dual.gd +25 -0
  40. gap/pkg/semigroups/gap/attributes/dual.gi +209 -0
  41. gap/pkg/semigroups/gap/attributes/factor.gd +17 -0
  42. gap/pkg/semigroups/gap/attributes/factor.gi +453 -0
  43. gap/pkg/semigroups/gap/attributes/homomorph.gd +84 -0
  44. gap/pkg/semigroups/gap/attributes/homomorph.gi +591 -0
  45. gap/pkg/semigroups/gap/attributes/inverse.gd +38 -0
  46. gap/pkg/semigroups/gap/attributes/inverse.gi +708 -0
  47. gap/pkg/semigroups/gap/attributes/isomorph.gd +16 -0
  48. gap/pkg/semigroups/gap/attributes/isomorph.gi +377 -0
  49. gap/pkg/semigroups/gap/attributes/isorms.gd +49 -0
  50. gap/pkg/semigroups/gap/attributes/isorms.gi +1383 -0
  51. gap/pkg/semigroups/gap/attributes/maximal.gd +16 -0
  52. gap/pkg/semigroups/gap/attributes/maximal.gi +1876 -0
  53. gap/pkg/semigroups/gap/attributes/properties.gd +109 -0
  54. gap/pkg/semigroups/gap/attributes/properties.gi +1658 -0
  55. gap/pkg/semigroups/gap/attributes/rms-translat.gd +39 -0
  56. gap/pkg/semigroups/gap/attributes/rms-translat.gi +1078 -0
  57. gap/pkg/semigroups/gap/attributes/semifp.gd +12 -0
  58. gap/pkg/semigroups/gap/attributes/semifp.gi +84 -0
  59. gap/pkg/semigroups/gap/attributes/translat.gd +474 -0
  60. gap/pkg/semigroups/gap/attributes/translat.gi +1779 -0
  61. gap/pkg/semigroups/gap/congruences/cong.gd +154 -0
  62. gap/pkg/semigroups/gap/congruences/cong.gi +351 -0
  63. gap/pkg/semigroups/gap/congruences/conginv.gd +38 -0
  64. gap/pkg/semigroups/gap/congruences/conginv.gi +589 -0
  65. gap/pkg/semigroups/gap/congruences/conglatt.gd +101 -0
  66. gap/pkg/semigroups/gap/congruences/conglatt.gi +886 -0
  67. gap/pkg/semigroups/gap/congruences/congpairs.gd +21 -0
  68. gap/pkg/semigroups/gap/congruences/congpairs.gi +272 -0
  69. gap/pkg/semigroups/gap/congruences/congpart.gd +90 -0
  70. gap/pkg/semigroups/gap/congruences/congpart.gi +449 -0
  71. gap/pkg/semigroups/gap/congruences/congrees.gd +20 -0
  72. gap/pkg/semigroups/gap/congruences/congrees.gi +313 -0
  73. gap/pkg/semigroups/gap/congruences/congrms.gd +54 -0
  74. gap/pkg/semigroups/gap/congruences/congrms.gi +1467 -0
  75. gap/pkg/semigroups/gap/congruences/congsemigraph.gd +28 -0
  76. gap/pkg/semigroups/gap/congruences/congsemigraph.gi +289 -0
  77. gap/pkg/semigroups/gap/congruences/congsimple.gd +27 -0
  78. gap/pkg/semigroups/gap/congruences/congsimple.gi +236 -0
  79. gap/pkg/semigroups/gap/congruences/conguniv.gd +20 -0
  80. gap/pkg/semigroups/gap/congruences/conguniv.gi +271 -0
  81. gap/pkg/semigroups/gap/congruences/congwordgraph.gd +21 -0
  82. gap/pkg/semigroups/gap/congruences/congwordgraph.gi +250 -0
  83. gap/pkg/semigroups/gap/elements/bipart.gd +71 -0
  84. gap/pkg/semigroups/gap/elements/bipart.gi +995 -0
  85. gap/pkg/semigroups/gap/elements/blocks.gd +31 -0
  86. gap/pkg/semigroups/gap/elements/blocks.gi +134 -0
  87. gap/pkg/semigroups/gap/elements/boolmat.gd +74 -0
  88. gap/pkg/semigroups/gap/elements/boolmat.gi +726 -0
  89. gap/pkg/semigroups/gap/elements/elements.gd +11 -0
  90. gap/pkg/semigroups/gap/elements/elements.gi +121 -0
  91. gap/pkg/semigroups/gap/elements/ffmat.gd +71 -0
  92. gap/pkg/semigroups/gap/elements/ffmat.gi +311 -0
  93. gap/pkg/semigroups/gap/elements/maxplusmat.gd +131 -0
  94. gap/pkg/semigroups/gap/elements/maxplusmat.gi +782 -0
  95. gap/pkg/semigroups/gap/elements/pbr.gd +51 -0
  96. gap/pkg/semigroups/gap/elements/pbr.gi +740 -0
  97. gap/pkg/semigroups/gap/elements/pperm.gd +11 -0
  98. gap/pkg/semigroups/gap/elements/pperm.gi +14 -0
  99. gap/pkg/semigroups/gap/elements/semiringmat.gd +136 -0
  100. gap/pkg/semigroups/gap/elements/semiringmat.gi +717 -0
  101. gap/pkg/semigroups/gap/elements/star.gd +21 -0
  102. gap/pkg/semigroups/gap/elements/star.gi +21 -0
  103. gap/pkg/semigroups/gap/elements/trans.gd +13 -0
  104. gap/pkg/semigroups/gap/elements/trans.gi +50 -0
  105. gap/pkg/semigroups/gap/fp/freeband.gd +22 -0
  106. gap/pkg/semigroups/gap/fp/freeband.gi +502 -0
  107. gap/pkg/semigroups/gap/fp/freeinverse.gd +30 -0
  108. gap/pkg/semigroups/gap/fp/freeinverse.gi +465 -0
  109. gap/pkg/semigroups/gap/fp/tietze.gd +89 -0
  110. gap/pkg/semigroups/gap/fp/tietze.gi +1578 -0
  111. gap/pkg/semigroups/gap/fp/word.gd +15 -0
  112. gap/pkg/semigroups/gap/fp/word.gi +67 -0
  113. gap/pkg/semigroups/gap/greens/acting-inverse.gi +774 -0
  114. gap/pkg/semigroups/gap/greens/acting-regular.gi +553 -0
  115. gap/pkg/semigroups/gap/greens/acting.gd +81 -0
  116. gap/pkg/semigroups/gap/greens/acting.gi +2433 -0
  117. gap/pkg/semigroups/gap/greens/froidure-pin.gd +25 -0
  118. gap/pkg/semigroups/gap/greens/froidure-pin.gi +741 -0
  119. gap/pkg/semigroups/gap/greens/generic.gd +117 -0
  120. gap/pkg/semigroups/gap/greens/generic.gi +630 -0
  121. gap/pkg/semigroups/gap/ideals/acting.gd +17 -0
  122. gap/pkg/semigroups/gap/ideals/acting.gi +1155 -0
  123. gap/pkg/semigroups/gap/ideals/froidure-pin.gd +11 -0
  124. gap/pkg/semigroups/gap/ideals/froidure-pin.gi +105 -0
  125. gap/pkg/semigroups/gap/ideals/ideals.gd +45 -0
  126. gap/pkg/semigroups/gap/ideals/ideals.gi +442 -0
  127. gap/pkg/semigroups/gap/ideals/lambda-rho.gd +16 -0
  128. gap/pkg/semigroups/gap/ideals/lambda-rho.gi +614 -0
  129. gap/pkg/semigroups/gap/libsemigroups/cong.gd +24 -0
  130. gap/pkg/semigroups/gap/libsemigroups/cong.gi +431 -0
  131. gap/pkg/semigroups/gap/libsemigroups/fpsemi.gd +16 -0
  132. gap/pkg/semigroups/gap/libsemigroups/fpsemi.gi +53 -0
  133. gap/pkg/semigroups/gap/libsemigroups/froidure-pin.gd +17 -0
  134. gap/pkg/semigroups/gap/libsemigroups/froidure-pin.gi +945 -0
  135. gap/pkg/semigroups/gap/libsemigroups/sims1.gd +38 -0
  136. gap/pkg/semigroups/gap/libsemigroups/sims1.gi +308 -0
  137. gap/pkg/semigroups/gap/main/acting.gd +36 -0
  138. gap/pkg/semigroups/gap/main/acting.gi +779 -0
  139. gap/pkg/semigroups/gap/main/froidure-pin.gd +72 -0
  140. gap/pkg/semigroups/gap/main/froidure-pin.gi +655 -0
  141. gap/pkg/semigroups/gap/main/graded.gd +26 -0
  142. gap/pkg/semigroups/gap/main/graded.gi +355 -0
  143. gap/pkg/semigroups/gap/main/lambda-rho.gd +29 -0
  144. gap/pkg/semigroups/gap/main/lambda-rho.gi +514 -0
  145. gap/pkg/semigroups/gap/main/orbits.gd +24 -0
  146. gap/pkg/semigroups/gap/main/orbits.gi +512 -0
  147. gap/pkg/semigroups/gap/main/semiact.gd +20 -0
  148. gap/pkg/semigroups/gap/main/semiact.gi +821 -0
  149. gap/pkg/semigroups/gap/main/setup.gd +61 -0
  150. gap/pkg/semigroups/gap/main/setup.gi +1094 -0
  151. gap/pkg/semigroups/gap/obsolete.gd +9 -0
  152. gap/pkg/semigroups/gap/obsolete.gi +14 -0
  153. gap/pkg/semigroups/gap/options.g +55 -0
  154. gap/pkg/semigroups/gap/semigroups/grpperm.gd +12 -0
  155. gap/pkg/semigroups/gap/semigroups/grpperm.gi +177 -0
  156. gap/pkg/semigroups/gap/semigroups/semibipart.gd +28 -0
  157. gap/pkg/semigroups/gap/semigroups/semibipart.gi +570 -0
  158. gap/pkg/semigroups/gap/semigroups/semiboolmat.gd +20 -0
  159. gap/pkg/semigroups/gap/semigroups/semiboolmat.gi +104 -0
  160. gap/pkg/semigroups/gap/semigroups/semicons.gd +52 -0
  161. gap/pkg/semigroups/gap/semigroups/semicons.gi +1194 -0
  162. gap/pkg/semigroups/gap/semigroups/semidp.gd +13 -0
  163. gap/pkg/semigroups/gap/semigroups/semidp.gi +509 -0
  164. gap/pkg/semigroups/gap/semigroups/semieunit.gd +126 -0
  165. gap/pkg/semigroups/gap/semigroups/semieunit.gi +889 -0
  166. gap/pkg/semigroups/gap/semigroups/semiex.gd +104 -0
  167. gap/pkg/semigroups/gap/semigroups/semiex.gi +1590 -0
  168. gap/pkg/semigroups/gap/semigroups/semiffmat.gd +37 -0
  169. gap/pkg/semigroups/gap/semigroups/semiffmat.gi +565 -0
  170. gap/pkg/semigroups/gap/semigroups/semifp.gd +28 -0
  171. gap/pkg/semigroups/gap/semigroups/semifp.gi +1364 -0
  172. gap/pkg/semigroups/gap/semigroups/semigraph.gd +40 -0
  173. gap/pkg/semigroups/gap/semigroups/semigraph.gi +292 -0
  174. gap/pkg/semigroups/gap/semigroups/semigrp.gd +165 -0
  175. gap/pkg/semigroups/gap/semigroups/semigrp.gi +1225 -0
  176. gap/pkg/semigroups/gap/semigroups/semimaxplus.gd +72 -0
  177. gap/pkg/semigroups/gap/semigroups/semimaxplus.gi +710 -0
  178. gap/pkg/semigroups/gap/semigroups/semintmat.gd +13 -0
  179. gap/pkg/semigroups/gap/semigroups/semintmat.gi +74 -0
  180. gap/pkg/semigroups/gap/semigroups/semipbr.gd +19 -0
  181. gap/pkg/semigroups/gap/semigroups/semipbr.gi +139 -0
  182. gap/pkg/semigroups/gap/semigroups/semipperm.gd +27 -0
  183. gap/pkg/semigroups/gap/semigroups/semipperm.gi +711 -0
  184. gap/pkg/semigroups/gap/semigroups/semiquo.gd +14 -0
  185. gap/pkg/semigroups/gap/semigroups/semiquo.gi +97 -0
  186. gap/pkg/semigroups/gap/semigroups/semiringmat.gd +16 -0
  187. gap/pkg/semigroups/gap/semigroups/semiringmat.gi +21 -0
  188. gap/pkg/semigroups/gap/semigroups/semirms.gd +19 -0
  189. gap/pkg/semigroups/gap/semigroups/semirms.gi +977 -0
  190. gap/pkg/semigroups/gap/semigroups/semitrans.gd +49 -0
  191. gap/pkg/semigroups/gap/semigroups/semitrans.gi +909 -0
  192. gap/pkg/semigroups/gap/tools/display.gd +24 -0
  193. gap/pkg/semigroups/gap/tools/display.gi +749 -0
  194. gap/pkg/semigroups/gap/tools/io.gd +17 -0
  195. gap/pkg/semigroups/gap/tools/io.gi +543 -0
  196. gap/pkg/semigroups/gap/tools/iterators.gd +16 -0
  197. gap/pkg/semigroups/gap/tools/iterators.gi +253 -0
  198. gap/pkg/semigroups/gap/tools/utils.gd +19 -0
  199. gap/pkg/semigroups/gap/tools/utils.gi +756 -0
  200. gap/pkg/semigroups/gapbind14/.ccls +18 -0
  201. gap/pkg/semigroups/gapbind14/.clang-format +104 -0
  202. gap/pkg/semigroups/gapbind14/CPPLINT.cfg +5 -0
  203. gap/pkg/semigroups/gapbind14/LICENSE +674 -0
  204. gap/pkg/semigroups/gapbind14/README.md +76 -0
  205. gap/pkg/semigroups/gapbind14/demo/.gitignore +4 -0
  206. gap/pkg/semigroups/gapbind14/demo/LICENSE +293 -0
  207. gap/pkg/semigroups/gapbind14/demo/Makefile.gappkg +220 -0
  208. gap/pkg/semigroups/gapbind14/demo/Makefile.in +19 -0
  209. gap/pkg/semigroups/gapbind14/demo/PackageInfo.g +87 -0
  210. gap/pkg/semigroups/gapbind14/demo/README.md +17 -0
  211. gap/pkg/semigroups/gapbind14/demo/configure +34 -0
  212. gap/pkg/semigroups/gapbind14/demo/gap/gapbind_demo.gd +19 -0
  213. gap/pkg/semigroups/gapbind14/demo/gap/gapbind_demo.gi +10 -0
  214. gap/pkg/semigroups/gapbind14/demo/init.g +16 -0
  215. gap/pkg/semigroups/gapbind14/demo/makedoc.g +10 -0
  216. gap/pkg/semigroups/gapbind14/demo/read.g +6 -0
  217. gap/pkg/semigroups/gapbind14/demo/src/gapbind_demo.cc +142 -0
  218. gap/pkg/semigroups/gapbind14/demo/tst/testall.g +12 -0
  219. gap/pkg/semigroups/gapbind14/include/gapbind14/cpp_fn.hpp +223 -0
  220. gap/pkg/semigroups/gapbind14/include/gapbind14/gap_include.hpp +26 -0
  221. gap/pkg/semigroups/gapbind14/include/gapbind14/gapbind14.hpp +445 -0
  222. gap/pkg/semigroups/gapbind14/include/gapbind14/tame_free_fn.hpp +420 -0
  223. gap/pkg/semigroups/gapbind14/include/gapbind14/tame_mem_fn.hpp +556 -0
  224. gap/pkg/semigroups/gapbind14/include/gapbind14/to_cpp.hpp +162 -0
  225. gap/pkg/semigroups/gapbind14/include/gapbind14/to_gap.hpp +158 -0
  226. gap/pkg/semigroups/gapbind14/src/.clang-format +108 -0
  227. gap/pkg/semigroups/gapbind14/src/gapbind14.cpp +334 -0
  228. gap/pkg/semigroups/init.g +150 -0
  229. gap/pkg/semigroups/m4/ax_append_flag.m4 +50 -0
  230. gap/pkg/semigroups/m4/ax_check_compile_flag.m4 +53 -0
  231. gap/pkg/semigroups/m4/ax_check_hpcombi.m4 +121 -0
  232. gap/pkg/semigroups/m4/ax_check_libsemigroup.m4 +68 -0
  233. gap/pkg/semigroups/m4/ax_compare_version.m4 +177 -0
  234. gap/pkg/semigroups/m4/ax_cxx_compile_stdcxx.m4 +1009 -0
  235. gap/pkg/semigroups/m4/ax_cxx_compile_stdcxx_14.m4 +34 -0
  236. gap/pkg/semigroups/m4/ax_prefix_config_h.m4 +203 -0
  237. gap/pkg/semigroups/m4/ax_pthread.m4 +522 -0
  238. gap/pkg/semigroups/m4/find_gap.m4 +94 -0
  239. gap/pkg/semigroups/makedoc.g +153 -0
  240. gap/pkg/semigroups/prerequisites.sh +62 -0
  241. gap/pkg/semigroups/read.g +105 -0
  242. gap/pkg/semigroups/release.toml +6 -0
  243. gap/pkg/semigroups/tst/extreme/README +2 -0
  244. gap/pkg/semigroups/tst/extreme/attrinv.tst +703 -0
  245. gap/pkg/semigroups/tst/extreme/bipart.tst +2803 -0
  246. gap/pkg/semigroups/tst/extreme/closure.tst +652 -0
  247. gap/pkg/semigroups/tst/extreme/cong.tst +286 -0
  248. gap/pkg/semigroups/tst/extreme/conginv.tst +43 -0
  249. gap/pkg/semigroups/tst/extreme/examples.tst +2449 -0
  250. gap/pkg/semigroups/tst/extreme/freeband.tst +37 -0
  251. gap/pkg/semigroups/tst/extreme/greens-acting-regular.tst +27 -0
  252. gap/pkg/semigroups/tst/extreme/greens-acting.tst +1999 -0
  253. gap/pkg/semigroups/tst/extreme/ideals.tst +858 -0
  254. gap/pkg/semigroups/tst/extreme/inverse.tst +1025 -0
  255. gap/pkg/semigroups/tst/extreme/maximal.tst +856 -0
  256. gap/pkg/semigroups/tst/extreme/misc.tst +4236 -0
  257. gap/pkg/semigroups/tst/extreme/monoid_pkg.tst +1488 -0
  258. gap/pkg/semigroups/tst/extreme/properties.tst +914 -0
  259. gap/pkg/semigroups/tst/extreme/semibipart.tst +2837 -0
  260. gap/pkg/semigroups/tst/extreme/semieunit.tst +49 -0
  261. gap/pkg/semigroups/tst/extreme/semiffmat.tst +353 -0
  262. gap/pkg/semigroups/tst/extreme/semigroups.tst +245 -0
  263. gap/pkg/semigroups/tst/extreme/semiiter.tst +58 -0
  264. gap/pkg/semigroups/tst/extreme/semirms.tst +1091 -0
  265. gap/pkg/semigroups/tst/extreme/transform.tst +305 -0
  266. gap/pkg/semigroups/tst/extreme/translat.tst +44 -0
  267. gap/pkg/semigroups/tst/standard/README +2 -0
  268. gap/pkg/semigroups/tst/standard/attributes/acting.tst +388 -0
  269. gap/pkg/semigroups/tst/standard/attributes/attr.tst +2404 -0
  270. gap/pkg/semigroups/tst/standard/attributes/dual.tst +308 -0
  271. gap/pkg/semigroups/tst/standard/attributes/factor.tst +629 -0
  272. gap/pkg/semigroups/tst/standard/attributes/homomorph.tst +1134 -0
  273. gap/pkg/semigroups/tst/standard/attributes/inverse.tst +1521 -0
  274. gap/pkg/semigroups/tst/standard/attributes/isomorph.tst +435 -0
  275. gap/pkg/semigroups/tst/standard/attributes/isorms.tst +1147 -0
  276. gap/pkg/semigroups/tst/standard/attributes/maximal.tst +853 -0
  277. gap/pkg/semigroups/tst/standard/attributes/properties.tst +2028 -0
  278. gap/pkg/semigroups/tst/standard/attributes/semifp.tst +53 -0
  279. gap/pkg/semigroups/tst/standard/attributes/translat.tst +796 -0
  280. gap/pkg/semigroups/tst/standard/congruences/cong.tst +1044 -0
  281. gap/pkg/semigroups/tst/standard/congruences/conginv.tst +292 -0
  282. gap/pkg/semigroups/tst/standard/congruences/conglatt.tst +421 -0
  283. gap/pkg/semigroups/tst/standard/congruences/congpairs.tst +1011 -0
  284. gap/pkg/semigroups/tst/standard/congruences/congrees.tst +288 -0
  285. gap/pkg/semigroups/tst/standard/congruences/congrms.tst +701 -0
  286. gap/pkg/semigroups/tst/standard/congruences/congsemigraph.tst +422 -0
  287. gap/pkg/semigroups/tst/standard/congruences/congsimple.tst +311 -0
  288. gap/pkg/semigroups/tst/standard/congruences/conguniv.tst +259 -0
  289. gap/pkg/semigroups/tst/standard/congruences/congwordgraph.tst +330 -0
  290. gap/pkg/semigroups/tst/standard/elements/bipart.tst +783 -0
  291. gap/pkg/semigroups/tst/standard/elements/blocks.tst +166 -0
  292. gap/pkg/semigroups/tst/standard/elements/boolmat.tst +608 -0
  293. gap/pkg/semigroups/tst/standard/elements/elements.tst +117 -0
  294. gap/pkg/semigroups/tst/standard/elements/ffmat.tst +349 -0
  295. gap/pkg/semigroups/tst/standard/elements/maxplusmat.tst +613 -0
  296. gap/pkg/semigroups/tst/standard/elements/pbr.tst +506 -0
  297. gap/pkg/semigroups/tst/standard/elements/pperm.tst +32 -0
  298. gap/pkg/semigroups/tst/standard/elements/semiringmat.tst +601 -0
  299. gap/pkg/semigroups/tst/standard/elements/trans.tst +58 -0
  300. gap/pkg/semigroups/tst/standard/fp/freeband.tst +311 -0
  301. gap/pkg/semigroups/tst/standard/fp/freeinverse.tst +147 -0
  302. gap/pkg/semigroups/tst/standard/fp/tietze.tst +780 -0
  303. gap/pkg/semigroups/tst/standard/fp/word.tst +106 -0
  304. gap/pkg/semigroups/tst/standard/greens/acting-inverse.tst +545 -0
  305. gap/pkg/semigroups/tst/standard/greens/acting-regular.tst +396 -0
  306. gap/pkg/semigroups/tst/standard/greens/acting.tst +2033 -0
  307. gap/pkg/semigroups/tst/standard/greens/froidure-pin.tst +1831 -0
  308. gap/pkg/semigroups/tst/standard/greens/generic.tst +1436 -0
  309. gap/pkg/semigroups/tst/standard/ideals/acting.tst +279 -0
  310. gap/pkg/semigroups/tst/standard/ideals/froidure-pin.tst +178 -0
  311. gap/pkg/semigroups/tst/standard/ideals/ideals.tst +380 -0
  312. gap/pkg/semigroups/tst/standard/libsemigroups/cong.tst +310 -0
  313. gap/pkg/semigroups/tst/standard/libsemigroups/froidure-pin.tst +778 -0
  314. gap/pkg/semigroups/tst/standard/libsemigroups/sims1.tst +379 -0
  315. gap/pkg/semigroups/tst/standard/main/acting.tst +411 -0
  316. gap/pkg/semigroups/tst/standard/main/froidure-pin.tst +392 -0
  317. gap/pkg/semigroups/tst/standard/main/semiact.tst +203 -0
  318. gap/pkg/semigroups/tst/standard/main/setup.tst +1144 -0
  319. gap/pkg/semigroups/tst/standard/obsolete.tst +19 -0
  320. gap/pkg/semigroups/tst/standard/options.tst +54 -0
  321. gap/pkg/semigroups/tst/standard/semigroups/grpperm.tst +581 -0
  322. gap/pkg/semigroups/tst/standard/semigroups/semibipart.tst +2635 -0
  323. gap/pkg/semigroups/tst/standard/semigroups/semiboolmat.tst +1871 -0
  324. gap/pkg/semigroups/tst/standard/semigroups/semicons.tst +1173 -0
  325. gap/pkg/semigroups/tst/standard/semigroups/semidp.tst +739 -0
  326. gap/pkg/semigroups/tst/standard/semigroups/semieunit.tst +339 -0
  327. gap/pkg/semigroups/tst/standard/semigroups/semiex.tst +2055 -0
  328. gap/pkg/semigroups/tst/standard/semigroups/semiffmat.tst +746 -0
  329. gap/pkg/semigroups/tst/standard/semigroups/semifp.tst +2702 -0
  330. gap/pkg/semigroups/tst/standard/semigroups/semigraph.tst +133 -0
  331. gap/pkg/semigroups/tst/standard/semigroups/semigrp.tst +1112 -0
  332. gap/pkg/semigroups/tst/standard/semigroups/semimaxplus.tst +654 -0
  333. gap/pkg/semigroups/tst/standard/semigroups/semipbr.tst +2142 -0
  334. gap/pkg/semigroups/tst/standard/semigroups/semipperm.tst +2169 -0
  335. gap/pkg/semigroups/tst/standard/semigroups/semiquo.tst +278 -0
  336. gap/pkg/semigroups/tst/standard/semigroups/semirms.tst +3010 -0
  337. gap/pkg/semigroups/tst/standard/semigroups/semitrans.tst +2758 -0
  338. gap/pkg/semigroups/tst/standard/tools/display.tst +1040 -0
  339. gap/pkg/semigroups/tst/standard/tools/io.tst +363 -0
  340. gap/pkg/semigroups/tst/testinstall.tst +1815 -0
  341. gap/pkg/semigroups/tst/teststandard.g +22 -0
  342. gap/pkg/semigroups/tst/workspaces/load-workspace.tst +142 -0
  343. gap/pkg/semigroups/tst/workspaces/load.g +11 -0
  344. gap/pkg/semigroups/tst/workspaces/save-workspace.tst +166 -0
  345. gap/pkg/semigroups/tst/workspaces/save.g +14 -0
  346. passagemath_gap_pkg_semigroups-10.6.29.dist-info/METADATA +93 -0
  347. passagemath_gap_pkg_semigroups-10.6.29.dist-info/METADATA.bak +94 -0
  348. passagemath_gap_pkg_semigroups-10.6.29.dist-info/RECORD +356 -0
  349. passagemath_gap_pkg_semigroups-10.6.29.dist-info/WHEEL +5 -0
  350. passagemath_gap_pkg_semigroups-10.6.29.dist-info/top_level.txt +1 -0
  351. passagemath_gap_pkg_semigroups.libs/libgcc_s-2d945d6c.so.1 +0 -0
  352. passagemath_gap_pkg_semigroups.libs/libsemigroups-81d76771.so.2.0.0 +0 -0
  353. passagemath_gap_pkg_semigroups.libs/libstdc++-85f2cd6d.so.6.0.33 +0 -0
  354. sage/all__sagemath_gap_pkg_semigroups.py +1 -0
  355. sage/libs/all__sagemath_gap_pkg_semigroups.py +1 -0
  356. sage/libs/gap_pkg_semigroups.abi3.so +0 -0
@@ -0,0 +1,756 @@
1
+ #############################################################################
2
+ ##
3
+ ## tools/utils.gi
4
+ ## Copyright (C) 2013-2022 James D. Mitchell
5
+ ##
6
+ ## Licensing information can be found in the README file of this package.
7
+ ##
8
+ #############################################################################
9
+ ##
10
+ ## This file contains utilities for use with the Semigroups package.
11
+
12
+ # No attempt has been made to get good test coverage for this file, since it
13
+ # will hopefully be binned in the near future.
14
+
15
+ # The file is organised as follows:
16
+ #
17
+ # 1. Tests - functions relating to testing Semigroups
18
+ #
19
+ # 2. Documentation - functions relating to compiling and verifying the
20
+ # documentation.
21
+
22
+ InstallGlobalFunction(ToBeat,
23
+ function(list, arg...)
24
+ local rank, rank_to_beat;
25
+ Assert(1, IsList(list));
26
+
27
+ rank := Sum(list, RankFilter);
28
+ rank_to_beat := Maximum(List(arg, x -> Sum(x, RankFilter)));
29
+
30
+ if rank > rank_to_beat then
31
+ return 0;
32
+ else
33
+ return rank_to_beat - rank + 1;
34
+ fi;
35
+ end);
36
+
37
+ #############################################################################
38
+ # 1. Tests - internal stuff . . .
39
+ #############################################################################
40
+
41
+ SEMIGROUPS.TestRec := rec();
42
+
43
+ SEMIGROUPS.TestRec.reportDiff := function(inp, expout, found, fnam, line, _)
44
+ Print("######## > Diff in:\n");
45
+ if IsStream(fnam) then
46
+ Print("test stream, line ", line, "\n");
47
+ else
48
+ Print(fnam, ":", line, "\n");
49
+ fi;
50
+ Print("# Input is:\n", inp);
51
+ Print("# Expected output:\n\033[30;42m", Chomp(expout), "\033[0m\n");
52
+ Print("# But found:\n\033[30;41m", Chomp(found), "\033[0m\n");
53
+ Print("########\n");
54
+ return;
55
+ end;
56
+
57
+ SEMIGROUPS.StartTest := function()
58
+ local record;
59
+
60
+ record := SEMIGROUPS.TestRec;
61
+
62
+ # store current info levels
63
+ record.InfoLevelInfoWarning := InfoLevel(InfoWarning);
64
+ record.InfoLevelInfoSemigroups := InfoLevel(InfoSemigroups);
65
+ record.InfoLevelInfoOrb := InfoLevel(InfoOrb);
66
+ record.InfoLevelInfoGenSS := InfoLevel(InfoGenSS);
67
+ record.InfoLevelInfoPackageLoading := InfoLevel(InfoPackageLoading);
68
+
69
+ # store current user preferences
70
+ record.PartialPermDisplayLimit :=
71
+ UserPreference("PartialPermDisplayLimit");
72
+ record.TransformationDisplayLimit :=
73
+ UserPreference("TransformationDisplayLimit");
74
+ record.NotationForPartialPerms :=
75
+ UserPreference("NotationForPartialPerms");
76
+ record.NotationForTransformations :=
77
+ UserPreference("NotationForTransformations");
78
+ record.FreeInverseSemigroupElementDisplay :=
79
+ UserPreference("semigroups", "FreeInverseSemigroupElementDisplay");
80
+ record.ViewObj :=
81
+ UserPreference("semigroups", "ViewObj");
82
+
83
+ # store current default options
84
+ record.SEMIGROUPS_DefaultOptionsRec :=
85
+ ShallowCopy(SEMIGROUPS.DefaultOptionsRec);
86
+
87
+ # set info levels
88
+ SetInfoLevel(InfoWarning, 0);
89
+ SetInfoLevel(InfoSemigroups, 0);
90
+ SetInfoLevel(InfoOrb, 0);
91
+ SetInfoLevel(InfoGenSS, 0);
92
+ SetInfoLevel(InfoPackageLoading, 0);
93
+
94
+ # set user preferences
95
+ SetUserPreference("PartialPermDisplayLimit",
96
+ 100);
97
+ SetUserPreference("TransformationDisplayLimit",
98
+ 100);
99
+ SetUserPreference("NotationForPartialPerms",
100
+ "component");
101
+ SetUserPreference("NotationForTransformations",
102
+ "input");
103
+ SetUserPreference("semigroups",
104
+ "FreeInverseSemigroupElementDisplay",
105
+ "minimal");
106
+ SetUserPreference("semigroups",
107
+ "ViewObj",
108
+ "semigroups-pkg");
109
+
110
+ # set default options
111
+ libsemigroups.set_report(false);
112
+ return;
113
+ end;
114
+
115
+ SEMIGROUPS.StopTest := function()
116
+ local record;
117
+
118
+ record := SEMIGROUPS.TestRec;
119
+
120
+ # restore info levels
121
+ SetInfoLevel(InfoWarning, record.InfoLevelInfoWarning);
122
+ SetInfoLevel(InfoSemigroups, record.InfoLevelInfoSemigroups);
123
+ SetInfoLevel(InfoOrb, record.InfoLevelInfoOrb);
124
+ SetInfoLevel(InfoGenSS, record.InfoLevelInfoGenSS);
125
+ SetInfoLevel(InfoSemigroups, record.InfoLevelInfoPackageLoading);
126
+
127
+ # restore user preferences
128
+ SetUserPreference("PartialPermDisplayLimit",
129
+ record.PartialPermDisplayLimit);
130
+ SetUserPreference("TransformationDisplayLimit",
131
+ record.TransformationDisplayLimit);
132
+ SetUserPreference("NotationForPartialPerms",
133
+ record.NotationForPartialPerms);
134
+ SetUserPreference("NotationForTransformations",
135
+ record.NotationForTransformations);
136
+ SetUserPreference("semigroups",
137
+ "FreeInverseSemigroupElementDisplay",
138
+ record.FreeInverseSemigroupElementDisplay);
139
+ SetUserPreference("semigroups",
140
+ "ViewObj",
141
+ record.ViewObj);
142
+
143
+ # restore default options
144
+ SEMIGROUPS.DefaultOptionsRec := record.SEMIGROUPS_DefaultOptionsRec;
145
+ GASMAN("collect");
146
+ return;
147
+ end;
148
+
149
+ SEMIGROUPS.RunTest := function(func)
150
+ local acting, passed;
151
+ if not (IsFunction(func) and NumberArgumentsFunction(func) = 0) then
152
+ ErrorNoReturn("the argument must be a 0-parameter function");
153
+ fi;
154
+
155
+ # Store global option
156
+ acting := SEMIGROUPS.DefaultOptionsRec.acting;
157
+
158
+ # Run tests with acting := true
159
+ Print("\033[1m");
160
+ Info(InfoWarning, 1, "Running tests with acting methods enabled");
161
+ Print("\033[0m");
162
+ SEMIGROUPS.DefaultOptionsRec.acting := true;
163
+ passed := func();
164
+
165
+ if not (IsBool(passed) and passed in [true, false]) then
166
+ ErrorNoReturn("the argument must be a function returning 'true'",
167
+ " or 'false'");
168
+ elif not passed then
169
+ SEMIGROUPS.DefaultOptionsRec.acting := acting;
170
+ return passed;
171
+ fi;
172
+
173
+ # Run tests with acting := false
174
+ Print("\033[1m");
175
+ Info(InfoWarning, 1, "Running tests with acting methods disabled");
176
+ Print("\033[0m");
177
+ SEMIGROUPS.DefaultOptionsRec.acting := false;
178
+ passed := func();
179
+
180
+ # Reset global options
181
+ SEMIGROUPS.DefaultOptionsRec.acting := acting;
182
+ return passed;
183
+ end;
184
+
185
+ SEMIGROUPS.TestDir := function(dir, arg)
186
+ local opts, name;
187
+
188
+ opts := rec(earlyStop := false,
189
+ testOptions := ShallowCopy(SEMIGROUPS.TestRec));
190
+ opts.testOptions.showProgress := false;
191
+ if Length(arg) = 1 and IsRecord(arg[1]) then
192
+ # Override default options with input ones.
193
+ for name in RecNames(arg[1]) do
194
+ opts.testOptions.(name) := arg[1].(name);
195
+ od;
196
+ # To allow the option from tst/teststandard.g to be processed
197
+ if "suppressStatusMessage" in RecNames(arg[1]) then
198
+ opts.suppressStatusMessage := arg[1].suppressStatusMessage;
199
+ fi;
200
+ elif Length(arg) <> 0 then
201
+ ErrorNoReturn("there must be no arguments, or the argument ",
202
+ "must be a record");
203
+ fi;
204
+ return SEMIGROUPS.RunTest({} -> TestDirectory(dir, opts));
205
+ end;
206
+
207
+ #############################################################################
208
+ # 1. Tests - user/global functions
209
+ #############################################################################
210
+
211
+ InstallGlobalFunction(SemigroupsTestInstall,
212
+ function(arg...)
213
+ local opts, name;
214
+ opts := ShallowCopy(SEMIGROUPS.TestRec);
215
+ if Length(arg) = 1 and IsRecord(arg[1]) then
216
+ # Override default options with input ones.
217
+ for name in RecNames(arg[1]) do
218
+ opts.(name) := arg[1].(name);
219
+ od;
220
+ elif Length(arg) <> 0 then
221
+ ErrorNoReturn("there must be no arguments, or the argument ",
222
+ "must be a record");
223
+ fi;
224
+ return SEMIGROUPS.RunTest(function()
225
+ return Test(Filename(DirectoriesPackageLibrary("semigroups",
226
+ "tst"),
227
+ "testinstall.tst"), opts);
228
+ end);
229
+ end);
230
+
231
+ InstallGlobalFunction(SemigroupsTestStandard,
232
+ function(arg...)
233
+ return SEMIGROUPS.TestDir(DirectoriesPackageLibrary("semigroups",
234
+ "tst/standard/")[1]![1],
235
+ arg);
236
+ end);
237
+
238
+ InstallGlobalFunction(SemigroupsTestExtreme,
239
+ function(arg...)
240
+ if IsEmpty(arg) then
241
+ arg := [rec(showProgress := "some")];
242
+ elif IsRecord(arg[1]) and not IsBound(arg[1].showProgress) then
243
+ arg[1].showProgress := "some";
244
+ fi;
245
+ return SEMIGROUPS.TestDir(DirectoriesPackageLibrary("semigroups",
246
+ "tst/extreme/"),
247
+ arg);
248
+ end);
249
+
250
+ InstallGlobalFunction(SemigroupsTestAll,
251
+ function(arg...)
252
+ SemigroupsMakeDoc();
253
+ if not CallFuncList(SemigroupsTestInstall, arg) then
254
+ Print("Abort: SemigroupsTestInstall failed . . . \n");
255
+ return false;
256
+ elif not CallFuncList(SemigroupsTestStandard, arg) then
257
+ Print("Abort: SemigroupsTestStandard failed . . . \n");
258
+ return false;
259
+ fi;
260
+
261
+ return SEMIGROUPS.TestManualExamples();
262
+ end);
263
+
264
+ ################################################################################
265
+ # 2. Documentation - internal stuff
266
+ ################################################################################
267
+
268
+ BindGlobal("SEMIGROUPS_DocXMLFiles",
269
+ function()
270
+ local dir;
271
+ dir := DirectoriesPackageLibrary("Semigroups", "doc")[1];
272
+ return Filtered(DirectoryContents(dir),
273
+ x -> (not StartsWith(x, "."))
274
+ and (not StartsWith(x, "z-"))
275
+ and EndsWith(x, ".xml"));
276
+ end);
277
+
278
+ InstallGlobalFunction(SemigroupsMakeDoc,
279
+ function()
280
+ local fname;
281
+ fname := Filename(DirectoriesPackageLibrary("Semigroups", ""), "makedoc.g");
282
+ Read(fname);
283
+ end);
284
+
285
+ SEMIGROUPS.ManualExamples := function()
286
+ if Filename(DirectoriesPackageLibrary("semigroups", "doc"),
287
+ "main.xml") = fail then
288
+ # The file main.xml only exists if AutoDoc has been run.
289
+ SemigroupsMakeDoc();
290
+ fi;
291
+ return ExtractExamples(DirectoriesPackageLibrary("semigroups", "doc"),
292
+ "main.xml",
293
+ SEMIGROUPS_DocXMLFiles(),
294
+ "Single");
295
+ end;
296
+
297
+ SEMIGROUPS.RunExamples := function(exlists, nums, excluded)
298
+ local oldscr, pad, total, fails, num, HighlightWS, l, sp, bad, s, start_time,
299
+ test, end_time, elapsed, pex, j, ex, i;
300
+
301
+ oldscr := SizeScreen();
302
+ SizeScreen([72, oldscr[2]]);
303
+ pad := function(nr)
304
+ nr := Length(String(Maximum(nums))) - Length(String(nr)) + 1;
305
+ return List([1 .. nr], x -> ' ');
306
+ end;
307
+ total := 0;
308
+ fails := [];
309
+ num := 0;
310
+
311
+ HighlightWS := function(str)
312
+ str := Chomp(str);
313
+ return ReplacedString(str, " \n", "~\n");
314
+ end;
315
+
316
+ for j in [1 .. Length(exlists)] do
317
+ if j in excluded then
318
+ Print("\033[44m# Skipping example ",
319
+ j,
320
+ pad(j),
321
+ " . . .\033[0m\n");
322
+ else
323
+ l := exlists[j];
324
+ Print("# Running example ", nums[j], pad(nums[j]), " . . .");
325
+ START_TEST("");
326
+ num := num + 1;
327
+ for ex in l do
328
+ sp := SplitString(ex[1], "\n", "");
329
+ bad := Filtered([1 .. Length(sp)], i -> Length(sp[i]) > 72);
330
+ s := InputTextString(ex[1]);
331
+
332
+ start_time := IO_gettimeofday();
333
+ test := Test(s, rec(compareFunction := "uptowhitespace",
334
+ ignoreComments := false,
335
+ width := 72,
336
+ EQ := \=,
337
+ reportDiff := Ignore,
338
+ showProgress := false));
339
+ end_time := IO_gettimeofday();
340
+ CloseStream(s);
341
+ elapsed := (end_time.tv_sec - start_time.tv_sec) * 1000
342
+ + Int((end_time.tv_usec - start_time.tv_usec) / 1000);
343
+ total := total + elapsed;
344
+ pex := TEST.lastTestData;
345
+
346
+ Print(" msecs: ", elapsed, "\n");
347
+
348
+ if Length(bad) > 0 then
349
+ Print("\033[31m# WARNING: Overlong lines ",
350
+ bad,
351
+ " in ",
352
+ ex[2]{[1 .. 3]},
353
+ "\033[0m\n");
354
+ AddSet(fails, nums[j]);
355
+ fi;
356
+
357
+ if test = false then
358
+ for i in [1 .. Length(pex[1])] do
359
+ if pex[2][i] <> pex[4][i] then
360
+ Print("########> Diff in:\n",
361
+ "# ", ex[2][1], ":", ex[2][2],
362
+ "\n# Input is:\n");
363
+ PrintFormattedString(pex[1][i]);
364
+ Print("# Expected output:\n\033[30;42m");
365
+ PrintFormattedString(HighlightWS(pex[2][i]));
366
+ Print("\033[0m\n# But found:\n\033[30;41m");
367
+ PrintFormattedString(HighlightWS(pex[4][i]));
368
+ Print("\033[0m\n########\n");
369
+ AddSet(fails, nums[j]);
370
+ fi;
371
+ od;
372
+ fi;
373
+ od;
374
+ fi;
375
+ od;
376
+ SizeScreen(oldscr);
377
+ if Length(exlists) > 1 then
378
+ PrintFormatted("# {} failures in {} examples . . . msecs: {}\n",
379
+ Length(fails),
380
+ Sum(exlists, Length),
381
+ total);
382
+ fi;
383
+ if not IsEmpty(fails) then
384
+ Print("# Failed manual examples are:\n");
385
+ return fails;
386
+ fi;
387
+ return true;
388
+ end;
389
+
390
+ SEMIGROUPS.TestManualExamples := function(arg...)
391
+ local ex, nums, doc, tree, mansect, tester, actual, omit, acting, passed,
392
+ str;
393
+
394
+ ex := SEMIGROUPS.ManualExamples();
395
+ if IsEmpty(arg) then
396
+ nums := [1 .. Length(ex)];
397
+ elif Length(arg) = 1 then
398
+ if IsPosInt(arg[1]) and arg[1] <= Length(ex) then
399
+ ex := [ex[arg[1]]];
400
+ nums := [arg[1]];
401
+ elif IsHomogeneousList(arg[1])
402
+ and ForAll(arg[1], x -> IsPosInt(x) and x <= Length(ex)) then
403
+ ex := SEMIGROUPS.ManualExamples(){arg[1]};
404
+ nums := arg[1];
405
+ elif IsString(arg[1]) then
406
+ doc := ComposedXMLString(Concatenation(SEMIGROUPS.PackageDir, "/doc"),
407
+ "main.xml",
408
+ SEMIGROUPS_DocXMLFiles(),
409
+ true);
410
+ tree := ParseTreeXMLString(doc[1]);
411
+ CheckAndCleanGapDocTree(tree);
412
+ mansect := XMLElements(tree, "ManSection");
413
+ tester := function(record)
414
+ return IsBound(record.content[1].attributes.Name)
415
+ and record.content[1].attributes.Name = arg[1];
416
+ end;
417
+ mansect := First(mansect, tester);
418
+ if mansect = fail then
419
+ ErrorNoReturn("did not find a man section named ", arg[1]);
420
+ fi;
421
+ actual := ExtractExamplesXMLTree(mansect, "Single");
422
+ nums := [PositionProperty(ex, x -> x[1][1] = actual[1][1][1])];
423
+ ex := actual;
424
+ else
425
+ ErrorNoReturn("the argument must be a pos int or list of pos ints");
426
+ fi;
427
+ elif Length(arg) > 1 then
428
+ ErrorNoReturn("there should be 0 or 1 arguments");
429
+ fi;
430
+
431
+ omit := SEMIGROUPS.OmitFromTests;
432
+ if Length(omit) > 0 then
433
+ Print("# not testing examples containing the strings");
434
+ for str in omit do
435
+ ex := Filtered(ex, x -> PositionSublist(x[1][1], str) = fail);
436
+ Print(", \"", str, "\"");
437
+ od;
438
+ Print(" . . .\n");
439
+ fi;
440
+
441
+ acting := SEMIGROUPS.DefaultOptionsRec.acting;
442
+ Apply(ex, function(x)
443
+ x[1][1] := StripBeginEnd(x[1][1], "\n");
444
+ return x;
445
+ end);
446
+
447
+ SEMIGROUPS.DefaultOptionsRec.acting := true;
448
+ SEMIGROUPS.StartTest();
449
+ passed := SEMIGROUPS.RunExamples(ex, nums, []);
450
+ SEMIGROUPS.StopTest();
451
+
452
+ SEMIGROUPS.DefaultOptionsRec.acting := acting;
453
+ return passed;
454
+ end;
455
+
456
+ # The following is based on doc/ref/testconsistency.g
457
+
458
+ # Detect which ManSection should be used to document obj. Returns one of
459
+ # "Func", "Oper", "Meth", "Filt", "Prop", "Attr", "Var", "Fam", "InfoClass"
460
+ #
461
+ # See PRINT_OPERATION where some of the code below is borrowed
462
+
463
+ SEMIGROUPS.ManSectionType := function(op)
464
+ local class, flags, types, catok, repok, propok, seenprop, t;
465
+ if IsInfoClass(op) then
466
+ return "InfoClass";
467
+ elif IsFamily(op) then
468
+ return "Fam";
469
+ elif not IsFunction(op) then
470
+ return "Var";
471
+ elif IsFunction(op) and not IsOperation(op) then
472
+ return "Func";
473
+ elif IsOperation(op) then
474
+ class := "Oper";
475
+ if IS_IDENTICAL_OBJ(op, IS_OBJECT) then
476
+ class := "Filt";
477
+ elif IS_CONSTRUCTOR(op) then
478
+ class := "Constructor";
479
+ # seem to never get one
480
+ elif IsFilter(op) then
481
+ class := "Filt";
482
+ flags := TRUES_FLAGS(FLAGS_FILTER(op));
483
+ types := INFO_FILTERS{flags};
484
+ catok := true;
485
+ repok := true;
486
+ propok := true;
487
+ seenprop := false;
488
+ for t in types do
489
+ if not t in FNUM_REPS then
490
+ repok := false;
491
+ fi;
492
+ if not t in FNUM_CATS then
493
+ catok := false;
494
+ fi;
495
+ if not t in FNUM_PROS and not t in FNUM_TPRS then
496
+ propok := false;
497
+ fi;
498
+ if t in FNUM_PROS then
499
+ seenprop := true;
500
+ fi;
501
+ od;
502
+ if seenprop and propok then
503
+ class := "Prop";
504
+ elif catok then
505
+ class := "Filt";
506
+ # in PRINT_OPERATION - "Category";
507
+ elif repok then
508
+ class := "Filt";
509
+ # in PRINT_OPERATION - "Representation";
510
+ fi;
511
+ elif Tester(op) <> false then
512
+ # op is an attribute
513
+ class := "Attr";
514
+ fi;
515
+ return class;
516
+ else
517
+ return fail;
518
+ fi;
519
+ end;
520
+
521
+ # Checks whether ManSections are using the right kind of elements
522
+
523
+ SEMIGROUPS.CheckManSectionTypes := function(doc, verbose...)
524
+ local display_warnings, types, r, x, errcount, name, pos, obj, man, y, yint,
525
+ referrcount, warncount, type, matches, match, matches2, stats,
526
+ elt, t, s;
527
+
528
+ if IsEmpty(verbose) then
529
+ display_warnings := false;
530
+ else
531
+ display_warnings := verbose[1];
532
+ fi;
533
+ types := ["Func", "Oper", "Meth", "Filt", "Prop", "Attr", "Var", "Fam",
534
+ "InfoClass"];
535
+ r := ParseTreeXMLString(doc[1]);
536
+ CheckAndCleanGapDocTree(r);
537
+ x := XMLElements(r, types);
538
+ errcount := 0;
539
+ Print("****************************************************************\n");
540
+ Print("*** Checking types in ManSections \n");
541
+ Print("****************************************************************\n");
542
+ for elt in x do
543
+ name := elt.attributes.Name;
544
+ if not name in ["IsBound", "Unbind", "Info", "Assert", "TryNextMethod",
545
+ "QUIT", "-infinity"] then
546
+ if not IsBoundGlobal(name) then
547
+ pos := OriginalPositionDocument(doc[2], elt.start);
548
+ Print(pos[1], ":", pos[2], " : ", name, " is unbound \n");
549
+ errcount := errcount + 1;
550
+ else
551
+ obj := ValueGlobal(name);
552
+ man := SEMIGROUPS.ManSectionType(obj);
553
+ # we allow to use "Meth" for "Oper" but probably should issue a warning
554
+ # if there is no at least one "Oper" for any "Meth"
555
+ if (man <> elt.name) and
556
+ not (man in ["Attr", "Prop", "Oper"] and elt.name = "Meth") then
557
+ pos := OriginalPositionDocument(doc[2], elt.start);
558
+ Print(pos[1], ":", pos[2], " : ", name, " uses ", elt.name,
559
+ " instead of ", man, "\n");
560
+ errcount := errcount + 1;
561
+ fi;
562
+ fi;
563
+ fi;
564
+ od;
565
+
566
+ Print("****************************************************************\n");
567
+ Print("*** Checking types in cross-references \n");
568
+ Print("****************************************************************\n");
569
+ y := XMLElements(r, ["Ref"]);
570
+ Print("Found ", Length(y), " Ref elements ");
571
+ yint := Filtered(y, elt -> not IsBound(elt.attributes.BookName)
572
+ or (IsBound(elt.attributes.BookName)
573
+ and elt.attributes.BookName = "ref"));
574
+ Print("including ", Length(yint), " within the Reference manual\n");
575
+ y := Filtered(yint, elt -> ForAny(types, t -> IsBound(elt.attributes.(t))));
576
+
577
+ referrcount := 0;
578
+ warncount := 0;
579
+ for elt in y do
580
+ type := First(types, t -> IsBound(elt.attributes.(t)));
581
+ if type <> fail then
582
+ matches := Filtered(x, t -> t.attributes.Name = elt.attributes.(type));
583
+ if IsEmpty(matches) then
584
+ pos := OriginalPositionDocument(doc[2], elt.start);
585
+ Print(pos[1], ":", pos[2], " : no match for ", type, " := ",
586
+ elt.attributes.(type), "\n");
587
+ referrcount := referrcount + 1;
588
+ continue;
589
+ elif Length(matches) = 1 then
590
+ match := matches[1];
591
+ elif IsBound(elt.attributes.Label) then
592
+ matches := Filtered(matches, t -> IsBound(t.attributes.Label));
593
+ matches := Filtered(matches, t -> t.attributes.Label =
594
+ elt.attributes.Label);
595
+ if Length(matches) > 1 then
596
+ ErrorNoReturn("Multiple labels - this should not happen!");
597
+ fi;
598
+ match := matches[1];
599
+ else
600
+ matches2 := Filtered(matches, t -> not IsBound(t.attributes.Label));
601
+ if IsEmpty(matches2) then
602
+ pos := OriginalPositionDocument(doc[2], elt.start);
603
+ Print(pos[1], ":", pos[2],
604
+ " : no match (wrong type or missing label?) for ", type, " := ",
605
+ elt.attributes.(type), "\n");
606
+ Print(" Suggestions: \n");
607
+ matches := Filtered(matches, t -> IsBound(t.attributes.Label));
608
+ for t in matches do
609
+ Print("Use ", t.name, " with Label := \"", t.attributes.Label,
610
+ "\" (for Arg := \"", t.attributes.Arg, "\")\n");
611
+ od;
612
+
613
+ referrcount := referrcount + 1;
614
+ continue;
615
+ elif Length(matches2) > 1 then
616
+ ErrorNoReturn("Multiple labels - this should not happen!");
617
+ else
618
+ match := matches[1];
619
+ fi;
620
+ fi;
621
+ if match.name <> type then
622
+ pos := OriginalPositionDocument(doc[2], elt.start);
623
+ if display_warnings then
624
+ Print(pos[1], ":", pos[2], " : Ref to ", elt.attributes.(type),
625
+ " uses ", type, " instead of ", match.name, "\n");
626
+ fi;
627
+ warncount := warncount + 1;
628
+ fi;
629
+ fi;
630
+ od;
631
+
632
+ Print("****************************************************************\n");
633
+ stats := Collected(List(x, elt -> elt.name));
634
+ Print("Selected ", Length(x), " ManSections of the following types:\n");
635
+ for s in stats do
636
+ Print(s[1], " - ", s[2], "\n");
637
+ od;
638
+ Print("Found ", errcount, " errors in ManSection types \n");
639
+
640
+ Print("Selected ", Length(y), " Ref elements referring to ManSections \n");
641
+ Print("Found ", referrcount, " errors and ", warncount,
642
+ " warnings in Ref elements \n");
643
+
644
+ if display_warnings then
645
+ Print("To suppress warnings, use SEMIGROUPS.CheckManSectionTypes",
646
+ "(doc,false) or with one argument\n");
647
+ else
648
+ Print("To show warnings, use SEMIGROUPS.CheckManSectionTypes(doc,true);",
649
+ "\n");
650
+ fi;
651
+ Print("****************************************************************\n");
652
+ return errcount = 0;
653
+ end;
654
+
655
+ SEMIGROUPS.CheckDocCoverage := function(doc)
656
+ local r, x, with, without, mansect, pos, y;
657
+ r := ParseTreeXMLString(doc[1]);
658
+ CheckAndCleanGapDocTree(r);
659
+ x := XMLElements(r, ["ManSection"]);
660
+ with := 0;
661
+ without := 0;
662
+ Print("****************************************************************\n");
663
+ Print("*** Looking for ManSections having no examples \n");
664
+ Print("****************************************************************\n");
665
+ for mansect in x do
666
+ pos := OriginalPositionDocument(doc[2], mansect.start);
667
+ y := XMLElements(mansect, ["Example"]);
668
+ if IsEmpty(y) then
669
+ if IsBound(mansect.content[1].attributes) and
670
+ IsBound(mansect.content[1].attributes.Name) then
671
+ Print(pos[1], ":", pos[2], " : ", mansect.content[1].attributes.Name);
672
+ elif IsBound(mansect.content[2].attributes) and
673
+ IsBound(mansect.content[2].attributes.Name) then
674
+ Print(pos[1], ":", pos[2], " : ", mansect.content[2].attributes.Name);
675
+ else
676
+ Print(pos[1], ":", pos[2], " : ",
677
+ mansect.content[1].content[1].content);
678
+ fi;
679
+ without := without + 1;
680
+ Print("\n");
681
+ else
682
+ with := with + 1;
683
+ fi;
684
+ od;
685
+ Print("****************************************************************\n");
686
+ Print("*** Doc coverage report \n");
687
+ Print("****************************************************************\n");
688
+ Print(Length(x), " mansections \n");
689
+ Print(with, " with examples \n");
690
+ Print(without, " without examples \n");
691
+ end;
692
+
693
+ SEMIGROUPS.CheckManualConsistency := function()
694
+ local doc;
695
+
696
+ doc := ComposedXMLString(Concatenation(SEMIGROUPS.PackageDir, "/doc"),
697
+ "main.xml",
698
+ SEMIGROUPS_DocXMLFiles(),
699
+ true);
700
+ SEMIGROUPS.CheckDocCoverage(doc);
701
+ return SEMIGROUPS.CheckManSectionTypes(doc, true);
702
+ end;
703
+
704
+ SEMIGROUPS.DocumentedPackageVariables := function()
705
+ local doc, r, x, out, mansect, record;
706
+ doc := ComposedXMLString(Concatenation(SEMIGROUPS.PackageDir, "/doc"),
707
+ "main.xml",
708
+ SEMIGROUPS_DocXMLFiles(),
709
+ true);
710
+ r := ParseTreeXMLString(doc[1]);
711
+ CheckAndCleanGapDocTree(r);
712
+ x := XMLElements(r, ["ManSection"]);
713
+ out := [];
714
+ for mansect in x do
715
+ for record in mansect.content do
716
+ if IsBound(record.attributes) and IsBound(record.attributes.Name) then
717
+ AddSet(out, record.attributes.Name);
718
+ fi;
719
+ od;
720
+ od;
721
+ return out;
722
+ end;
723
+
724
+ # info := PackageVariablesInfo("semigroups", "3.0.0");;
725
+ # which must be run before loading Semigroups
726
+ SEMIGROUPS.UndocumentedPackageVariables := function(info)
727
+ local out, suppressions, obsoletes, documented, name, part, entry;
728
+
729
+ out := [];
730
+ suppressions := ["*", ".", "/", "<", "=", "[]", "^", "in", "{}",
731
+ "HTAdd_TreeHash_C", "HTValue_TreeHash_C"];
732
+
733
+ obsoletes := [];
734
+ documented := SEMIGROUPS.DocumentedPackageVariables();
735
+
736
+ for part in info do
737
+ if (part[1]{[1 .. 3]} = "new" or part[1]{[1 .. 9]} = "other new") and not
738
+ part[1] = "new methods" then
739
+ for entry in part[2] do
740
+ name := entry[1][1];
741
+ if not name in suppressions
742
+ and not name in obsoletes
743
+ and not name in documented
744
+ and not ForAll(name, x -> IsUpperAlphaChar(x) or x = '_')
745
+ and not (Length(name) >= 3 and name{[1 .. 3]} = "Has")
746
+ and not (Length(name) >= 3 and name{[1 .. 3]} = "Set")
747
+ and not (Length(name) >= 11 and name{[1 .. 11]} = "SEMIGROUPS_")
748
+ and not (Length(name) >= 2
749
+ and name{[Length(name) - 1, Length(name)]} = "NC") then
750
+ AddSet(out, [name, JoinStringsWithSeparator(entry[2], ":")]);
751
+ fi;
752
+ od;
753
+ fi;
754
+ od;
755
+ return out;
756
+ end;