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,614 @@
1
+ ############################################################################
2
+ ##
3
+ ## ideals/lambda-rho.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
+ InstallMethod(AsList, "for an ideal orb", [IsIdealOrb],
12
+ o -> Concatenation(List(o!.orbits, AsList)));
13
+
14
+ InstallMethod(Enumerate, "for an ideal orb, and a number",
15
+ [IsIdealOrb, IsCyclotomic],
16
+ function(o, limit)
17
+ local newlookfunc;
18
+
19
+ if IsClosedOrbit(o) then
20
+ return o;
21
+ fi;
22
+
23
+ newlookfunc := {data, x} -> IsClosedOrbit(o) or Length(o) >= limit;
24
+ Enumerate(SemigroupData(o!.parent), infinity, newlookfunc);
25
+ return o;
26
+ end);
27
+
28
+ InstallMethod(Enumerate, "for an ideal orb, a number, and a function",
29
+ [IsIdealOrb, IsCyclotomic, IsFunction],
30
+ function(o, limit, lookfunc)
31
+ local newlookfunc;
32
+
33
+ newlookfunc := {data, x} -> IsClosedOrbit(o) or Length(o) >= limit;
34
+ if IsLambdaOrb(o) then
35
+ Enumerate(SemigroupData(o!.parent), infinity,
36
+ rec(lookfunc := newlookfunc, lambdalookfunc := lookfunc));
37
+ elif IsRhoOrb(o) then
38
+ Enumerate(SemigroupData(o!.parent), infinity,
39
+ rec(lookfunc := newlookfunc, rholookfunc := lookfunc));
40
+ fi;
41
+
42
+ return o;
43
+ end);
44
+
45
+ InstallMethod(Length, "for a ideal orb",
46
+ [IsIdealOrb],
47
+ o -> Sum(o!.lens));
48
+
49
+ InstallMethod(Length, "for an ideal inverse orb",
50
+ [IsIdealOrb and IsInverseOrb],
51
+ o -> Length(o!.orbit));
52
+
53
+ InstallMethod(IsBound\[\], "for an ideal orb and positive integer",
54
+ [IsIdealOrb, IsPosInt],
55
+ function(o, i)
56
+ local nr;
57
+
58
+ nr := 1;
59
+ while IsBound(o!.orbits[nr]) and i > Length(o!.orbits[nr]) do
60
+ i := i - Length(o!.orbits[nr]);
61
+ nr := nr + 1;
62
+ od;
63
+ return IsBound(o!.orbits[nr]) and IsBound(o!.orbits[nr][i]);
64
+ end);
65
+
66
+ InstallMethod(IsBound\[\], "for an inverse ideal orb and positive integer",
67
+ [IsIdealOrb and IsInverseOrb, IsPosInt],
68
+ {o, i} -> IsBound(o!.orbit[i]));
69
+
70
+ InstallMethod(ELM_LIST, "for an ideal orb and positive integer",
71
+ [IsIdealOrb, IsPosInt],
72
+ function(o, i)
73
+ local nr;
74
+
75
+ nr := 1;
76
+ while i > Length(o!.orbits[nr]) do
77
+ i := i - Length(o!.orbits[nr]);
78
+ nr := nr + 1;
79
+ od;
80
+ return o!.orbits[nr][i];
81
+ end);
82
+
83
+ InstallMethod(ELM_LIST, "for an inverse ideal orb and positive integer",
84
+ [IsIdealOrb and IsInverseOrb, IsPosInt], {o, i} -> o!.orbit[i]);
85
+
86
+ # same method for inverse ideal orbs
87
+
88
+ InstallMethod(\in, "for an object and ideal orb",
89
+ [IsObject, IsIdealOrb], {obj, o} -> HTValue(o!.ht, obj) <> fail);
90
+
91
+ # same method for inverse ideal orbs
92
+
93
+ InstallMethod(Position, "for an ideal orb, object, zero cyc",
94
+ [IsIdealOrb, IsObject, IsZeroCyc], {o, obj, n} -> HTValue(o!.ht, obj));
95
+
96
+ # same method for inverse ideal orbs
97
+
98
+ InstallMethod(OrbitGraph, "for an ideal orb",
99
+ [IsIdealOrb], o -> o!.orbitgraph);
100
+
101
+ InstallMethod(ViewObj, "for a ideal orb",
102
+ [IsIdealOrb],
103
+ function(o)
104
+ Print("<");
105
+ if IsClosedOrbit(o) then
106
+ Print("closed ");
107
+ else
108
+ Print("open ");
109
+ fi;
110
+ if IsInverseOrb(o) then
111
+ Print("inverse ");
112
+ fi;
113
+ Print("ideal ");
114
+ if IsLambdaOrb(o) then
115
+ Print("lambda ");
116
+ else
117
+ Print("rho ");
118
+ fi;
119
+ Print("orbit with ", Length(o) - 1, " points");
120
+
121
+ if not IsInverseOrb(o) then
122
+ Print(" in ", Length(o!.orbits) - 1, " components");
123
+ fi;
124
+ Print(">");
125
+ return;
126
+ end);
127
+
128
+ # different method for inverse semigroup ideals
129
+
130
+ InstallMethod(LambdaOrb, "for an acting semigroup ideal",
131
+ [IsActingSemigroup and IsSemigroupIdeal],
132
+ function(I)
133
+ local S, gens, record, htopts, fam;
134
+
135
+ S := SupersemigroupOfIdeal(I);
136
+ gens := List(GeneratorsOfSemigroup(S), x -> ConvertToInternalElement(S, x));
137
+
138
+ record := rec();
139
+ record.orbits := [[fail]];
140
+ record.lens := [1];
141
+ record.parent := I;
142
+ record.scc := [[1]];
143
+ record.scc_reps := [fail];
144
+ record.scc_lookup := [1];
145
+ record.schreiergen := [fail];
146
+ record.schreierpos := [fail];
147
+ record.orbitgraph := [[]];
148
+ record.looking := false;
149
+ record.gens := gens;
150
+ record.orbschreierpos := [];
151
+ record.orbschreiergen := [];
152
+ record.orbschreiercmp := [];
153
+ # <o!.orbits[i]> is obtained from the component
154
+ # <o!.orbits[o!.orbschreiercmp[i]]> by applying right multiplying some
155
+ # element of the ideal with lambda value in position <o!.schreierpos[i]> by
156
+ # <o!.schreiergen[i]>.
157
+ record.orbtogen := [];
158
+ # ComponentOfIndex(o, Position(o, LambdaFunc(M)(gens[orbtogen[i]])))=i
159
+ # and <orbtogen[ComponentOfIndex(Position(o, LambdaFunc(I)(gens[i])))]=i>
160
+ # i.e. component <i> arises from <gens[orbtogen[i]]>.
161
+
162
+ htopts := ShallowCopy(LambdaOrbOpts(I));
163
+ htopts.treehashsize := SEMIGROUPS.OptionsRec(I).hashlen;
164
+ record.ht := HTCreate(LambdaFunc(I)(gens[1]), htopts);
165
+
166
+ fam := CollectionsFamily(FamilyObj(LambdaFunc(I)(Representative(I))));
167
+
168
+ return Objectify(NewType(fam, IsIdealOrb and IsLambdaOrb), record);
169
+ end);
170
+
171
+ InstallMethod(RhoOrb, "for an acting semigroup ideal",
172
+ [IsActingSemigroup and IsSemigroupIdeal],
173
+ function(I)
174
+ local S, gens, record, htopts, fam;
175
+
176
+ S := SupersemigroupOfIdeal(I);
177
+ gens := List(GeneratorsOfSemigroup(S), x -> ConvertToInternalElement(S, x));
178
+
179
+ record := rec();
180
+ record.orbits := [[fail]];
181
+ record.lens := [1];
182
+ record.parent := I;
183
+ record.scc := [[1]];
184
+ record.scc_reps := [fail];
185
+ record.scc_lookup := [1];
186
+ record.schreiergen := [fail];
187
+ record.schreierpos := [fail];
188
+ record.orbitgraph := [[]];
189
+ record.looking := false;
190
+ record.gens := gens;
191
+ record.orbschreierpos := [];
192
+ record.orbschreiergen := [];
193
+ record.orbschreiercmp := [];
194
+ # <o!.orbits[i]> is obtained from the component
195
+ # <o!.orbits[o!.orbschreiercmp[i]]> by applying left multiplying some
196
+ # element of the ideal with rho value in position <o!.schreierpos[i]> by
197
+ # <o!.schreiergen[i]>.
198
+ record.orbtogen := [];
199
+ # <ComponentOfIndex(o, Position(o, RhoFunc(I)(gens[orbtogen[i]])))=i>
200
+ # and <orbtogen[ComponentOfIndex(Position(o, RhoFunc(I)(gens[i])))]=i>
201
+ # i.e. component <i> arises from <gens[orbtogen[i]]>.
202
+ htopts := ShallowCopy(RhoOrbOpts(I));
203
+ htopts.treehashsize := SEMIGROUPS.OptionsRec(I).hashlen;
204
+ record.ht := HTCreate(RhoFunc(I)(gens[1]), htopts);
205
+
206
+ fam := CollectionsFamily(FamilyObj(RhoFunc(I)(Representative(I))));
207
+ return Objectify(NewType(fam, IsIdealOrb and IsRhoOrb), record);
208
+ end);
209
+
210
+ # The entire lambda orbit of an ideal of an inverse semigroup is obtained from
211
+ # the lambda values of the generators (and their inverses) of the ideal by
212
+ # acting on the right by the generators (and their inverses) of the
213
+ # supersemigroup. Hence we require a different case here.
214
+
215
+ # Don't think that this applies to semigroups of matrices over finite fields,
216
+ # so this doesn't require us to use ConvertToInternalElement
217
+ # TODO(FixExtremeTests): check that this is really correct
218
+
219
+ InstallMethod(LambdaOrb, "for an inverse acting semigroup rep ideal",
220
+ [IsInverseActingSemigroupRep and IsSemigroupIdeal],
221
+ function(I)
222
+ local record, gens, lambdafunc, o, ht, nr, nrgens, lambda, InstallPointInOrb,
223
+ x, i;
224
+
225
+ record := ShallowCopy(LambdaOrbOpts(I));
226
+ record.scc_reps := [FakeOne(GeneratorsOfSemigroupIdeal(I))];
227
+
228
+ record.schreier := true;
229
+ record.orbitgraph := true;
230
+ record.storenumbers := true;
231
+ record.log := true;
232
+ record.parent := I;
233
+ record.treehashsize := SEMIGROUPS.OptionsRec(I).hashlen;
234
+ record.orbtogen := [];
235
+ # orbtogen[Position(o, LambdaFunc(I)(gens[i]))]=i and
236
+
237
+ gens := GeneratorsOfSemigroupIdeal(I);
238
+ lambdafunc := LambdaFunc(I);
239
+
240
+ o := Orb(GeneratorsOfSemigroup(SupersemigroupOfIdeal(I)),
241
+ LambdaOrbSeed(I),
242
+ LambdaAct(I),
243
+ record);
244
+
245
+ # install the lambda values of the generators
246
+ ht := o!.ht;
247
+ nr := 1;
248
+ nrgens := Length(gens);
249
+ lambdafunc := LambdaFunc(I);
250
+
251
+ #
252
+ InstallPointInOrb := function(lambda)
253
+ nr := nr + 1;
254
+ HTAdd(ht, lambda, nr);
255
+ Add(o!.orbit, lambda);
256
+ Add(o!.schreierpos, fail);
257
+ Add(o!.schreiergen, fail);
258
+ Add(o!.orbitgraph, []);
259
+ end;
260
+ #
261
+
262
+ for i in [1 .. nrgens] do
263
+ x := gens[i];
264
+ lambda := lambdafunc(x);
265
+ if HTValue(ht, lambda) = fail then
266
+ InstallPointInOrb(lambda);
267
+ o!.orbtogen[nr] := i;
268
+ fi;
269
+
270
+ lambda := lambdafunc(x ^ -1);
271
+ if HTValue(ht, lambda) = fail then
272
+ InstallPointInOrb(lambda);
273
+ o!.orbtogen[nr] := nrgens + i;
274
+ fi;
275
+ od;
276
+
277
+ o!.pos := 2;
278
+ # don't apply the generators of the supersemigroup of <I> to the dummy point
279
+ # at the start of the orbit (otherwise we just get the lambda orbit of the
280
+ # supersemigroup
281
+
282
+ SetFilterObj(o, IsLambdaOrb and IsInverseOrb and IsIdealOrb);
283
+ return o;
284
+ end);
285
+
286
+ # For an ideal rho orb <o>, rho value <pt> of <x>, <x> itself an element of the
287
+ # ideal, <pos> is the position in <o> of the rho value from which <x> was
288
+ # obtained by right multiplication by, the <gen>th generator of the parent of
289
+ # <o>, <ind> is the index of the generator of the ideal which we are adding (if
290
+ # applicable).
291
+ #
292
+ # This assumes that <pt> is not in <o> already, and that either:
293
+ #
294
+ # - <pos=gen=fail> and we are updating with the <ind>th generator of the
295
+ # *ideal*; or
296
+ #
297
+ # - <pos>, <gen> are positive integers and <ind=fail>
298
+
299
+ InstallGlobalFunction(UpdateIdealLambdaOrb,
300
+ function(o, pt, x, pos, gen, ind, lookfunc)
301
+ local I, record, len, S, gens, new, ht, found, nrorb, cmp, i;
302
+
303
+ I := o!.parent;
304
+ record := ShallowCopy(LambdaOrbOpts(I));
305
+ record.schreier := true;
306
+ record.orbitgraph := true;
307
+ record.storenumbers := true;
308
+ record.log := true;
309
+ record.parent := I;
310
+ record.treehashsize := SEMIGROUPS.OptionsRec(I).hashlen;
311
+
312
+ len := Length(o);
313
+
314
+ if len <> 0 then
315
+ record.gradingfunc := {new, x} -> HTValue(o!.ht, x) <> fail;
316
+ record.onlygrades := {x, data} -> not x;
317
+ record.onlygradesdata := fail;
318
+ fi;
319
+
320
+ S := SupersemigroupOfIdeal(I);
321
+ gens := List(GeneratorsOfSemigroup(S), x -> ConvertToInternalElement(S, x));
322
+ new := Orb(gens, pt, LambdaAct(I), record);
323
+ Enumerate(new);
324
+
325
+ ht := o!.ht;
326
+
327
+ if lookfunc = ReturnFalse then
328
+ for i in [1 .. Length(new)] do
329
+ HTAdd(ht, new[i], i + len);
330
+ od;
331
+ else
332
+ o!.looking := true;
333
+ o!.found := false;
334
+ found := false;
335
+ for i in [1 .. Length(new)] do
336
+ HTAdd(ht, new[i], i + len);
337
+ if not found and lookfunc(new, new[i]) then
338
+ o!.found := i;
339
+ found := true;
340
+ fi;
341
+ od;
342
+ fi;
343
+
344
+ o!.scc_reps[Length(o!.scc) + 1] := x;
345
+
346
+ Append(o!.scc_lookup, OrbSCCLookup(new) + Length(o!.scc));
347
+ Append(o!.scc, OrbSCC(new) + len);
348
+ Append(o!.schreiergen, new!.schreiergen);
349
+ Add(o!.schreierpos, fail);
350
+ for i in [2 .. Length(new)] do
351
+ Add(o!.schreierpos, new!.schreierpos[i] + len);
352
+ od;
353
+ Append(o!.orbitgraph, new!.orbitgraph + len);
354
+
355
+ Unbind(new!.scc);
356
+ Unbind(new!.trees);
357
+ Unbind(new!.scc_lookup);
358
+ Unbind(new!.mults);
359
+ Unbind(new!.schutz);
360
+ Unbind(new!.reverse);
361
+ Unbind(new!.rev);
362
+ Unbind(new!.schutzstab);
363
+ Unbind(new!.factorgroups);
364
+ Unbind(new!.factors);
365
+ Unbind(new!.orbitgraph);
366
+ Unbind(new!.schreiergen);
367
+ Unbind(new!.schreierpos);
368
+
369
+ o!.orbits[Length(o!.orbits) + 1] := new;
370
+ o!.lens[Length(o!.orbits)] := Length(new);
371
+
372
+ nrorb := Length(o!.orbits);
373
+ o!.orbschreierpos[nrorb] := pos;
374
+ o!.orbschreiergen[nrorb] := gen;
375
+
376
+ if pos <> fail then
377
+ # find the component containing <pos>
378
+ cmp := 1;
379
+ while pos > Length(o!.orbits[cmp]) do
380
+ pos := pos - Length(o!.orbits[cmp]);
381
+ cmp := cmp + 1;
382
+ od;
383
+ o!.orbschreiercmp[nrorb] := cmp;
384
+ else
385
+ o!.orbschreiercmp[nrorb] := fail;
386
+ fi;
387
+
388
+ if ind <> fail then
389
+ o!.orbtogen[nrorb] := ind;
390
+ fi;
391
+ return len + 1;
392
+ end);
393
+
394
+ # For an ideal rho orb <o>, rho value <pt> of <x>, <x> itself an element of the
395
+ # ideal, <pos> is the position in <o> of the rho value from which <x> was
396
+ # obtained by right multiplication by, the <gen>th generator of the parent of
397
+ # <o>, <ind> is the index of the generator of the ideal which we are adding (if
398
+ # applicable).
399
+ #
400
+ # This assumes that <pt> is not in <o> already, and that either:
401
+ #
402
+ # - <pos=gen=fail> and we are updating with the <ind>th generator of the
403
+ # *ideal*; or
404
+ #
405
+ # - <pos>, <gen> are positive integers and <ind=fail>
406
+
407
+ InstallGlobalFunction(UpdateIdealRhoOrb,
408
+ function(o, pt, x, pos, gen, ind, lookfunc)
409
+ local I, record, len, S, gens, new, ht, found, nrorb, cmp, i;
410
+
411
+ I := o!.parent;
412
+ record := ShallowCopy(RhoOrbOpts(I));
413
+ record.schreier := true;
414
+ record.orbitgraph := true;
415
+ record.storenumbers := true;
416
+ record.log := true;
417
+ record.parent := I;
418
+ record.treehashsize := SEMIGROUPS.OptionsRec(I).hashlen;
419
+
420
+ len := Length(o);
421
+
422
+ if len <> 0 then
423
+ record.gradingfunc := {new, x} -> HTValue(o!.ht, x) <> fail;
424
+ record.onlygrades := {x, data} -> not x;
425
+ record.onlygradesdata := fail;
426
+ fi;
427
+
428
+ S := SupersemigroupOfIdeal(I);
429
+ gens := List(GeneratorsOfSemigroup(S), x -> ConvertToInternalElement(S, x));
430
+ new := Orb(gens, pt, RhoAct(I), record);
431
+ Enumerate(new);
432
+
433
+ ht := o!.ht;
434
+
435
+ if lookfunc = ReturnFalse then
436
+ for i in [1 .. Length(new)] do
437
+ HTAdd(ht, new[i], i + len);
438
+ od;
439
+ else
440
+ o!.looking := true;
441
+ o!.found := false;
442
+ found := false;
443
+ for i in [1 .. Length(new)] do
444
+ HTAdd(ht, new[i], i + len);
445
+ if not found and lookfunc(new, new[i]) then
446
+ o!.found := i;
447
+ found := true;
448
+ fi;
449
+ od;
450
+ fi;
451
+
452
+ o!.scc_reps[Length(o!.scc) + 1] := x;
453
+
454
+ Append(o!.scc_lookup, OrbSCCLookup(new) + Length(o!.scc));
455
+ Append(o!.scc, OrbSCC(new) + len);
456
+ Append(o!.schreiergen, new!.schreiergen);
457
+ Add(o!.schreierpos, fail);
458
+ for i in [2 .. Length(new)] do
459
+ Add(o!.schreierpos, new!.schreierpos[i] + len);
460
+ od;
461
+ Append(o!.orbitgraph, new!.orbitgraph + len);
462
+
463
+ Unbind(new!.scc);
464
+ Unbind(new!.trees);
465
+ Unbind(new!.scc_lookup);
466
+ Unbind(new!.mults);
467
+ Unbind(new!.schutz);
468
+ Unbind(new!.reverse);
469
+ Unbind(new!.rev);
470
+ Unbind(new!.schutzstab);
471
+ Unbind(new!.factorgroups);
472
+ Unbind(new!.factors);
473
+ Unbind(new!.orbitgraph);
474
+ Unbind(new!.schreiergen);
475
+ Unbind(new!.schreierpos);
476
+
477
+ o!.orbits[Length(o!.orbits) + 1] := new;
478
+ o!.lens[Length(o!.orbits)] := Length(new);
479
+
480
+ nrorb := Length(o!.orbits);
481
+ o!.orbschreierpos[nrorb] := pos;
482
+ o!.orbschreiergen[nrorb] := gen;
483
+
484
+ if pos <> fail then
485
+ # find the component containing <pos>
486
+ cmp := 1;
487
+ while pos > Length(o!.orbits[cmp]) do
488
+ pos := pos - Length(o!.orbits[cmp]);
489
+ cmp := cmp + 1;
490
+ od;
491
+ o!.orbschreiercmp[nrorb] := cmp;
492
+ else
493
+ o!.orbschreiercmp[nrorb] := fail;
494
+ fi;
495
+
496
+ # jj assume that if a generator is passed into UpadateIdealRhoOrb then
497
+ # pos = the index of the generator and ind<>fail.
498
+ if ind <> fail then
499
+ o!.orbtogen[nrorb] := ind;
500
+ fi;
501
+ return len + 1;
502
+ end);
503
+
504
+ InstallMethod(EvaluateWord, "for an ideal orb and an ideal word (Semigroups)",
505
+ [IsIdealOrb, IsList], 2, # to beat the methods for lambda/rho orbs below
506
+ function(o, w)
507
+ local super_gens, I, ideal_gens, res, i;
508
+ # it is safe to use <GeneratorsOfSemigroup> here since an ideal can't be
509
+ # obtained using <ClosureSemigroup>
510
+ super_gens := o!.gens;
511
+ # = GeneratorsOfSemigroup(SupersemigroupOfIdeal(o!.parent));
512
+ I := o!.parent;
513
+ ideal_gens := List(GeneratorsOfSemigroupIdeal(I),
514
+ x -> ConvertToInternalElement(I, x));
515
+ res := ideal_gens[AbsInt(w[2])] ^ SignInt(w[2]);
516
+
517
+ for i in [1 .. Length(w[1])] do
518
+ res := super_gens[w[1][i]] * res;
519
+ od;
520
+ for i in [1 .. Length(w[3])] do
521
+ res := res * super_gens[w[3][i]];
522
+ od;
523
+ return res;
524
+ end);
525
+
526
+ InstallMethod(EvaluateWord, "for a lambda orb and a word (Semigroups)",
527
+ [IsLambdaOrb, IsList], 1,
528
+ # to beat the methods for IsXCollection
529
+ {o, w} -> EvaluateWord(o!.gens, w));
530
+
531
+ InstallMethod(EvaluateWord, "for a rho orb and a word (Semigroups)",
532
+ [IsRhoOrb, IsList], 1,
533
+ # to beat the methods for IsXCollection
534
+ {o, w} -> EvaluateWord(o!.gens, w));
535
+
536
+ # returns a triple [leftword, nr, rightword] where <leftword>, <rightword> are
537
+ # words in the generators of the supersemigroup of the ideal, and <nr> is the
538
+ # index of a generator of the ideal.
539
+
540
+ InstallMethod(TraceSchreierTreeForward,
541
+ "for an inverse semigroup ideal orbit and a positive integer",
542
+ [IsInverseOrb and IsIdealOrb, IsPosInt],
543
+ function(o, i)
544
+ local schreierpos, schreiergen, rightword, nr;
545
+
546
+ schreierpos := o!.schreierpos;
547
+ schreiergen := o!.schreiergen;
548
+
549
+ rightword := [];
550
+
551
+ while schreierpos[i] <> fail do
552
+ Add(rightword, schreiergen[i]);
553
+ i := schreierpos[i];
554
+ od;
555
+
556
+ if o!.orbtogen[i] > Length(GeneratorsOfSemigroupIdeal(o!.parent)) then
557
+ nr := -o!.orbtogen[i] + Length(GeneratorsOfSemigroupIdeal(o!.parent));
558
+ else
559
+ nr := o!.orbtogen[i];
560
+ fi;
561
+
562
+ return [[], nr, Reversed(rightword)];
563
+ end);
564
+
565
+ # returns a triple [leftword, nr, rightword] where <leftword>, <rightword> are
566
+ # words in the generators of the supersemigroup of the ideal, and <nr> is the
567
+ # index of a generator of the ideal.
568
+
569
+ InstallMethod(TraceSchreierTreeForward,
570
+ "for an ideal orbit and positive integer",
571
+ [IsIdealOrb, IsPosInt],
572
+ function(o, i)
573
+ local orbschreierpos, orbschreiergen, orbschreiercmp, schreierpos,
574
+ schreiergen, leftword, rightword, nr, j;
575
+
576
+ orbschreierpos := o!.orbschreierpos;
577
+ orbschreiergen := o!.orbschreiergen;
578
+ orbschreiercmp := o!.orbschreiercmp;
579
+
580
+ schreierpos := o!.schreierpos;
581
+ schreiergen := o!.schreiergen;
582
+
583
+ leftword := [];
584
+ rightword := [];
585
+
586
+ # find the component <nr> containing <i>
587
+ nr := 1;
588
+ j := i;
589
+ while j > Length(o!.orbits[nr]) do
590
+ j := j - Length(o!.orbits[nr]);
591
+ nr := nr + 1;
592
+ od;
593
+
594
+ # trace back to the start of the component
595
+ while schreierpos[i] <> fail do
596
+ Add(rightword, schreiergen[i]);
597
+ i := schreierpos[i];
598
+ od;
599
+
600
+ while orbschreiergen[nr] <> fail do
601
+ Add(leftword, orbschreiergen[nr]);
602
+
603
+ i := orbschreierpos[nr];
604
+ nr := orbschreiercmp[nr];
605
+
606
+ while schreierpos[i] <> fail do
607
+ Add(rightword, schreiergen[i]);
608
+ i := schreierpos[i];
609
+ od;
610
+
611
+ od;
612
+
613
+ return [Reversed(leftword), o!.orbtogen[nr], Reversed(rightword)];
614
+ end);
@@ -0,0 +1,24 @@
1
+ ############################################################################
2
+ ##
3
+ ## libsemigroups/cong.gd
4
+ ## Copyright (C) 2022 James D. Mitchell
5
+ ##
6
+ ## Licensing information can be found in the README file of this package.
7
+ ##
8
+ ############################################################################
9
+
10
+ # A congruence satisfies CanUseLibsemigroupsCongruence if it should use a
11
+ # libsemigroups Congruence object to compute things about itself.
12
+ DeclareProperty("CanUseLibsemigroupsCongruence",
13
+ CanComputeEquivalenceRelationPartition);
14
+
15
+ InstallTrueMethod(CanComputeEquivalenceRelationPartition,
16
+ CanUseLibsemigroupsCongruence);
17
+
18
+ # The next operation is the only one supplied by libsemigroups/cong.gd/i that
19
+ # is exported.
20
+
21
+ DeclareOperation("CongruenceLessNC",
22
+ [CanUseLibsemigroupsCongruence,
23
+ IsMultiplicativeElement,
24
+ IsMultiplicativeElement]);