passagemath-gap-pkg-semigroups 10.6.29__cp312-abi3-macosx_14_0_arm64.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 (354) 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-apple-darwin23-default64-kv10/semigroups.so +0 -0
  15. gap/pkg/semigroups/config.guess +1807 -0
  16. gap/pkg/semigroups/config.log +1157 -0
  17. gap/pkg/semigroups/config.status +1132 -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 +354 -0
  349. passagemath_gap_pkg_semigroups-10.6.29.dist-info/WHEEL +6 -0
  350. passagemath_gap_pkg_semigroups-10.6.29.dist-info/top_level.txt +1 -0
  351. passagemath_gap_pkg_semigroups.dylibs/libsemigroups.2.dylib +0 -0
  352. sage/all__sagemath_gap_pkg_semigroups.py +1 -0
  353. sage/libs/all__sagemath_gap_pkg_semigroups.py +1 -0
  354. sage/libs/gap_pkg_semigroups.abi3.so +0 -0
@@ -0,0 +1,779 @@
1
+ ############################################################################
2
+ ##
3
+ ## main/acting.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
+
11
+ # local declarations . . .
12
+
13
+ # acting semigroups...
14
+
15
+ # same method for ideals
16
+
17
+ InstallMethod(SemigroupData, "for an acting inverse semigroup rep",
18
+ [IsInverseActingSemigroupRep], ReturnFail);
19
+
20
+ # different method for ideals
21
+
22
+ InstallMethod(SemigroupData, "for an acting semigroup and lambda orb",
23
+ [IsActingSemigroup, IsLambdaOrb],
24
+ function(S, lambda_orb)
25
+ local gens, data;
26
+
27
+ gens := List(GeneratorsOfSemigroup(S), x -> ConvertToInternalElement(S, x));
28
+
29
+ data := rec(gens := gens,
30
+ genstoapply := [1 .. Length(gens)],
31
+ graph := [EmptyPlist(Length(gens))],
32
+ ht := HTCreate(gens[1], rec(treehashsize :=
33
+ SEMIGROUPS.OptionsRec(S).hashlen)),
34
+ init := false,
35
+ lambda_orb := lambda_orb,
36
+ lambdarhoht := [],
37
+ lenreps := [0],
38
+ orbit := [[,,, FakeOne(gens)]],
39
+ orblookup1 := [],
40
+ orblookup2 := [],
41
+ parent := S,
42
+ pos := 0,
43
+ reps := [],
44
+ repslens := [],
45
+ repslookup := [],
46
+ rholookup := [1],
47
+ schreiergen := [fail],
48
+ schreiermult := [fail],
49
+ schreierpos := [fail],
50
+ stopper := false);
51
+
52
+ Objectify(NewType(FamilyObj(S), IsSemigroupData), data);
53
+
54
+ return data;
55
+ end);
56
+
57
+ InstallMethod(SemigroupData, "for an acting semigroup",
58
+ [IsActingSemigroup], S -> SemigroupData(S, LambdaOrb(S)));
59
+
60
+ # different method for regular ideals, regular/inverse semigroups, same method
61
+ # for non-regular ideals
62
+
63
+ InstallMethod(\in,
64
+ "for a multiplicative element and acting semigroup",
65
+ [IsMultiplicativeElement, IsActingSemigroup],
66
+ function(x, S)
67
+ local data, ht, lambda, lambdao, l, m, rho, rhoo, lambdarhoht, rholookup,
68
+ new, lookfunc, schutz, ind, reps, repslens, bound, max, membership,
69
+ lambdaperm, n, found, i;
70
+
71
+ if ElementsFamily(FamilyObj(S)) <> FamilyObj(x)
72
+ or (IsActingSemigroupWithFixedDegreeMultiplication(S)
73
+ and ActionDegree(x) <> ActionDegree(S))
74
+ or (ActionDegree(x) > ActionDegree(S)) then
75
+ return false;
76
+ elif HasFroidurePin(S) and Position(S, x) <> fail then
77
+ # check if x is already known to be in S
78
+ return true;
79
+ elif HasFroidurePin(S) and IsEnumerated(S) then
80
+ return false;
81
+ elif not (IsMonoid(S) and IsOne(x)) then
82
+ if Length(Generators(S)) > 0
83
+ and ActionRank(S)(x) >
84
+ MaximumList(List(Generators(S), y -> ActionRank(S)(y))) then
85
+ return false;
86
+ fi;
87
+ fi;
88
+
89
+ if HasMinimalIdeal(S) then
90
+ if ActionRank(S)(x) < ActionRank(S)(Representative(MinimalIdeal(S))) then
91
+ return false;
92
+ fi;
93
+ fi;
94
+
95
+ x := ConvertToInternalElement(S, x);
96
+
97
+ data := SemigroupData(S);
98
+ ht := data!.ht;
99
+
100
+ # look for lambda!
101
+ lambda := LambdaFunc(S)(x);
102
+ lambdao := LambdaOrb(S);
103
+ if not IsClosedOrbit(lambdao) then
104
+ Enumerate(lambdao, infinity);
105
+ fi;
106
+
107
+ l := Position(lambdao, lambda);
108
+
109
+ if l = fail then
110
+ return false;
111
+ fi;
112
+
113
+ # strongly connected component of lambda orb
114
+ m := OrbSCCLookup(lambdao)[l];
115
+
116
+ # make sure lambda of x is in the first place of its scc
117
+ if l <> OrbSCC(lambdao)[m][1] then
118
+ x := x * LambdaOrbMult(lambdao, m, l)[2];
119
+ fi;
120
+
121
+ # check if x is an existing R-rep
122
+ if HTValue(ht, x) <> fail then
123
+ return true;
124
+ fi;
125
+
126
+ # check if rho is already known
127
+ rho := RhoFunc(S)(x);
128
+ rhoo := RhoOrb(S);
129
+ l := Position(rhoo, rho);
130
+ lambdarhoht := data!.lambdarhoht;
131
+ rholookup := data!.rholookup;
132
+
133
+ new := false;
134
+
135
+ if l = fail then
136
+ # rho is not already known, so we look for it
137
+ if IsClosedOrbit(rhoo) then
138
+ return false;
139
+ fi;
140
+
141
+ lookfunc := {_, x} -> rhoo[rholookup[x[6]]] = rho;
142
+
143
+ data := Enumerate(data, infinity, lookfunc);
144
+ l := PositionOfFound(data);
145
+
146
+ # rho is not found, so x not in S
147
+ if l = false then
148
+ return false;
149
+ fi;
150
+ l := rholookup[l];
151
+ new := true;
152
+ fi;
153
+
154
+ if not IsBound(lambdarhoht[l]) or not IsBound(lambdarhoht[l][m]) then
155
+ new := true;
156
+ # lambda-rho-combination not yet seen
157
+ if IsClosedData(data) then
158
+ return false;
159
+ fi;
160
+
161
+ lookfunc :=
162
+ {data, x} -> IsBound(lambdarhoht[l]) and IsBound(lambdarhoht[l][m]);
163
+
164
+ data := Enumerate(data, infinity, lookfunc);
165
+
166
+ if not IsBound(lambdarhoht[l]) or not IsBound(lambdarhoht[l][m]) then
167
+ return false;
168
+ fi;
169
+ fi;
170
+
171
+ schutz := LambdaOrbStabChain(lambdao, m);
172
+ ind := lambdarhoht[l][m];
173
+ # the index of the list of reps with same lambda-rho value as x.
174
+
175
+ # if the Schutzenberger group is the symmetric group, then x in S!
176
+ if schutz = true then
177
+ return true;
178
+ fi;
179
+
180
+ reps := data!.reps;
181
+ repslens := data!.repslens;
182
+
183
+ bound := LambdaBound(S)(LambdaRank(S)(lambda));
184
+ if IsPosInt(bound) then
185
+ max := bound / Size(LambdaOrbSchutzGp(lambdao, m));
186
+ else
187
+ max := bound;
188
+ fi;
189
+
190
+ if repslens[m][ind] = max then
191
+ return true;
192
+ fi;
193
+
194
+ membership := SchutzGpMembership(S);
195
+
196
+ # if schutz is false, then f has to be an R-rep which it is not...
197
+ if schutz <> false then
198
+ # check if x already corresponds to an element of reps[m][ind]
199
+ lambdaperm := LambdaPerm(S);
200
+ for n in [1 .. repslens[m][ind]] do
201
+ if membership(schutz, lambdaperm(reps[m][ind][n], x)) then
202
+ return true;
203
+ fi;
204
+ od;
205
+ elif new and HTValue(ht, x) <> fail then
206
+ return true;
207
+ fi;
208
+
209
+ if IsClosedData(data) then
210
+ return false;
211
+ elif repslens[m][ind] < max then
212
+ # enumerate until we find f or finish
213
+ n := repslens[m][ind];
214
+ lookfunc := {data, x} -> repslens[m][ind] > n;
215
+ if schutz = false then
216
+ repeat
217
+ # look for more R-reps with same lambda-rho value
218
+ data := Enumerate(data, infinity, lookfunc);
219
+ found := data!.found;
220
+ if found <> false then
221
+ if repslens[m][ind] = max or x = data[found][4] then
222
+ return true;
223
+ fi;
224
+ fi;
225
+ until found = false;
226
+ else
227
+ repeat
228
+ # look for more R-reps with same lambda-rho value
229
+ data := Enumerate(data, infinity, lookfunc);
230
+ found := data!.found;
231
+ if found <> false then
232
+ if repslens[m][ind] = max then
233
+ return true;
234
+ fi;
235
+ for i in [n + 1 .. repslens[m][ind]] do
236
+ if membership(schutz, lambdaperm(reps[m][ind][i], x)) then
237
+ return true;
238
+ fi;
239
+ od;
240
+ n := repslens[m][ind];
241
+ fi;
242
+ until found = false;
243
+ fi;
244
+ fi;
245
+ return false;
246
+ end);
247
+
248
+ # different for regular/inverse/ideals
249
+
250
+ InstallMethod(Size, "for an acting semigroup",
251
+ [IsActingSemigroup], 2, # to beat the method for a Rees 0-matrix semigroup
252
+ function(S)
253
+ local data, lenreps, repslens, o, scc, size, n, m, i;
254
+
255
+ data := Enumerate(SemigroupData(S), infinity, ReturnFalse);
256
+ lenreps := data!.lenreps;
257
+ repslens := data!.repslens;
258
+ o := LambdaOrb(S);
259
+ scc := OrbSCC(o);
260
+
261
+ size := 0;
262
+
263
+ for m in [2 .. Length(scc)] do
264
+ n := Size(LambdaOrbSchutzGp(o, m)) * Length(scc[m]);
265
+ for i in [1 .. lenreps[m]] do
266
+ size := size + n * repslens[m][i];
267
+ od;
268
+ od;
269
+
270
+ return size;
271
+ end);
272
+
273
+ # data...
274
+
275
+ # same method for ideals
276
+
277
+ InstallMethod(\in, "for a multiplicative element and semigroup data",
278
+ [IsMultiplicativeElement, IsSemigroupData],
279
+ {f, data} -> not Position(data, f) = fail);
280
+
281
+ # same method for ideals
282
+
283
+ InstallMethod(ELM_LIST, "for semigroup data, and pos int",
284
+ [IsSemigroupData, IsPosInt],
285
+ {o, nr} -> o!.orbit[nr]);
286
+
287
+ # same method for ideals
288
+
289
+ InstallMethod(Length, "for semigroup data", [IsSemigroupData],
290
+ data -> Length(data!.orbit));
291
+
292
+ # same method for ideals
293
+
294
+ InstallMethod(Enumerate, "for semigroup data", [IsSemigroupData],
295
+ data -> Enumerate(data, infinity, ReturnFalse));
296
+
297
+ # same method for ideals
298
+
299
+ InstallMethod(Enumerate, "for semigroup data and limit",
300
+ [IsSemigroupData, IsCyclotomic],
301
+ {data, limit} -> Enumerate(data, limit, ReturnFalse));
302
+
303
+ # different method for ideals...
304
+
305
+ # JDM: this has the same problem as orb in Issue #4, the log is not properly
306
+ # formed if the enumeration stops early.
307
+
308
+ InstallMethod(Enumerate,
309
+ "for an semigroup data, limit, and func",
310
+ [IsSemigroupData, IsCyclotomic, IsFunction],
311
+ function(data, limit, lookfunc)
312
+ local looking, ht, orb, nr, i, graph, reps, repslens, lenreps, lambdarhoht,
313
+ repslookup, orblookup1, orblookup2, rholookup, stopper, schreierpos,
314
+ schreiergen, schreiermult, gens, nrgens, genstoapply, s, lambda,
315
+ lambdaperm, o, oht, scc, lookup, membership, rho, rho_o, rho_orb, rho_nr,
316
+ rho_ht, rho_schreiergen, rho_schreierpos, rho_log, rho_logind, rho_logpos,
317
+ rho_depth, rho_depthmarks, rho_orbitgraph, htadd, htvalue, suc, x, pos, m,
318
+ rhox, l, ind, pt, schutz, data_val, old, j, n;
319
+
320
+ if lookfunc <> ReturnFalse then
321
+ looking := true;
322
+ else
323
+ looking := false;
324
+ fi;
325
+
326
+ if IsClosedData(data) then
327
+ if looking then
328
+ data!.found := false;
329
+ fi;
330
+ return data;
331
+ fi;
332
+
333
+ data!.looking := looking;
334
+
335
+ ht := data!.ht; # so far found R-reps
336
+ orb := data!.orbit; # the so far found R-reps data
337
+ nr := Length(orb);
338
+ i := data!.pos; # points in orb in position at most i have descendants
339
+ graph := data!.graph; # orbit graph of orbit of R-classes under left mult
340
+ reps := data!.reps; # reps grouped by equal lambda-scc-index and
341
+ # rho-value-index
342
+
343
+ repslens := data!.repslens; # Length(reps[m][i])=repslens[m][i]
344
+ lenreps := data!.lenreps; # lenreps[m]=Length(reps[m])
345
+
346
+ lambdarhoht := data!.lambdarhoht; # HTValue(lambdarhoht, [m,l])=position
347
+ # in reps[m] of R-reps with
348
+ # lambda-scc-index=m and rho-value-index=l
349
+
350
+ repslookup := data!.repslookup; # Position(orb, reps[m][i][j])
351
+ # = repslookup[m][i][j]
352
+ # = HTValue(ht, reps[m][i][j])
353
+
354
+ orblookup1 := data!.orblookup1; # orblookup1[i] position in reps[m]
355
+ # containing orb[i][4] (the R-rep)
356
+
357
+ orblookup2 := data!.orblookup2; # orblookup2[i] position in
358
+ # reps[m][orblookup1[i]]
359
+ # containing orb[i][4] (the R-rep)
360
+
361
+ rholookup := data!.rholookup; # rholookup[i]=rho-value-index of orb[i][4]
362
+
363
+ stopper := data!.stopper; # stop at this place in the orbit
364
+
365
+ # schreier
366
+ schreierpos := data!.schreierpos;
367
+ schreiergen := data!.schreiergen;
368
+ schreiermult := data!.schreiermult;
369
+
370
+ # generators
371
+ gens := data!.gens;
372
+ nrgens := Length(gens);
373
+ genstoapply := data!.genstoapply;
374
+
375
+ # lambda
376
+ s := data!.parent;
377
+ lambda := LambdaFunc(s);
378
+ lambdaperm := LambdaPerm(s);
379
+
380
+ o := data!.lambda_orb;
381
+ oht := o!.ht;
382
+ scc := OrbSCC(o);
383
+ lookup := o!.scc_lookup;
384
+
385
+ membership := SchutzGpMembership(s);
386
+
387
+ # rho
388
+ rho := RhoFunc(s);
389
+ rho_o := RhoOrb(s);
390
+ rho_orb := rho_o!.orbit;
391
+ rho_nr := Length(rho_orb);
392
+ rho_ht := rho_o!.ht;
393
+ rho_schreiergen := rho_o!.schreiergen;
394
+ rho_schreierpos := rho_o!.schreierpos;
395
+
396
+ rho_log := rho_o!.log;
397
+ rho_logind := rho_o!.logind;
398
+ rho_logpos := rho_o!.logpos;
399
+ rho_depth := rho_o!.depth;
400
+ rho_depthmarks := rho_o!.depthmarks;
401
+
402
+ rho_orbitgraph := rho_o!.orbitgraph;
403
+
404
+ # initialise the data if necessary
405
+ if data!.init = false then
406
+ for i in [2 .. Length(scc)] do
407
+ reps[i] := [];
408
+ repslookup[i] := [];
409
+ repslens[i] := [];
410
+ lenreps[i] := 0;
411
+ od;
412
+ data!.init := true;
413
+ i := data!.pos;
414
+ fi;
415
+
416
+ if IsBoundGlobal("ORBC") then
417
+ htadd := HTAdd_TreeHash_C;
418
+ htvalue := HTValue_TreeHash_C;
419
+ else
420
+ htadd := HTAdd;
421
+ htvalue := HTValue;
422
+ fi;
423
+
424
+ while nr <= limit and i < nr and i <> stopper do
425
+
426
+ i := i + 1;
427
+
428
+ # for the rho-orbit #
429
+ if rholookup[i] >= rho_depthmarks[rho_depth + 1] then
430
+ rho_depth := rho_depth + 1;
431
+ rho_depthmarks[rho_depth + 1] := rho_nr + 1;
432
+ fi;
433
+ rho_logind[rholookup[i]] := rho_logpos;
434
+ suc := false;
435
+ # #
436
+
437
+ for j in genstoapply do # JDM
438
+ x := gens[j] * orb[i][4];
439
+ pos := htvalue(oht, lambda(x));
440
+ m := lookup[pos]; # lambda-value-scc-index
441
+
442
+ # put lambda(x) in the first position in its scc
443
+ if pos <> scc[m][1] then
444
+ x := x * LambdaOrbMult(o, m, pos)[2];
445
+ fi;
446
+
447
+ rhox := rho(x);
448
+ l := htvalue(rho_ht, rhox);
449
+
450
+ if l = fail then # new rho-value, new R-rep
451
+
452
+ # update rho-orbit #
453
+ rho_nr := rho_nr + 1;
454
+ l := rho_nr;
455
+ rho_orb[rho_nr] := rhox;
456
+ htadd(rho_ht, rhox, rho_nr);
457
+
458
+ rho_orbitgraph[rho_nr] := EmptyPlist(nrgens);
459
+ rho_orbitgraph[rholookup[i]][j] := rho_nr;
460
+
461
+ rho_schreiergen[rho_nr] := j;
462
+ rho_schreierpos[rho_nr] := rholookup[i];
463
+
464
+ suc := true;
465
+ rho_log[rho_logpos] := j;
466
+ rho_log[rho_logpos + 1] := rho_nr;
467
+ rho_logpos := rho_logpos + 2;
468
+ rho_o!.logpos := rho_logpos;
469
+ # #
470
+
471
+ nr := nr + 1;
472
+ lenreps[m] := lenreps[m] + 1;
473
+ ind := lenreps[m];
474
+ lambdarhoht[l] := [];
475
+ lambdarhoht[l][m] := ind;
476
+
477
+ reps[m][ind] := [x];
478
+ repslookup[m][ind] := [nr];
479
+ repslens[m][ind] := 1;
480
+
481
+ orblookup1[nr] := ind;
482
+ orblookup2[nr] := 1;
483
+
484
+ pt := [s, m, o, x, false, nr];
485
+ # semigroup, lambda orb scc index, lambda orb, rep,
486
+ # IsGreensClassNC, index in orbit
487
+
488
+ elif not IsBound(lambdarhoht[l]) then
489
+ # old rho-value, but new lambda-rho-combination
490
+ # update rho orbit graph
491
+ rho_orbitgraph[rholookup[i]][j] := l;
492
+ nr := nr + 1;
493
+ lenreps[m] := lenreps[m] + 1;
494
+ ind := lenreps[m];
495
+ lambdarhoht[l] := [];
496
+ lambdarhoht[l][m] := ind;
497
+
498
+ reps[m][ind] := [x];
499
+ repslookup[m][ind] := [nr];
500
+ repslens[m][ind] := 1;
501
+
502
+ orblookup1[nr] := ind;
503
+ orblookup2[nr] := 1;
504
+
505
+ pt := [s, m, o, x, false, nr];
506
+ elif not IsBound(lambdarhoht[l][m]) then
507
+ # old rho-value, but new lambda-rho-combination
508
+
509
+ # update rho orbit graph
510
+ rho_orbitgraph[rholookup[i]][j] := l;
511
+
512
+ nr := nr + 1;
513
+ lenreps[m] := lenreps[m] + 1;
514
+ ind := lenreps[m];
515
+ lambdarhoht[l][m] := ind;
516
+
517
+ reps[m][ind] := [x];
518
+ repslookup[m][ind] := [nr];
519
+ repslens[m][ind] := 1;
520
+
521
+ orblookup1[nr] := ind;
522
+ orblookup2[nr] := 1;
523
+
524
+ pt := [s, m, o, x, false, nr];
525
+ else
526
+ # old lambda-rho combination
527
+ ind := lambdarhoht[l][m];
528
+ pt := [s, m, o, x, false, nr + 1];
529
+
530
+ # check membership in Schutzenberger group via stabiliser chain
531
+ schutz := LambdaOrbStabChain(o, m);
532
+
533
+ if schutz = true then
534
+ # the Schutzenberger group is the symmetric group
535
+ graph[i][j] := repslookup[m][ind][1];
536
+ rho_orbitgraph[rholookup[i]][j] := l;
537
+ continue;
538
+ else
539
+ if schutz = false then
540
+ # the Schutzenberger group is trivial
541
+ data_val := htvalue(ht, x);
542
+ if data_val <> fail then
543
+ graph[i][j] := data_val;
544
+ rho_orbitgraph[rholookup[i]][j] := l;
545
+ continue;
546
+ fi;
547
+ else
548
+ # the Schutzenberger group is neither trivial nor symmetric group
549
+ old := false;
550
+ for n in [1 .. repslens[m][ind]] do
551
+ if membership(schutz, lambdaperm(reps[m][ind][n], x)) then
552
+ old := true;
553
+ graph[i][j] := repslookup[m][ind][n];
554
+ rho_orbitgraph[rholookup[i]][j] := l;
555
+ break;
556
+ fi;
557
+ od;
558
+ if old then
559
+ continue;
560
+ fi;
561
+ fi;
562
+ nr := nr + 1;
563
+ repslens[m][ind] := repslens[m][ind] + 1;
564
+ reps[m][ind][repslens[m][ind]] := x;
565
+ repslookup[m][ind][repslens[m][ind]] := nr;
566
+ orblookup1[nr] := ind;
567
+ orblookup2[nr] := repslens[m][ind];
568
+ # update rho orbit graph and rholookup
569
+ rho_orbitgraph[rholookup[i]][j] := l;
570
+ fi;
571
+ fi;
572
+ rholookup[nr] := l; # orb[nr] has rho-value in position l of the rho-orb
573
+
574
+ orb[nr] := pt;
575
+ schreierpos[nr] := i; # orb[nr] is obtained from orb[i]
576
+ schreiergen[nr] := j; # by multiplying by gens[j]
577
+ schreiermult[nr] := pos; # and ends up in position <pos> of
578
+ # its lambda orb
579
+ htadd(ht, x, nr);
580
+ graph[nr] := EmptyPlist(nrgens);
581
+ graph[i][j] := nr;
582
+
583
+ # are we looking for something?
584
+ if looking then
585
+ # did we find it?
586
+ data!.pos := i - 1;
587
+ if lookfunc(data, pt) then
588
+ data!.found := nr;
589
+ rho_o!.depth := rho_depth;
590
+ return data;
591
+ fi;
592
+ fi;
593
+ od;
594
+
595
+ # for the rho-orbit
596
+ if suc then
597
+ rho_log[rho_logpos - 2] := -rho_log[rho_logpos - 2];
598
+ else
599
+ rho_logind[rholookup[i]] := 0;
600
+ fi;
601
+
602
+ od;
603
+
604
+ # for the data-orbit
605
+ data!.pos := i;
606
+
607
+ if looking then
608
+ data!.found := false;
609
+ fi;
610
+ if nr = i then
611
+ SetFilterObj(data, IsClosedData);
612
+ SetFilterObj(rho_o, IsClosedOrbit);
613
+ rho_o!.orbind := [1 .. rho_nr];
614
+ fi;
615
+
616
+ # for the rho-orbit
617
+ if i <> 0 then
618
+ rho_o!.pos := rholookup[i];
619
+ rho_o!.depth := rho_depth;
620
+ fi;
621
+
622
+ return data;
623
+ end);
624
+
625
+ # not currently applicable for ideals
626
+
627
+ InstallMethod(OrbitGraph, "for semigroup data",
628
+ [IsSemigroupData], data -> data!.graph);
629
+
630
+ # not currently applicable for ideals
631
+
632
+ InstallMethod(OrbitGraphAsSets, "for semigroup data",
633
+ [IsSemigroupData], data -> List(data!.graph, Set));
634
+
635
+ # returns the index of the representative of the R-class containing x in the
636
+ # parent of data. Note that this depends on the state of the data, it only
637
+ # tells you if it is there already, it doesn't try to find it.
638
+
639
+ # same method for ideals
640
+
641
+ InstallMethod(Position,
642
+ "for semigroup data, multiplicative element, and zero cyc",
643
+ [IsSemigroupData, IsMultiplicativeElement, IsZeroCyc],
644
+ function(data, x, n)
645
+ local S, o, l, m, val, schutz, lambdarhoht, ind, repslookup, reps, repslens,
646
+ membership, lambdaperm;
647
+
648
+ S := data!.parent;
649
+ x := ConvertToInternalElement(S, x);
650
+ o := data!.lambda_orb;
651
+ l := Position(o, LambdaFunc(S)(x));
652
+
653
+ if l = fail then
654
+ return fail;
655
+ fi;
656
+
657
+ m := OrbSCCLookup(o)[l];
658
+
659
+ if l <> OrbSCC(o)[m][1] then
660
+ x := x * LambdaOrbMult(o, m, l)[2];
661
+ fi;
662
+
663
+ val := HTValue(data!.ht, x);
664
+ schutz := LambdaOrbStabChain(o, m);
665
+
666
+ if val <> fail then
667
+ return val;
668
+ elif schutz = false then
669
+ return fail;
670
+ fi;
671
+
672
+ l := Position(RhoOrb(S), RhoFunc(S)(x));
673
+
674
+ if l = fail then
675
+ return fail;
676
+ fi;
677
+
678
+ lambdarhoht := data!.lambdarhoht;
679
+
680
+ if not IsBound(lambdarhoht[l]) or not IsBound(lambdarhoht[l][m]) then
681
+ return fail;
682
+ fi;
683
+
684
+ ind := lambdarhoht[l][m];
685
+ repslookup := data!.repslookup[m][ind];
686
+
687
+ if schutz = true then
688
+ return repslookup[1];
689
+ fi;
690
+
691
+ reps := data!.reps[m][ind];
692
+ repslens := data!.repslens[m][ind];
693
+ membership := SchutzGpMembership(S);
694
+ lambdaperm := LambdaPerm(S);
695
+
696
+ for n in [1 .. repslens] do
697
+ if membership(schutz, lambdaperm(reps[n], x)) then
698
+ return repslookup[n];
699
+ fi;
700
+ od;
701
+ return fail;
702
+ end);
703
+
704
+ InstallMethod(PositionOfFound, "for semigroup data",
705
+ [IsSemigroupData],
706
+ function(data)
707
+ if not(data!.looking) then
708
+ ErrorNoReturn("not looking for anything");
709
+ fi;
710
+ return data!.found;
711
+ end);
712
+
713
+ # same method for ideals
714
+
715
+ BindGlobal("SizeOfSemigroupData",
716
+ function(data)
717
+ local lenreps, repslens, o, scc, size, n, m, i;
718
+
719
+ if not IsSemigroupData(data) then
720
+ ErrorNoReturn("the argument must be a semigroup data object");
721
+ elif not data!.init then
722
+ return 0;
723
+ fi;
724
+
725
+ lenreps := data!.lenreps;
726
+ repslens := data!.repslens;
727
+ o := LambdaOrb(data!.parent);
728
+ scc := OrbSCC(o);
729
+
730
+ size := 0;
731
+ for m in [2 .. Length(scc)] do
732
+ n := Size(LambdaOrbSchutzGp(o, m)) * Length(scc[m]);
733
+ for i in [1 .. lenreps[m]] do
734
+ size := size + n * repslens[m][i];
735
+ od;
736
+ od;
737
+ return size;
738
+ end);
739
+
740
+ # different method for ideals
741
+
742
+ InstallMethod(ViewObj, [IsSemigroupData],
743
+ function(data)
744
+ Print("<");
745
+
746
+ if IsClosedData(data) then
747
+ Print("closed ");
748
+ else
749
+ Print("open ");
750
+ fi;
751
+ Print("semigroup ");
752
+
753
+ Print("data with ", Length(data!.orbit) - 1, " reps, ",
754
+ Length(LambdaOrb(data!.parent)) - 1, " lambda-values, ",
755
+ Length(RhoOrb(data!.parent)) - 1, " rho-values>");
756
+ return;
757
+ end);
758
+
759
+ # we require a fake one in the case that the objects we are dealing with don't
760
+ # have one.
761
+
762
+ InstallMethod(String, "for the universal fake one",
763
+ [SEMIGROUPS_IsUniversalFakeOne], obj -> "<universal fake one>");
764
+
765
+ InstallMethod(\*,
766
+ "for the universal fake one and a multiplicative element",
767
+ [SEMIGROUPS_IsUniversalFakeOne, IsMultiplicativeElement],
768
+ {x, y} -> y);
769
+
770
+ InstallMethod(\*,
771
+ "for a multiplicative element and the universal fake one",
772
+ [IsMultiplicativeElement, SEMIGROUPS_IsUniversalFakeOne],
773
+ ReturnFirst);
774
+
775
+ InstallMethod(\<, "for the universal fake one and a multiplicative element",
776
+ [SEMIGROUPS_IsUniversalFakeOne, IsMultiplicativeElement], ReturnTrue);
777
+
778
+ InstallMethod(\<, "for a multiplicative element and the universal fake one",
779
+ [IsMultiplicativeElement, SEMIGROUPS_IsUniversalFakeOne], ReturnFalse);