passagemath-singular 10.6.31rc3__cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.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-singular might be problematic. Click here for more details.

Files changed (491) hide show
  1. PySingular.cpython-314-x86_64-linux-gnu.so +0 -0
  2. passagemath_singular-10.6.31rc3.dist-info/METADATA +183 -0
  3. passagemath_singular-10.6.31rc3.dist-info/RECORD +491 -0
  4. passagemath_singular-10.6.31rc3.dist-info/WHEEL +6 -0
  5. passagemath_singular-10.6.31rc3.dist-info/top_level.txt +3 -0
  6. passagemath_singular.libs/libSingular-4-20aec911.4.1.so +0 -0
  7. passagemath_singular.libs/libcddgmp-21acf0c6.so.0.1.3 +0 -0
  8. passagemath_singular.libs/libfactory-4-fcee31da.4.1.so +0 -0
  9. passagemath_singular.libs/libflint-66e12231.so.21.0.0 +0 -0
  10. passagemath_singular.libs/libgf2x-a4cdec90.so.3.0.0 +0 -0
  11. passagemath_singular.libs/libgfortran-83c28eba.so.5.0.0 +0 -0
  12. passagemath_singular.libs/libgmp-6e109695.so.10.5.0 +0 -0
  13. passagemath_singular.libs/libgsl-cda90e79.so.28.0.0 +0 -0
  14. passagemath_singular.libs/libmpfr-82690d50.so.6.2.1 +0 -0
  15. passagemath_singular.libs/libntl-e6f0d543.so.44.0.1 +0 -0
  16. passagemath_singular.libs/libomalloc-0-5c9e866e.9.6.so +0 -0
  17. passagemath_singular.libs/libopenblasp-r0-6dcb67f9.3.29.so +0 -0
  18. passagemath_singular.libs/libpolys-4-5c0a87e0.4.1.so +0 -0
  19. passagemath_singular.libs/libquadmath-2284e583.so.0.0.0 +0 -0
  20. passagemath_singular.libs/libreadline-ea270e21.so.8.2 +0 -0
  21. passagemath_singular.libs/libsingular_resources-4-a1aafc6d.4.1.so +0 -0
  22. passagemath_singular.libs/libtinfo-ceb117d9.so.6.3 +0 -0
  23. sage/algebras/all__sagemath_singular.py +3 -0
  24. sage/algebras/fusion_rings/all.py +19 -0
  25. sage/algebras/fusion_rings/f_matrix.py +2448 -0
  26. sage/algebras/fusion_rings/fast_parallel_fmats_methods.cpython-314-x86_64-linux-gnu.so +0 -0
  27. sage/algebras/fusion_rings/fast_parallel_fmats_methods.pxd +5 -0
  28. sage/algebras/fusion_rings/fast_parallel_fmats_methods.pyx +538 -0
  29. sage/algebras/fusion_rings/fast_parallel_fusion_ring_braid_repn.cpython-314-x86_64-linux-gnu.so +0 -0
  30. sage/algebras/fusion_rings/fast_parallel_fusion_ring_braid_repn.pxd +3 -0
  31. sage/algebras/fusion_rings/fast_parallel_fusion_ring_braid_repn.pyx +331 -0
  32. sage/algebras/fusion_rings/fusion_double.py +899 -0
  33. sage/algebras/fusion_rings/fusion_ring.py +1580 -0
  34. sage/algebras/fusion_rings/poly_tup_engine.cpython-314-x86_64-linux-gnu.so +0 -0
  35. sage/algebras/fusion_rings/poly_tup_engine.pxd +24 -0
  36. sage/algebras/fusion_rings/poly_tup_engine.pyx +579 -0
  37. sage/algebras/fusion_rings/shm_managers.cpython-314-x86_64-linux-gnu.so +0 -0
  38. sage/algebras/fusion_rings/shm_managers.pxd +24 -0
  39. sage/algebras/fusion_rings/shm_managers.pyx +780 -0
  40. sage/algebras/letterplace/all.py +1 -0
  41. sage/algebras/letterplace/free_algebra_element_letterplace.cpython-314-x86_64-linux-gnu.so +0 -0
  42. sage/algebras/letterplace/free_algebra_element_letterplace.pxd +18 -0
  43. sage/algebras/letterplace/free_algebra_element_letterplace.pyx +755 -0
  44. sage/algebras/letterplace/free_algebra_letterplace.cpython-314-x86_64-linux-gnu.so +0 -0
  45. sage/algebras/letterplace/free_algebra_letterplace.pxd +35 -0
  46. sage/algebras/letterplace/free_algebra_letterplace.pyx +914 -0
  47. sage/algebras/letterplace/letterplace_ideal.cpython-314-x86_64-linux-gnu.so +0 -0
  48. sage/algebras/letterplace/letterplace_ideal.pyx +408 -0
  49. sage/algebras/quatalg/all.py +2 -0
  50. sage/algebras/quatalg/quaternion_algebra.py +4778 -0
  51. sage/algebras/quatalg/quaternion_algebra_cython.cpython-314-x86_64-linux-gnu.so +0 -0
  52. sage/algebras/quatalg/quaternion_algebra_cython.pyx +261 -0
  53. sage/algebras/quatalg/quaternion_algebra_element.cpython-314-x86_64-linux-gnu.so +0 -0
  54. sage/algebras/quatalg/quaternion_algebra_element.pxd +29 -0
  55. sage/algebras/quatalg/quaternion_algebra_element.pyx +2176 -0
  56. sage/all__sagemath_singular.py +11 -0
  57. sage/ext_data/all__sagemath_singular.py +1 -0
  58. sage/ext_data/singular/function_field/core.lib +98 -0
  59. sage/interfaces/all__sagemath_singular.py +1 -0
  60. sage/interfaces/singular.py +2835 -0
  61. sage/libs/all__sagemath_singular.py +1 -0
  62. sage/libs/singular/__init__.py +1 -0
  63. sage/libs/singular/decl.pxd +1168 -0
  64. sage/libs/singular/function.cpython-314-x86_64-linux-gnu.so +0 -0
  65. sage/libs/singular/function.pxd +87 -0
  66. sage/libs/singular/function.pyx +1901 -0
  67. sage/libs/singular/function_factory.py +61 -0
  68. sage/libs/singular/groebner_strategy.cpython-314-x86_64-linux-gnu.so +0 -0
  69. sage/libs/singular/groebner_strategy.pxd +22 -0
  70. sage/libs/singular/groebner_strategy.pyx +582 -0
  71. sage/libs/singular/option.cpython-314-x86_64-linux-gnu.so +0 -0
  72. sage/libs/singular/option.pyx +671 -0
  73. sage/libs/singular/polynomial.cpython-314-x86_64-linux-gnu.so +0 -0
  74. sage/libs/singular/polynomial.pxd +39 -0
  75. sage/libs/singular/polynomial.pyx +661 -0
  76. sage/libs/singular/ring.cpython-314-x86_64-linux-gnu.so +0 -0
  77. sage/libs/singular/ring.pxd +58 -0
  78. sage/libs/singular/ring.pyx +893 -0
  79. sage/libs/singular/singular.cpython-314-x86_64-linux-gnu.so +0 -0
  80. sage/libs/singular/singular.pxd +72 -0
  81. sage/libs/singular/singular.pyx +1944 -0
  82. sage/libs/singular/standard_options.py +145 -0
  83. sage/matrix/all__sagemath_singular.py +1 -0
  84. sage/matrix/matrix_mpolynomial_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  85. sage/matrix/matrix_mpolynomial_dense.pxd +7 -0
  86. sage/matrix/matrix_mpolynomial_dense.pyx +615 -0
  87. sage/rings/all__sagemath_singular.py +1 -0
  88. sage/rings/function_field/all__sagemath_singular.py +1 -0
  89. sage/rings/function_field/derivations_polymod.py +911 -0
  90. sage/rings/function_field/element_polymod.cpython-314-x86_64-linux-gnu.so +0 -0
  91. sage/rings/function_field/element_polymod.pyx +406 -0
  92. sage/rings/function_field/function_field_polymod.py +2611 -0
  93. sage/rings/function_field/ideal_polymod.py +1775 -0
  94. sage/rings/function_field/order_polymod.py +1475 -0
  95. sage/rings/function_field/place_polymod.py +681 -0
  96. sage/rings/polynomial/all__sagemath_singular.py +1 -0
  97. sage/rings/polynomial/multi_polynomial_ideal_libsingular.cpython-314-x86_64-linux-gnu.so +0 -0
  98. sage/rings/polynomial/multi_polynomial_ideal_libsingular.pxd +5 -0
  99. sage/rings/polynomial/multi_polynomial_ideal_libsingular.pyx +339 -0
  100. sage/rings/polynomial/multi_polynomial_libsingular.cpython-314-x86_64-linux-gnu.so +0 -0
  101. sage/rings/polynomial/multi_polynomial_libsingular.pxd +30 -0
  102. sage/rings/polynomial/multi_polynomial_libsingular.pyx +6277 -0
  103. sage/rings/polynomial/plural.cpython-314-x86_64-linux-gnu.so +0 -0
  104. sage/rings/polynomial/plural.pxd +48 -0
  105. sage/rings/polynomial/plural.pyx +3171 -0
  106. sage/symbolic/all__sagemath_singular.py +1 -0
  107. sage/symbolic/comparison_impl.pxi +428 -0
  108. sage/symbolic/constants_c_impl.pxi +178 -0
  109. sage/symbolic/expression.cpython-314-x86_64-linux-gnu.so +0 -0
  110. sage/symbolic/expression.pxd +7 -0
  111. sage/symbolic/expression.pyx +14200 -0
  112. sage/symbolic/getitem_impl.pxi +202 -0
  113. sage/symbolic/pynac.pxi +572 -0
  114. sage/symbolic/pynac_constant_impl.pxi +133 -0
  115. sage/symbolic/pynac_function_impl.pxi +206 -0
  116. sage/symbolic/pynac_impl.pxi +2576 -0
  117. sage/symbolic/pynac_wrap.h +124 -0
  118. sage/symbolic/series_impl.pxi +272 -0
  119. sage/symbolic/substitution_map_impl.pxi +94 -0
  120. sage_wheels/bin/ESingular +0 -0
  121. sage_wheels/bin/Singular +0 -0
  122. sage_wheels/bin/TSingular +0 -0
  123. sage_wheels/lib/singular/MOD/cohomo.la +41 -0
  124. sage_wheels/lib/singular/MOD/cohomo.so +0 -0
  125. sage_wheels/lib/singular/MOD/customstd.la +41 -0
  126. sage_wheels/lib/singular/MOD/customstd.so +0 -0
  127. sage_wheels/lib/singular/MOD/freealgebra.la +41 -0
  128. sage_wheels/lib/singular/MOD/freealgebra.so +0 -0
  129. sage_wheels/lib/singular/MOD/gfanlib.la +41 -0
  130. sage_wheels/lib/singular/MOD/gfanlib.so +0 -0
  131. sage_wheels/lib/singular/MOD/gitfan.la +41 -0
  132. sage_wheels/lib/singular/MOD/gitfan.so +0 -0
  133. sage_wheels/lib/singular/MOD/interval.la +41 -0
  134. sage_wheels/lib/singular/MOD/interval.so +0 -0
  135. sage_wheels/lib/singular/MOD/loctriv.la +41 -0
  136. sage_wheels/lib/singular/MOD/loctriv.so +0 -0
  137. sage_wheels/lib/singular/MOD/machinelearning.la +41 -0
  138. sage_wheels/lib/singular/MOD/machinelearning.so +0 -0
  139. sage_wheels/lib/singular/MOD/p_Procs_FieldGeneral.la +41 -0
  140. sage_wheels/lib/singular/MOD/p_Procs_FieldGeneral.so +0 -0
  141. sage_wheels/lib/singular/MOD/p_Procs_FieldIndep.la +41 -0
  142. sage_wheels/lib/singular/MOD/p_Procs_FieldIndep.so +0 -0
  143. sage_wheels/lib/singular/MOD/p_Procs_FieldQ.la +41 -0
  144. sage_wheels/lib/singular/MOD/p_Procs_FieldQ.so +0 -0
  145. sage_wheels/lib/singular/MOD/p_Procs_FieldZp.la +41 -0
  146. sage_wheels/lib/singular/MOD/p_Procs_FieldZp.so +0 -0
  147. sage_wheels/lib/singular/MOD/partialgb.la +41 -0
  148. sage_wheels/lib/singular/MOD/partialgb.so +0 -0
  149. sage_wheels/lib/singular/MOD/pyobject.la +41 -0
  150. sage_wheels/lib/singular/MOD/pyobject.so +0 -0
  151. sage_wheels/lib/singular/MOD/singmathic.la +41 -0
  152. sage_wheels/lib/singular/MOD/singmathic.so +0 -0
  153. sage_wheels/lib/singular/MOD/sispasm.la +41 -0
  154. sage_wheels/lib/singular/MOD/sispasm.so +0 -0
  155. sage_wheels/lib/singular/MOD/subsets.la +41 -0
  156. sage_wheels/lib/singular/MOD/subsets.so +0 -0
  157. sage_wheels/lib/singular/MOD/systhreads.la +41 -0
  158. sage_wheels/lib/singular/MOD/systhreads.so +0 -0
  159. sage_wheels/lib/singular/MOD/syzextra.la +41 -0
  160. sage_wheels/lib/singular/MOD/syzextra.so +0 -0
  161. sage_wheels/libexec/singular/MOD/change_cost +0 -0
  162. sage_wheels/libexec/singular/MOD/singularsurf +11 -0
  163. sage_wheels/libexec/singular/MOD/singularsurf_jupyter +9 -0
  164. sage_wheels/libexec/singular/MOD/singularsurf_win +10 -0
  165. sage_wheels/libexec/singular/MOD/solve_IP +0 -0
  166. sage_wheels/libexec/singular/MOD/surfex +16 -0
  167. sage_wheels/libexec/singular/MOD/toric_ideal +0 -0
  168. sage_wheels/share/factory/gftables/10201 +342 -0
  169. sage_wheels/share/factory/gftables/1024 +37 -0
  170. sage_wheels/share/factory/gftables/10609 +356 -0
  171. sage_wheels/share/factory/gftables/11449 +384 -0
  172. sage_wheels/share/factory/gftables/11881 +398 -0
  173. sage_wheels/share/factory/gftables/121 +6 -0
  174. sage_wheels/share/factory/gftables/12167 +408 -0
  175. sage_wheels/share/factory/gftables/125 +7 -0
  176. sage_wheels/share/factory/gftables/12769 +428 -0
  177. sage_wheels/share/factory/gftables/128 +7 -0
  178. sage_wheels/share/factory/gftables/1331 +47 -0
  179. sage_wheels/share/factory/gftables/1369 +48 -0
  180. sage_wheels/share/factory/gftables/14641 +490 -0
  181. sage_wheels/share/factory/gftables/15625 +523 -0
  182. sage_wheels/share/factory/gftables/16 +3 -0
  183. sage_wheels/share/factory/gftables/16129 +540 -0
  184. sage_wheels/share/factory/gftables/16384 +549 -0
  185. sage_wheels/share/factory/gftables/16807 +563 -0
  186. sage_wheels/share/factory/gftables/1681 +58 -0
  187. sage_wheels/share/factory/gftables/169 +8 -0
  188. sage_wheels/share/factory/gftables/17161 +574 -0
  189. sage_wheels/share/factory/gftables/1849 +64 -0
  190. sage_wheels/share/factory/gftables/18769 +628 -0
  191. sage_wheels/share/factory/gftables/19321 +646 -0
  192. sage_wheels/share/factory/gftables/19683 +659 -0
  193. sage_wheels/share/factory/gftables/2048 +71 -0
  194. sage_wheels/share/factory/gftables/2187 +75 -0
  195. sage_wheels/share/factory/gftables/2197 +76 -0
  196. sage_wheels/share/factory/gftables/2209 +76 -0
  197. sage_wheels/share/factory/gftables/22201 +742 -0
  198. sage_wheels/share/factory/gftables/22801 +762 -0
  199. sage_wheels/share/factory/gftables/2401 +82 -0
  200. sage_wheels/share/factory/gftables/243 +11 -0
  201. sage_wheels/share/factory/gftables/24389 +815 -0
  202. sage_wheels/share/factory/gftables/24649 +824 -0
  203. sage_wheels/share/factory/gftables/25 +3 -0
  204. sage_wheels/share/factory/gftables/256 +11 -0
  205. sage_wheels/share/factory/gftables/26569 +888 -0
  206. sage_wheels/share/factory/gftables/27 +3 -0
  207. sage_wheels/share/factory/gftables/27889 +932 -0
  208. sage_wheels/share/factory/gftables/2809 +96 -0
  209. sage_wheels/share/factory/gftables/28561 +954 -0
  210. sage_wheels/share/factory/gftables/289 +12 -0
  211. sage_wheels/share/factory/gftables/29791 +995 -0
  212. sage_wheels/share/factory/gftables/29929 +1000 -0
  213. sage_wheels/share/factory/gftables/3125 +107 -0
  214. sage_wheels/share/factory/gftables/32 +4 -0
  215. sage_wheels/share/factory/gftables/32041 +1070 -0
  216. sage_wheels/share/factory/gftables/32761 +1094 -0
  217. sage_wheels/share/factory/gftables/32768 +1095 -0
  218. sage_wheels/share/factory/gftables/343 +14 -0
  219. sage_wheels/share/factory/gftables/3481 +118 -0
  220. sage_wheels/share/factory/gftables/361 +14 -0
  221. sage_wheels/share/factory/gftables/36481 +1218 -0
  222. sage_wheels/share/factory/gftables/3721 +126 -0
  223. sage_wheels/share/factory/gftables/37249 +1244 -0
  224. sage_wheels/share/factory/gftables/38809 +1296 -0
  225. sage_wheels/share/factory/gftables/39601 +1322 -0
  226. sage_wheels/share/factory/gftables/4 +3 -0
  227. sage_wheels/share/factory/gftables/4096 +139 -0
  228. sage_wheels/share/factory/gftables/44521 +1486 -0
  229. sage_wheels/share/factory/gftables/4489 +152 -0
  230. sage_wheels/share/factory/gftables/49 +4 -0
  231. sage_wheels/share/factory/gftables/4913 +166 -0
  232. sage_wheels/share/factory/gftables/49729 +1660 -0
  233. sage_wheels/share/factory/gftables/5041 +170 -0
  234. sage_wheels/share/factory/gftables/50653 +1691 -0
  235. sage_wheels/share/factory/gftables/512 +20 -0
  236. sage_wheels/share/factory/gftables/51529 +1720 -0
  237. sage_wheels/share/factory/gftables/52441 +1750 -0
  238. sage_wheels/share/factory/gftables/529 +20 -0
  239. sage_wheels/share/factory/gftables/5329 +180 -0
  240. sage_wheels/share/factory/gftables/54289 +1812 -0
  241. sage_wheels/share/factory/gftables/57121 +1906 -0
  242. sage_wheels/share/factory/gftables/58081 +1938 -0
  243. sage_wheels/share/factory/gftables/59049 +1971 -0
  244. sage_wheels/share/factory/gftables/6241 +210 -0
  245. sage_wheels/share/factory/gftables/625 +23 -0
  246. sage_wheels/share/factory/gftables/63001 +2102 -0
  247. sage_wheels/share/factory/gftables/64 +5 -0
  248. sage_wheels/share/factory/gftables/6561 +221 -0
  249. sage_wheels/share/factory/gftables/6859 +231 -0
  250. sage_wheels/share/factory/gftables/6889 +232 -0
  251. sage_wheels/share/factory/gftables/729 +27 -0
  252. sage_wheels/share/factory/gftables/7921 +266 -0
  253. sage_wheels/share/factory/gftables/8 +3 -0
  254. sage_wheels/share/factory/gftables/81 +5 -0
  255. sage_wheels/share/factory/gftables/8192 +276 -0
  256. sage_wheels/share/factory/gftables/841 +30 -0
  257. sage_wheels/share/factory/gftables/9 +3 -0
  258. sage_wheels/share/factory/gftables/9409 +316 -0
  259. sage_wheels/share/factory/gftables/961 +34 -0
  260. sage_wheels/share/info/singular.info +191898 -0
  261. sage_wheels/share/singular/LIB/GND.lib +1359 -0
  262. sage_wheels/share/singular/LIB/JMBTest.lib +976 -0
  263. sage_wheels/share/singular/LIB/JMSConst.lib +1363 -0
  264. sage_wheels/share/singular/LIB/KVequiv.lib +699 -0
  265. sage_wheels/share/singular/LIB/SingularityDBM.lib +491 -0
  266. sage_wheels/share/singular/LIB/VecField.lib +1542 -0
  267. sage_wheels/share/singular/LIB/absfact.lib +959 -0
  268. sage_wheels/share/singular/LIB/ainvar.lib +730 -0
  269. sage_wheels/share/singular/LIB/aksaka.lib +419 -0
  270. sage_wheels/share/singular/LIB/alexpoly.lib +2542 -0
  271. sage_wheels/share/singular/LIB/algebra.lib +1193 -0
  272. sage_wheels/share/singular/LIB/all.lib +136 -0
  273. sage_wheels/share/singular/LIB/arcpoint.lib +514 -0
  274. sage_wheels/share/singular/LIB/arnold.lib +4553 -0
  275. sage_wheels/share/singular/LIB/arnoldclassify.lib +2058 -0
  276. sage_wheels/share/singular/LIB/arr.lib +3486 -0
  277. sage_wheels/share/singular/LIB/assprimeszerodim.lib +755 -0
  278. sage_wheels/share/singular/LIB/autgradalg.lib +3361 -0
  279. sage_wheels/share/singular/LIB/bfun.lib +1964 -0
  280. sage_wheels/share/singular/LIB/bimodules.lib +774 -0
  281. sage_wheels/share/singular/LIB/brillnoether.lib +226 -0
  282. sage_wheels/share/singular/LIB/brnoeth.lib +5017 -0
  283. sage_wheels/share/singular/LIB/central.lib +2169 -0
  284. sage_wheels/share/singular/LIB/chern.lib +4162 -0
  285. sage_wheels/share/singular/LIB/cimonom.lib +571 -0
  286. sage_wheels/share/singular/LIB/cisimplicial.lib +1835 -0
  287. sage_wheels/share/singular/LIB/classify.lib +3239 -0
  288. sage_wheels/share/singular/LIB/classify2.lib +1462 -0
  289. sage_wheels/share/singular/LIB/classifyMapGerms.lib +1515 -0
  290. sage_wheels/share/singular/LIB/classify_aeq.lib +3253 -0
  291. sage_wheels/share/singular/LIB/classifyceq.lib +2092 -0
  292. sage_wheels/share/singular/LIB/classifyci.lib +1133 -0
  293. sage_wheels/share/singular/LIB/combinat.lib +91 -0
  294. sage_wheels/share/singular/LIB/compregb.lib +276 -0
  295. sage_wheels/share/singular/LIB/control.lib +1636 -0
  296. sage_wheels/share/singular/LIB/crypto.lib +3795 -0
  297. sage_wheels/share/singular/LIB/curveInv.lib +667 -0
  298. sage_wheels/share/singular/LIB/curvepar.lib +1817 -0
  299. sage_wheels/share/singular/LIB/customstd.lib +100 -0
  300. sage_wheels/share/singular/LIB/deRham.lib +5979 -0
  301. sage_wheels/share/singular/LIB/decodegb.lib +2134 -0
  302. sage_wheels/share/singular/LIB/decomp.lib +1655 -0
  303. sage_wheels/share/singular/LIB/deflation.lib +872 -0
  304. sage_wheels/share/singular/LIB/deform.lib +925 -0
  305. sage_wheels/share/singular/LIB/difform.lib +3055 -0
  306. sage_wheels/share/singular/LIB/divisors.lib +750 -0
  307. sage_wheels/share/singular/LIB/dmod.lib +5817 -0
  308. sage_wheels/share/singular/LIB/dmodapp.lib +3269 -0
  309. sage_wheels/share/singular/LIB/dmodideal.lib +1211 -0
  310. sage_wheels/share/singular/LIB/dmodloc.lib +2645 -0
  311. sage_wheels/share/singular/LIB/dmodvar.lib +818 -0
  312. sage_wheels/share/singular/LIB/dummy.lib +17 -0
  313. sage_wheels/share/singular/LIB/elim.lib +1009 -0
  314. sage_wheels/share/singular/LIB/ellipticcovers.lib +548 -0
  315. sage_wheels/share/singular/LIB/enumpoints.lib +146 -0
  316. sage_wheels/share/singular/LIB/equising.lib +2127 -0
  317. sage_wheels/share/singular/LIB/ffmodstd.lib +2384 -0
  318. sage_wheels/share/singular/LIB/ffsolve.lib +1289 -0
  319. sage_wheels/share/singular/LIB/findifs.lib +778 -0
  320. sage_wheels/share/singular/LIB/finitediff.lib +1768 -0
  321. sage_wheels/share/singular/LIB/finvar.lib +7989 -0
  322. sage_wheels/share/singular/LIB/fpadim.lib +2429 -0
  323. sage_wheels/share/singular/LIB/fpalgebras.lib +1666 -0
  324. sage_wheels/share/singular/LIB/fpaprops.lib +1462 -0
  325. sage_wheels/share/singular/LIB/freegb.lib +3853 -0
  326. sage_wheels/share/singular/LIB/general.lib +1350 -0
  327. sage_wheels/share/singular/LIB/gfan.lib +1768 -0
  328. sage_wheels/share/singular/LIB/gitfan.lib +3130 -0
  329. sage_wheels/share/singular/LIB/gkdim.lib +99 -0
  330. sage_wheels/share/singular/LIB/gmspoly.lib +589 -0
  331. sage_wheels/share/singular/LIB/gmssing.lib +1739 -0
  332. sage_wheels/share/singular/LIB/goettsche.lib +909 -0
  333. sage_wheels/share/singular/LIB/graal.lib +1366 -0
  334. sage_wheels/share/singular/LIB/gradedModules.lib +2541 -0
  335. sage_wheels/share/singular/LIB/graphics.lib +360 -0
  336. sage_wheels/share/singular/LIB/grobcov.lib +7706 -0
  337. sage_wheels/share/singular/LIB/groups.lib +1123 -0
  338. sage_wheels/share/singular/LIB/grwalk.lib +507 -0
  339. sage_wheels/share/singular/LIB/hdepth.lib +194 -0
  340. sage_wheels/share/singular/LIB/help.cnf +57 -0
  341. sage_wheels/share/singular/LIB/hess.lib +1946 -0
  342. sage_wheels/share/singular/LIB/hnoether.lib +4292 -0
  343. sage_wheels/share/singular/LIB/hodge.lib +400 -0
  344. sage_wheels/share/singular/LIB/homolog.lib +1965 -0
  345. sage_wheels/share/singular/LIB/hyperel.lib +975 -0
  346. sage_wheels/share/singular/LIB/inout.lib +679 -0
  347. sage_wheels/share/singular/LIB/integralbasis.lib +6224 -0
  348. sage_wheels/share/singular/LIB/interval.lib +1418 -0
  349. sage_wheels/share/singular/LIB/intprog.lib +778 -0
  350. sage_wheels/share/singular/LIB/invar.lib +443 -0
  351. sage_wheels/share/singular/LIB/involut.lib +980 -0
  352. sage_wheels/share/singular/LIB/jacobson.lib +1215 -0
  353. sage_wheels/share/singular/LIB/kskernel.lib +534 -0
  354. sage_wheels/share/singular/LIB/latex.lib +3146 -0
  355. sage_wheels/share/singular/LIB/lejeune.lib +651 -0
  356. sage_wheels/share/singular/LIB/linalg.lib +2040 -0
  357. sage_wheels/share/singular/LIB/locnormal.lib +212 -0
  358. sage_wheels/share/singular/LIB/lrcalc.lib +526 -0
  359. sage_wheels/share/singular/LIB/makedbm.lib +294 -0
  360. sage_wheels/share/singular/LIB/mathml.lib +813 -0
  361. sage_wheels/share/singular/LIB/matrix.lib +1372 -0
  362. sage_wheels/share/singular/LIB/maxlike.lib +1132 -0
  363. sage_wheels/share/singular/LIB/methods.lib +212 -0
  364. sage_wheels/share/singular/LIB/moddiq.lib +322 -0
  365. sage_wheels/share/singular/LIB/modfinduni.lib +181 -0
  366. sage_wheels/share/singular/LIB/modnormal.lib +218 -0
  367. sage_wheels/share/singular/LIB/modprimdec.lib +1278 -0
  368. sage_wheels/share/singular/LIB/modquotient.lib +269 -0
  369. sage_wheels/share/singular/LIB/modstd.lib +1024 -0
  370. sage_wheels/share/singular/LIB/modular.lib +545 -0
  371. sage_wheels/share/singular/LIB/modules.lib +2561 -0
  372. sage_wheels/share/singular/LIB/modwalk.lib +609 -0
  373. sage_wheels/share/singular/LIB/mondromy.lib +1016 -0
  374. sage_wheels/share/singular/LIB/monomialideal.lib +3851 -0
  375. sage_wheels/share/singular/LIB/mprimdec.lib +2353 -0
  376. sage_wheels/share/singular/LIB/mregular.lib +1863 -0
  377. sage_wheels/share/singular/LIB/multigrading.lib +5629 -0
  378. sage_wheels/share/singular/LIB/ncHilb.lib +777 -0
  379. sage_wheels/share/singular/LIB/ncModslimgb.lib +791 -0
  380. sage_wheels/share/singular/LIB/ncalg.lib +16311 -0
  381. sage_wheels/share/singular/LIB/ncall.lib +31 -0
  382. sage_wheels/share/singular/LIB/ncdecomp.lib +468 -0
  383. sage_wheels/share/singular/LIB/ncfactor.lib +13371 -0
  384. sage_wheels/share/singular/LIB/ncfrac.lib +1023 -0
  385. sage_wheels/share/singular/LIB/nchilbert.lib +448 -0
  386. sage_wheels/share/singular/LIB/nchomolog.lib +759 -0
  387. sage_wheels/share/singular/LIB/ncloc.lib +361 -0
  388. sage_wheels/share/singular/LIB/ncpreim.lib +795 -0
  389. sage_wheels/share/singular/LIB/ncrat.lib +2849 -0
  390. sage_wheels/share/singular/LIB/nctools.lib +1887 -0
  391. sage_wheels/share/singular/LIB/nets.lib +1456 -0
  392. sage_wheels/share/singular/LIB/nfmodstd.lib +1000 -0
  393. sage_wheels/share/singular/LIB/nfmodsyz.lib +732 -0
  394. sage_wheels/share/singular/LIB/noether.lib +1106 -0
  395. sage_wheels/share/singular/LIB/normal.lib +8700 -0
  396. sage_wheels/share/singular/LIB/normaliz.lib +2226 -0
  397. sage_wheels/share/singular/LIB/ntsolve.lib +362 -0
  398. sage_wheels/share/singular/LIB/numerAlg.lib +560 -0
  399. sage_wheels/share/singular/LIB/numerDecom.lib +2261 -0
  400. sage_wheels/share/singular/LIB/olga.lib +1933 -0
  401. sage_wheels/share/singular/LIB/orbitparam.lib +351 -0
  402. sage_wheels/share/singular/LIB/parallel.lib +319 -0
  403. sage_wheels/share/singular/LIB/paraplanecurves.lib +3110 -0
  404. sage_wheels/share/singular/LIB/perron.lib +202 -0
  405. sage_wheels/share/singular/LIB/pfd.lib +2223 -0
  406. sage_wheels/share/singular/LIB/phindex.lib +642 -0
  407. sage_wheels/share/singular/LIB/pointid.lib +673 -0
  408. sage_wheels/share/singular/LIB/polybori.lib +1430 -0
  409. sage_wheels/share/singular/LIB/polyclass.lib +525 -0
  410. sage_wheels/share/singular/LIB/polylib.lib +1174 -0
  411. sage_wheels/share/singular/LIB/polymake.lib +1902 -0
  412. sage_wheels/share/singular/LIB/presolve.lib +1533 -0
  413. sage_wheels/share/singular/LIB/primdec.lib +9576 -0
  414. sage_wheels/share/singular/LIB/primdecint.lib +1782 -0
  415. sage_wheels/share/singular/LIB/primitiv.lib +401 -0
  416. sage_wheels/share/singular/LIB/puiseuxexpansions.lib +1631 -0
  417. sage_wheels/share/singular/LIB/purityfiltration.lib +960 -0
  418. sage_wheels/share/singular/LIB/qhmoduli.lib +1561 -0
  419. sage_wheels/share/singular/LIB/qmatrix.lib +293 -0
  420. sage_wheels/share/singular/LIB/random.lib +455 -0
  421. sage_wheels/share/singular/LIB/ratgb.lib +489 -0
  422. sage_wheels/share/singular/LIB/realclassify.lib +5759 -0
  423. sage_wheels/share/singular/LIB/realizationMatroids.lib +772 -0
  424. sage_wheels/share/singular/LIB/realrad.lib +1197 -0
  425. sage_wheels/share/singular/LIB/recover.lib +2628 -0
  426. sage_wheels/share/singular/LIB/redcgs.lib +3984 -0
  427. sage_wheels/share/singular/LIB/reesclos.lib +465 -0
  428. sage_wheels/share/singular/LIB/resbinomial.lib +2802 -0
  429. sage_wheels/share/singular/LIB/resgraph.lib +789 -0
  430. sage_wheels/share/singular/LIB/resjung.lib +820 -0
  431. sage_wheels/share/singular/LIB/resolve.lib +5110 -0
  432. sage_wheels/share/singular/LIB/resources.lib +170 -0
  433. sage_wheels/share/singular/LIB/reszeta.lib +5473 -0
  434. sage_wheels/share/singular/LIB/ring.lib +1328 -0
  435. sage_wheels/share/singular/LIB/ringgb.lib +343 -0
  436. sage_wheels/share/singular/LIB/rinvar.lib +1153 -0
  437. sage_wheels/share/singular/LIB/rootisolation.lib +1481 -0
  438. sage_wheels/share/singular/LIB/rootsmr.lib +709 -0
  439. sage_wheels/share/singular/LIB/rootsur.lib +886 -0
  440. sage_wheels/share/singular/LIB/rstandard.lib +607 -0
  441. sage_wheels/share/singular/LIB/rwalk.lib +336 -0
  442. sage_wheels/share/singular/LIB/sagbi.lib +1353 -0
  443. sage_wheels/share/singular/LIB/sagbiNormaliz.lib +1622 -0
  444. sage_wheels/share/singular/LIB/sagbiNormaliz0.lib +1498 -0
  445. sage_wheels/share/singular/LIB/sagbigrob.lib +449 -0
  446. sage_wheels/share/singular/LIB/schreyer.lib +321 -0
  447. sage_wheels/share/singular/LIB/schubert.lib +2551 -0
  448. sage_wheels/share/singular/LIB/sets.lib +524 -0
  449. sage_wheels/share/singular/LIB/sheafcoh.lib +1663 -0
  450. sage_wheels/share/singular/LIB/signcond.lib +437 -0
  451. sage_wheels/share/singular/LIB/sing.lib +1094 -0
  452. sage_wheels/share/singular/LIB/sing4ti2.lib +419 -0
  453. sage_wheels/share/singular/LIB/solve.lib +2243 -0
  454. sage_wheels/share/singular/LIB/spcurve.lib +1077 -0
  455. sage_wheels/share/singular/LIB/spectrum.lib +62 -0
  456. sage_wheels/share/singular/LIB/sresext.lib +757 -0
  457. sage_wheels/share/singular/LIB/ssi.lib +143 -0
  458. sage_wheels/share/singular/LIB/standard.lib +2769 -0
  459. sage_wheels/share/singular/LIB/stanleyreisner.lib +473 -0
  460. sage_wheels/share/singular/LIB/stdmodule.lib +547 -0
  461. sage_wheels/share/singular/LIB/stratify.lib +1070 -0
  462. sage_wheels/share/singular/LIB/surf.lib +506 -0
  463. sage_wheels/share/singular/LIB/surf_jupyter.lib +223 -0
  464. sage_wheels/share/singular/LIB/surfacesignature.lib +522 -0
  465. sage_wheels/share/singular/LIB/surfex.lib +1462 -0
  466. sage_wheels/share/singular/LIB/swalk.lib +877 -0
  467. sage_wheels/share/singular/LIB/symodstd.lib +1570 -0
  468. sage_wheels/share/singular/LIB/systhreads.lib +74 -0
  469. sage_wheels/share/singular/LIB/tasks.lib +1324 -0
  470. sage_wheels/share/singular/LIB/tateProdCplxNegGrad.lib +2412 -0
  471. sage_wheels/share/singular/LIB/teachstd.lib +858 -0
  472. sage_wheels/share/singular/LIB/template.lib +116 -0
  473. sage_wheels/share/singular/LIB/toric.lib +1119 -0
  474. sage_wheels/share/singular/LIB/transformation.lib +116 -0
  475. sage_wheels/share/singular/LIB/triang.lib +1197 -0
  476. sage_wheels/share/singular/LIB/tropical.lib +8741 -0
  477. sage_wheels/share/singular/LIB/tropicalEllipticCovers.lib +2922 -0
  478. sage_wheels/share/singular/LIB/tropicalNewton.lib +1128 -0
  479. sage_wheels/share/singular/LIB/tst.lib +1108 -0
  480. sage_wheels/share/singular/LIB/weierstr.lib +241 -0
  481. sage_wheels/share/singular/LIB/zeroset.lib +1478 -0
  482. sage_wheels/share/singular/emacs/.emacs-general +184 -0
  483. sage_wheels/share/singular/emacs/.emacs-singular +234 -0
  484. sage_wheels/share/singular/emacs/COPYING +44 -0
  485. sage_wheels/share/singular/emacs/cmd-cmpl.el +241 -0
  486. sage_wheels/share/singular/emacs/ex-cmpl.el +1681 -0
  487. sage_wheels/share/singular/emacs/hlp-cmpl.el +4318 -0
  488. sage_wheels/share/singular/emacs/lib-cmpl.el +179 -0
  489. sage_wheels/share/singular/emacs/singular.el +4273 -0
  490. sage_wheels/share/singular/emacs/singular.xpm +39 -0
  491. sage_wheels/share/singular/singular.idx +5002 -0
@@ -0,0 +1,681 @@
1
+ # sage_setup: distribution = sagemath-singular
2
+ # sage.doctest: needs sage.rings.function_field
3
+ """
4
+ Places of function fields: extension
5
+ """
6
+
7
+ # ****************************************************************************
8
+ # Copyright (C) 2016-2022 Kwankyu Lee <ekwankyu@gmail.com>
9
+ # 2019 Brent Baccala
10
+ # 2021 Jonathan Kliem
11
+ #
12
+ # Distributed under the terms of the GNU General Public License (GPL)
13
+ # as published by the Free Software Foundation; either version 2 of
14
+ # the License, or (at your option) any later version.
15
+ # http://www.gnu.org/licenses/
16
+ # ****************************************************************************
17
+
18
+ import sage
19
+ from sage.arith.functions import lcm
20
+ from sage.rings.integer_ring import ZZ
21
+ from sage.misc.cachefunc import cached_method
22
+ from sage.rings.number_field.number_field_base import NumberField
23
+
24
+ from .place import FunctionFieldPlace
25
+
26
+
27
+ class FunctionFieldPlace_polymod(FunctionFieldPlace):
28
+ """
29
+ Places of extensions of function fields.
30
+ """
31
+ def place_below(self):
32
+ """
33
+ Return the place lying below the place.
34
+
35
+ EXAMPLES::
36
+
37
+ sage: # needs sage.rings.finite_rings
38
+ sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
39
+ sage: L.<y> = K.extension(Y^3 + x^3*Y + x)
40
+ sage: OK = K.maximal_order()
41
+ sage: OL = L.maximal_order()
42
+ sage: p = OK.ideal(x^2 + x + 1)
43
+ sage: dec = OL.decomposition(p)
44
+ sage: q = dec[0][0].place()
45
+ sage: q.place_below()
46
+ Place (x^2 + x + 1)
47
+ """
48
+ return self.prime_ideal().prime_below().place()
49
+
50
+ def relative_degree(self):
51
+ """
52
+ Return the relative degree of the place.
53
+
54
+ EXAMPLES::
55
+
56
+ sage: # needs sage.rings.finite_rings
57
+ sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
58
+ sage: L.<y> = K.extension(Y^3 + x^3*Y + x)
59
+ sage: OK = K.maximal_order()
60
+ sage: OL = L.maximal_order()
61
+ sage: p = OK.ideal(x^2 + x + 1)
62
+ sage: dec = OL.decomposition(p)
63
+ sage: q = dec[0][0].place()
64
+ sage: q.relative_degree()
65
+ 1
66
+ """
67
+ return self._prime._relative_degree
68
+
69
+ def degree(self):
70
+ """
71
+ Return the degree of the place.
72
+
73
+ EXAMPLES::
74
+
75
+ sage: # needs sage.rings.finite_rings
76
+ sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
77
+ sage: L.<y> = K.extension(Y^3 + x^3*Y + x)
78
+ sage: OK = K.maximal_order()
79
+ sage: OL = L.maximal_order()
80
+ sage: p = OK.ideal(x^2 + x + 1)
81
+ sage: dec = OL.decomposition(p)
82
+ sage: q = dec[0][0].place()
83
+ sage: q.degree()
84
+ 2
85
+ """
86
+ return self.relative_degree() * self.place_below().degree()
87
+
88
+ def is_infinite_place(self):
89
+ """
90
+ Return ``True`` if the place is above the unique infinite place
91
+ of the underlying rational function field.
92
+
93
+ EXAMPLES::
94
+
95
+ sage: # needs sage.rings.finite_rings
96
+ sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
97
+ sage: L.<y> = K.extension(Y^3 + x^3*Y + x)
98
+ sage: pls = L.places()
99
+ sage: [p.is_infinite_place() for p in pls]
100
+ [True, True, False]
101
+ sage: [p.place_below() for p in pls]
102
+ [Place (1/x), Place (1/x), Place (x)]
103
+ """
104
+ return self.place_below().is_infinite_place()
105
+
106
+ def local_uniformizer(self):
107
+ """
108
+ Return an element of the function field that has a simple zero
109
+ at the place.
110
+
111
+ EXAMPLES::
112
+
113
+ sage: # needs sage.rings.finite_rings
114
+ sage: K.<x> = FunctionField(GF(4)); _.<Y> = K[]
115
+ sage: L.<y> = K.extension(Y^3 + x^3*Y + x)
116
+ sage: pls = L.places()
117
+ sage: [p.local_uniformizer().valuation(p) for p in pls]
118
+ [1, 1, 1, 1, 1]
119
+ """
120
+ gens = self._prime.gens()
121
+ for g in gens:
122
+ if g.valuation(self) == 1:
123
+ return g
124
+ assert False, "Internal error"
125
+
126
+ def gaps(self):
127
+ """
128
+ Return the gap sequence for the place.
129
+
130
+ EXAMPLES::
131
+
132
+ sage: # needs sage.rings.finite_rings
133
+ sage: K.<x> = FunctionField(GF(4)); _.<Y> = K[]
134
+ sage: L.<y> = K.extension(Y^3 + x^3*Y + x)
135
+ sage: O = L.maximal_order()
136
+ sage: p = O.ideal(x,y).place()
137
+ sage: p.gaps() # a Weierstrass place
138
+ [1, 2, 4]
139
+
140
+ sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[] # needs sage.rings.finite_rings
141
+ sage: L.<y> = K.extension(Y^3 + x^3 * Y + x) # needs sage.rings.finite_rings
142
+ sage: [p.gaps() for p in L.places()] # needs sage.rings.finite_rings
143
+ [[1, 2, 4], [1, 2, 4], [1, 2, 4]]
144
+ """
145
+ if self.degree() == 1:
146
+ return self._gaps_rational() # faster for rational places
147
+ else:
148
+ return self._gaps_wronskian()
149
+
150
+ def _gaps_rational(self):
151
+ """
152
+ Return the gap sequence for the rational place.
153
+
154
+ This method computes the gap numbers using the definition of gap
155
+ numbers. The dimension of the multiple of the prime divisor
156
+ supported at the place is computed by Hess' algorithm.
157
+
158
+ EXAMPLES::
159
+
160
+ sage: # needs sage.rings.finite_rings
161
+ sage: K.<x> = FunctionField(GF(4)); _.<Y> = K[]
162
+ sage: L.<y> = K.extension(Y^3 + x^3*Y + x)
163
+ sage: O = L.maximal_order()
164
+ sage: p = O.ideal(x, y).place()
165
+ sage: p.gaps() # indirect doctest
166
+ [1, 2, 4]
167
+
168
+ sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[] # needs sage.rings.finite_rings
169
+ sage: L.<y> = K.extension(Y^3 + x^3*Y + x) # needs sage.rings.finite_rings
170
+ sage: [p.gaps() for p in L.places()] # indirect doctest # needs sage.rings.finite_rings
171
+ [[1, 2, 4], [1, 2, 4], [1, 2, 4]]
172
+ """
173
+ from sage.matrix.constructor import matrix
174
+
175
+ F = self.function_field()
176
+ n = F.degree()
177
+ O = F.maximal_order()
178
+ Oinf = F.maximal_order_infinite()
179
+
180
+ R = O._module_base_ring._ring
181
+ one = R.one()
182
+
183
+ # Hess' Riemann-Roch basis algorithm stripped down for gaps computation
184
+ def dim_RR(M):
185
+ den = lcm([e.denominator() for e in M.list()])
186
+ mat = matrix(R, M.nrows(), [(den*e).numerator() for e in M.list()])
187
+
188
+ # initialise pivot_row and conflicts list
189
+ pivot_row = [[] for i in range(n)]
190
+ conflicts = []
191
+ for i in range(n):
192
+ bestp = -1
193
+ best = -1
194
+ for c in range(n):
195
+ d = mat[i,c].degree()
196
+ if d >= best:
197
+ bestp = c
198
+ best = d
199
+
200
+ if best >= 0:
201
+ pivot_row[bestp].append((i,best))
202
+ if len(pivot_row[bestp]) > 1:
203
+ conflicts.append(bestp)
204
+
205
+ # while there is a conflict, do a simple transformation
206
+ while conflicts:
207
+ c = conflicts.pop()
208
+ row = pivot_row[c]
209
+ i,ideg = row.pop()
210
+ j,jdeg = row.pop()
211
+
212
+ if jdeg > ideg:
213
+ i,j = j,i
214
+ ideg,jdeg = jdeg,ideg
215
+
216
+ coeff = - mat[i,c].lc() / mat[j,c].lc()
217
+ s = coeff * one.shift(ideg - jdeg)
218
+
219
+ mat.add_multiple_of_row(i, j, s)
220
+
221
+ row.append((j,jdeg))
222
+
223
+ bestp = -1
224
+ best = -1
225
+ for c in range(n):
226
+ d = mat[i,c].degree()
227
+ if d >= best:
228
+ bestp = c
229
+ best = d
230
+
231
+ if best >= 0:
232
+ pivot_row[bestp].append((i,best))
233
+ if len(pivot_row[bestp]) > 1:
234
+ conflicts.append(bestp)
235
+
236
+ dim = 0
237
+ for j in range(n):
238
+ i,ideg = pivot_row[j][0]
239
+ k = den.degree() - ideg + 1
240
+ if k > 0:
241
+ dim += k
242
+ return dim
243
+
244
+ V,fr,to = F.vector_space()
245
+
246
+ prime_inv = ~ self.prime_ideal()
247
+ I = O.ideal(1)
248
+ J = Oinf.ideal(1)
249
+
250
+ B = matrix([to(b) for b in J.gens_over_base()])
251
+ C = matrix([to(v) for v in I.gens_over_base()])
252
+
253
+ prev = dim_RR(C * B.inverse())
254
+ gaps = []
255
+ g = F.genus()
256
+ i = 1
257
+ if self.is_infinite_place():
258
+ while g:
259
+ J = J * prime_inv
260
+ B = matrix([to(b) for b in J.gens_over_base()])
261
+ dim = dim_RR(C * B.inverse())
262
+ if dim == prev:
263
+ gaps.append(i)
264
+ g -= 1
265
+ else:
266
+ prev = dim
267
+ i += 1
268
+ else: # self is a finite place
269
+ Binv = B.inverse()
270
+ while g:
271
+ I = I * prime_inv
272
+ C = matrix([to(v) for v in I.gens_over_base()])
273
+ dim = dim_RR(C * Binv)
274
+ if dim == prev:
275
+ gaps.append(i)
276
+ g -= 1
277
+ else:
278
+ prev = dim
279
+ i += 1
280
+
281
+ return gaps
282
+
283
+ def _gaps_wronskian(self):
284
+ """
285
+ Return the gap sequence for the place.
286
+
287
+ This method implements the local version of Hess' Algorithm 30 of [Hes2002b]_
288
+ based on the Wronskian determinant.
289
+
290
+ EXAMPLES::
291
+
292
+ sage: # needs sage.rings.finite_rings
293
+ sage: K.<x> = FunctionField(GF(4)); _.<Y> = K[]
294
+ sage: L.<y> = K.extension(Y^3 + x^3*Y + x)
295
+ sage: O = L.maximal_order()
296
+ sage: p = O.ideal(x, y).place()
297
+ sage: p._gaps_wronskian() # a Weierstrass place
298
+ [1, 2, 4]
299
+
300
+ sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[] # needs sage.rings.finite_rings
301
+ sage: L.<y> = K.extension(Y^3 + x^3 * Y + x) # needs sage.rings.finite_rings
302
+ sage: [p._gaps_wronskian() for p in L.places()] # needs sage.rings.finite_rings
303
+ [[1, 2, 4], [1, 2, 4], [1, 2, 4]]
304
+ """
305
+ from sage.matrix.constructor import matrix
306
+ from sage.modules.free_module_element import vector
307
+
308
+ F = self.function_field()
309
+ R,fr_R,to_R = self._residue_field()
310
+ der = F.higher_derivation()
311
+
312
+ sep = self.local_uniformizer()
313
+
314
+ # a differential divisor satisfying
315
+ # v_p(W) = 0 for the place p
316
+ W = sep.differential().divisor()
317
+
318
+ # Step 3:
319
+ basis = W._basis()
320
+ d = len(basis)
321
+ M = matrix([to_R(b) for b in basis])
322
+ if M.rank() == 0:
323
+ return []
324
+
325
+ # Steps 4, 5, 6, 7:
326
+ e = 1
327
+ gaps = [1]
328
+ while M.nrows() < d:
329
+ row = vector([to_R(der._derive(basis[i], e, sep)) for i in range(d)])
330
+ if row not in M.row_space():
331
+ M = matrix(M.rows() + [row])
332
+ M.echelonize()
333
+ gaps.append(e + 1)
334
+ e += 1
335
+
336
+ return gaps
337
+
338
+ def residue_field(self, name=None):
339
+ """
340
+ Return the residue field of the place.
341
+
342
+ INPUT:
343
+
344
+ - ``name`` -- string; name of the generator of the residue field
345
+
346
+ OUTPUT:
347
+
348
+ - a field isomorphic to the residue field
349
+
350
+ - a ring homomorphism from the valuation ring to the field
351
+
352
+ - a ring homomorphism from the field to the valuation ring
353
+
354
+ EXAMPLES::
355
+
356
+ sage: # needs sage.rings.finite_rings
357
+ sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
358
+ sage: L.<y> = K.extension(Y^2 + Y + x + 1/x)
359
+ sage: p = L.places_finite()[0]
360
+ sage: k, fr_k, to_k = p.residue_field()
361
+ sage: k
362
+ Finite Field of size 2
363
+ sage: fr_k
364
+ Ring morphism:
365
+ From: Finite Field of size 2
366
+ To: Valuation ring at Place (x, x*y)
367
+ sage: to_k
368
+ Ring morphism:
369
+ From: Valuation ring at Place (x, x*y)
370
+ To: Finite Field of size 2
371
+ sage: to_k(y)
372
+ Traceback (most recent call last):
373
+ ...
374
+ TypeError: y fails to convert into the map's domain
375
+ Valuation ring at Place (x, x*y)...
376
+ sage: to_k(1/y)
377
+ 0
378
+ sage: to_k(y/(1+y))
379
+ 1
380
+ """
381
+ return self.valuation_ring().residue_field(name=name)
382
+
383
+ @cached_method
384
+ def _residue_field(self, name=None):
385
+ """
386
+ Return the residue field of the place along with the functions
387
+ mapping from and to it.
388
+
389
+ INPUT:
390
+
391
+ - ``name`` -- string (default: ``None``); name of the generator
392
+ of the residue field
393
+
394
+ EXAMPLES::
395
+
396
+ sage: # needs sage.rings.finite_rings
397
+ sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
398
+ sage: L.<y> = K.extension(Y^2 + Y + x + 1/x)
399
+ sage: p = L.places_finite()[0]
400
+ sage: k,fr_k,to_k = p._residue_field()
401
+ sage: k
402
+ Finite Field of size 2
403
+ sage: [fr_k(e) for e in k]
404
+ [0, 1]
405
+
406
+ ::
407
+
408
+ sage: # needs sage.rings.finite_rings
409
+ sage: K.<x> = FunctionField(GF(9)); _.<Y> = K[]
410
+ sage: L.<y> = K.extension(Y^3 + Y - x^4)
411
+ sage: p = L.places()[-1]
412
+ sage: p.residue_field()
413
+ (Finite Field in z2 of size 3^2, Ring morphism:
414
+ From: Finite Field in z2 of size 3^2
415
+ To: Valuation ring at Place (x + 1, y + 2*z2), Ring morphism:
416
+ From: Valuation ring at Place (x + 1, y + 2*z2)
417
+ To: Finite Field in z2 of size 3^2)
418
+
419
+ ::
420
+
421
+ sage: K.<x> = FunctionField(QQ); _.<Y> = K[]
422
+ sage: L.<y> = K.extension(Y^3 + Y - x^4)
423
+ sage: O = K.maximal_order()
424
+ sage: I = O.ideal(x)
425
+ sage: [p.residue_field() for p in L.places_above(I.place())]
426
+ [(Rational Field, Ring morphism:
427
+ From: Rational Field
428
+ To: Valuation ring at Place (x, y, y^2), Ring morphism:
429
+ From: Valuation ring at Place (x, y, y^2)
430
+ To: Rational Field),
431
+ (Number Field in s with defining polynomial x^2 - 2*x + 2, Ring morphism:
432
+ From: Number Field in s with defining polynomial x^2 - 2*x + 2
433
+ To: Valuation ring at Place (x, x*y, y^2 + 1), Ring morphism:
434
+ From: Valuation ring at Place (x, x*y, y^2 + 1)
435
+ To: Number Field in s with defining polynomial x^2 - 2*x + 2)]
436
+ sage: for p in L.places_above(I.place()):
437
+ ....: k, fr_k, to_k = p.residue_field()
438
+ ....: assert all(fr_k(k(e)) == e for e in range(10))
439
+ ....: assert all(to_k(fr_k(e)) == e for e in [k.random_element() for i in [1..10]])
440
+
441
+ ::
442
+
443
+ sage: # needs sage.rings.number_field
444
+ sage: K.<x> = FunctionField(QQbar); _.<Y> = K[]
445
+ sage: L.<y> = K.extension(Y^3 + Y - x^4)
446
+ sage: O = K.maximal_order()
447
+ sage: I = O.ideal(x)
448
+ sage: [p.residue_field() for p in L.places_above(I.place())]
449
+ [(Algebraic Field, Ring morphism:
450
+ From: Algebraic Field
451
+ To: Valuation ring at Place (x, y - I, y^2 + 1), Ring morphism:
452
+ From: Valuation ring at Place (x, y - I, y^2 + 1)
453
+ To: Algebraic Field), (Algebraic Field, Ring morphism:
454
+ From: Algebraic Field
455
+ To: Valuation ring at Place (x, y, y^2), Ring morphism:
456
+ From: Valuation ring at Place (x, y, y^2)
457
+ To: Algebraic Field), (Algebraic Field, Ring morphism:
458
+ From: Algebraic Field
459
+ To: Valuation ring at Place (x, y + I, y^2 + 1), Ring morphism:
460
+ From: Valuation ring at Place (x, y + I, y^2 + 1)
461
+ To: Algebraic Field)]
462
+ """
463
+ F = self.function_field()
464
+ prime = self.prime_ideal() # Let P be this prime ideal
465
+
466
+ if self.is_infinite_place():
467
+ _F, from_F, to_F = F._inversion_isomorphism()
468
+ _prime = prime._ideal
469
+ _place = _prime.place()
470
+
471
+ K, _from_K, _to_K = _place._residue_field(name=name)
472
+
473
+ from_K = lambda e: from_F(_from_K(e))
474
+ to_K = lambda f: _to_K(to_F(f))
475
+ return K, from_K, to_K
476
+
477
+ from sage.matrix.constructor import matrix
478
+ from sage.modules.free_module_element import vector
479
+
480
+ O = F.maximal_order()
481
+ Obasis = O.basis()
482
+
483
+ M = prime.hnf()
484
+ R = M.base_ring() # univariate polynomial ring
485
+ n = M.nrows() # extension degree of the function field
486
+
487
+ # Step 1: construct a vector space representing the residue field
488
+ #
489
+ # Given an (reversed) HNF basis M for a prime ideal P of O, every
490
+ # element of O mod P can be represented by a vector of polynomials of
491
+ # degrees less than those of the (anti)diagonal elements of M. In turn,
492
+ # the vector of polynomials can be represented by the vector of the
493
+ # coefficients of the polynomials. V is the space of these vectors.
494
+
495
+ k = F.constant_base_field()
496
+ degs = [M[i,i].degree() for i in range(n)]
497
+ deg = sum(degs) # degree of the place
498
+
499
+ # Let V = k**deg
500
+
501
+ def to_V(e):
502
+ """
503
+ An example to show the idea: Suppose that::
504
+
505
+ [x 0 0]
506
+ M = [0 1 0] and v = (x^10, x^7 + x^3, x^7 + x^4 + x^3 + 1)
507
+ [1 0 1]
508
+
509
+ Then to_V(e) = [1]
510
+ """
511
+ v = O._coordinate_vector(e)
512
+ vec = []
513
+ for i in reversed(range(n)):
514
+ q,r = v[i].quo_rem(M[i,i])
515
+ v -= q * M[i]
516
+ for j in range(degs[i]):
517
+ vec.append(r[j])
518
+ return vector(vec)
519
+
520
+ def fr_V(vec): # to_O
521
+ vec = vec.list()
522
+ pos = 0
523
+ e = F(0)
524
+ for i in reversed(range(n)):
525
+ if degs[i] == 0:
526
+ continue
527
+ else:
528
+ end = pos + degs[i]
529
+ e += R(vec[pos:end]) * Obasis[i]
530
+ pos = end
531
+ return e
532
+
533
+ # Step 2: find a primitive element of the residue field
534
+
535
+ def candidates():
536
+ # Trial 1: this suffices for places obtained from Kummers' theorem
537
+ # and for places of function fields over number fields or QQbar
538
+
539
+ # Note that a = O._kummer_gen is a simple generator of O/prime over
540
+ # o/p. If b is a simple generator of o/p over the constant base field
541
+ # k, then the set a + k * b contains a simple generator of O/prime
542
+ # over k (as there are finite number of intermediate fields).
543
+ a = O._kummer_gen
544
+ if a is not None:
545
+ K,fr_K,_ = self.place_below().residue_field()
546
+ b = fr_K(K.gen())
547
+ if isinstance(k, (NumberField, sage.rings.abc.AlgebraicField)):
548
+ kk = ZZ
549
+ else:
550
+ kk = k
551
+ for c in kk:
552
+ if c != 0:
553
+ yield a + c * b
554
+
555
+ # Trial 2: basis elements of the maximal order
556
+ for gen in reversed(Obasis):
557
+ yield gen
558
+
559
+ import itertools
560
+
561
+ # Trial 3: exhaustive search in O using only polynomials
562
+ # with coefficients 0 or 1
563
+ for d in range(deg):
564
+ G = itertools.product(itertools.product([0,1],repeat=d+1), repeat=n)
565
+ for g in G:
566
+ gen = sum([R(c1)*c2 for c1,c2 in zip(g, Obasis)])
567
+ yield gen
568
+
569
+ # Trial 4: exhaustive search in O using all polynomials
570
+ for d in range(deg):
571
+ G = itertools.product(R.polynomials(max_degree=d), repeat=n)
572
+ for g in G:
573
+ # discard duplicate cases
574
+ if max(c.degree() for c in g) != d:
575
+ continue
576
+ for j in range(n):
577
+ if g[j] != 0:
578
+ break
579
+ if g[j].leading_coefficient() != 1:
580
+ continue
581
+
582
+ gen = sum([c1*c2 for c1,c2 in zip(g, Obasis)])
583
+ yield gen
584
+
585
+ # Search for a primitive element. It is such an element g of O
586
+ # whose powers span the vector space V.
587
+ for gen in candidates():
588
+ g = F.one()
589
+ m = []
590
+ for i in range(deg):
591
+ m.append(to_V(g))
592
+ g *= gen
593
+ mat = matrix(m)
594
+ if mat.rank() == deg:
595
+ break
596
+
597
+ # Step 3: compute the minimal polynomial of g
598
+ min_poly = R((-mat.solve_left(to_V(g))).list() + [1])
599
+
600
+ # Step 4: construct the residue field K as an extension of the base
601
+ # constant field using the minimal polynomial and compute vector space
602
+ # representation W of K along with maps between them
603
+ if deg > 1:
604
+ if isinstance(k, NumberField):
605
+ if name is None:
606
+ name = 's'
607
+ K = k.extension(min_poly, names=name)
608
+
609
+ def from_W(e):
610
+ return K(list(e))
611
+
612
+ def to_W(e):
613
+ return vector(K(e))
614
+ else:
615
+ K = k.extension(deg, name=name)
616
+
617
+ # primitive element in K corresponding to g in O mod P
618
+ prim = min_poly.roots(K)[0][0]
619
+
620
+ W, from_W, to_W = K.vector_space(k, basis=[prim**i for i in range(deg)], map=True)
621
+ else: # deg == 1
622
+ K = k
623
+
624
+ def from_W(e):
625
+ return K(e[0])
626
+
627
+ def to_W(e):
628
+ return vector([e])
629
+
630
+ # Step 5: compute the matrix of change of basis, from V to W via K
631
+ C = mat.inverse()
632
+
633
+ # Step 6: construct the maps between the residue field of the valuation
634
+ # ring at P and K, via O and V and W
635
+
636
+ def from_K(e):
637
+ return fr_V(to_W(e) * mat)
638
+
639
+ # As explained in Section 4.8.3 of [Coh1993]_, alpha has a simple pole
640
+ # at this place and no other poles at finite places.
641
+ p = prime.prime_below().gen().numerator()
642
+ beta = prime._beta
643
+ alpha = ~p * sum(c1*c2 for c1,c2 in zip(beta, Obasis))
644
+ alpha_powered_by_ramification_index = alpha ** prime._ramification_index
645
+
646
+ def to_K(f):
647
+ if f not in O:
648
+ den = O.coordinate_vector(f).denominator()
649
+ num = den * f
650
+
651
+ # s powered by the valuation of den at the prime
652
+ alpha_power = alpha_powered_by_ramification_index ** den.valuation(p)
653
+ rn = num * alpha_power # in O
654
+ rd = den * alpha_power # in O but not in prime
655
+
656
+ # Note that rn is not in O if and only if f is
657
+ # not in the valuation ring. Hence f is in the
658
+ # valuation ring if and only if this procedure
659
+ # does not fall into an infinite loop.
660
+ return to_K(rn) / to_K(rd)
661
+
662
+ return from_W(to_V(f) * C)
663
+
664
+ return K, from_K, to_K
665
+
666
+ def valuation_ring(self):
667
+ """
668
+ Return the valuation ring at the place.
669
+
670
+ EXAMPLES::
671
+
672
+ sage: # needs sage.rings.finite_rings
673
+ sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
674
+ sage: L.<y> = K.extension(Y^2 + Y + x + 1/x)
675
+ sage: p = L.places_finite()[0]
676
+ sage: p.valuation_ring()
677
+ Valuation ring at Place (x, x*y)
678
+ """
679
+ from .valuation_ring import FunctionFieldValuationRing
680
+
681
+ return FunctionFieldValuationRing(self.function_field(), self)
@@ -0,0 +1 @@
1
+ # sage_setup: distribution = sagemath-singular
@@ -0,0 +1,5 @@
1
+ # sage_setup: distribution = sagemath-singular
2
+ from sage.libs.singular.decl cimport ideal, ring
3
+
4
+ cdef object singular_ideal_to_sage_sequence(ideal *i, ring *r, object parent)
5
+ cdef ideal *sage_ideal_to_singular_ideal(I) except NULL