passagemath-modules 10.6.31rc3__cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_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-modules might be problematic. Click here for more details.

Files changed (806) hide show
  1. passagemath_modules-10.6.31rc3.dist-info/METADATA +281 -0
  2. passagemath_modules-10.6.31rc3.dist-info/RECORD +806 -0
  3. passagemath_modules-10.6.31rc3.dist-info/WHEEL +6 -0
  4. passagemath_modules-10.6.31rc3.dist-info/top_level.txt +2 -0
  5. passagemath_modules.libs/libgfortran-e1b7dfc8.so.5.0.0 +0 -0
  6. passagemath_modules.libs/libgmp-93ebf16a.so.10.5.0 +0 -0
  7. passagemath_modules.libs/libgsl-e3525837.so.28.0.0 +0 -0
  8. passagemath_modules.libs/libmpc-c5c421e1.so.3.3.1 +0 -0
  9. passagemath_modules.libs/libmpfr-e0f11cf3.so.6.2.1 +0 -0
  10. passagemath_modules.libs/libopenblasp-r0-4c5b64b1.3.29.so +0 -0
  11. sage/algebras/all__sagemath_modules.py +20 -0
  12. sage/algebras/catalog.py +148 -0
  13. sage/algebras/clifford_algebra.py +3107 -0
  14. sage/algebras/clifford_algebra_element.cpython-314-aarch64-linux-gnu.so +0 -0
  15. sage/algebras/clifford_algebra_element.pxd +16 -0
  16. sage/algebras/clifford_algebra_element.pyx +997 -0
  17. sage/algebras/commutative_dga.py +4252 -0
  18. sage/algebras/exterior_algebra_groebner.cpython-314-aarch64-linux-gnu.so +0 -0
  19. sage/algebras/exterior_algebra_groebner.pxd +55 -0
  20. sage/algebras/exterior_algebra_groebner.pyx +727 -0
  21. sage/algebras/finite_dimensional_algebras/all.py +2 -0
  22. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra.py +1029 -0
  23. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.cpython-314-aarch64-linux-gnu.so +0 -0
  24. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pxd +12 -0
  25. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pyx +706 -0
  26. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_ideal.py +196 -0
  27. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_morphism.py +255 -0
  28. sage/algebras/finite_gca.py +528 -0
  29. sage/algebras/group_algebra.py +232 -0
  30. sage/algebras/lie_algebras/abelian.py +197 -0
  31. sage/algebras/lie_algebras/affine_lie_algebra.py +1213 -0
  32. sage/algebras/lie_algebras/all.py +25 -0
  33. sage/algebras/lie_algebras/all__sagemath_modules.py +1 -0
  34. sage/algebras/lie_algebras/bch.py +177 -0
  35. sage/algebras/lie_algebras/bgg_dual_module.py +1184 -0
  36. sage/algebras/lie_algebras/bgg_resolution.py +232 -0
  37. sage/algebras/lie_algebras/center_uea.py +767 -0
  38. sage/algebras/lie_algebras/classical_lie_algebra.py +2516 -0
  39. sage/algebras/lie_algebras/examples.py +683 -0
  40. sage/algebras/lie_algebras/free_lie_algebra.py +973 -0
  41. sage/algebras/lie_algebras/heisenberg.py +820 -0
  42. sage/algebras/lie_algebras/lie_algebra.py +1562 -0
  43. sage/algebras/lie_algebras/lie_algebra_element.cpython-314-aarch64-linux-gnu.so +0 -0
  44. sage/algebras/lie_algebras/lie_algebra_element.pxd +68 -0
  45. sage/algebras/lie_algebras/lie_algebra_element.pyx +2122 -0
  46. sage/algebras/lie_algebras/morphism.py +661 -0
  47. sage/algebras/lie_algebras/nilpotent_lie_algebra.py +457 -0
  48. sage/algebras/lie_algebras/onsager.py +1324 -0
  49. sage/algebras/lie_algebras/poincare_birkhoff_witt.py +816 -0
  50. sage/algebras/lie_algebras/quotient.py +462 -0
  51. sage/algebras/lie_algebras/rank_two_heisenberg_virasoro.py +355 -0
  52. sage/algebras/lie_algebras/representation.py +1040 -0
  53. sage/algebras/lie_algebras/structure_coefficients.py +459 -0
  54. sage/algebras/lie_algebras/subalgebra.py +967 -0
  55. sage/algebras/lie_algebras/symplectic_derivation.py +289 -0
  56. sage/algebras/lie_algebras/verma_module.py +1630 -0
  57. sage/algebras/lie_algebras/virasoro.py +1186 -0
  58. sage/algebras/octonion_algebra.cpython-314-aarch64-linux-gnu.so +0 -0
  59. sage/algebras/octonion_algebra.pxd +20 -0
  60. sage/algebras/octonion_algebra.pyx +987 -0
  61. sage/algebras/orlik_solomon.py +907 -0
  62. sage/algebras/orlik_terao.py +779 -0
  63. sage/algebras/steenrod/all.py +7 -0
  64. sage/algebras/steenrod/steenrod_algebra.py +4258 -0
  65. sage/algebras/steenrod/steenrod_algebra_bases.py +1179 -0
  66. sage/algebras/steenrod/steenrod_algebra_misc.py +1167 -0
  67. sage/algebras/steenrod/steenrod_algebra_mult.py +954 -0
  68. sage/algebras/weyl_algebra.py +1126 -0
  69. sage/all__sagemath_modules.py +62 -0
  70. sage/calculus/all__sagemath_modules.py +19 -0
  71. sage/calculus/expr.py +205 -0
  72. sage/calculus/integration.cpython-314-aarch64-linux-gnu.so +0 -0
  73. sage/calculus/integration.pyx +698 -0
  74. sage/calculus/interpolation.cpython-314-aarch64-linux-gnu.so +0 -0
  75. sage/calculus/interpolation.pxd +13 -0
  76. sage/calculus/interpolation.pyx +387 -0
  77. sage/calculus/interpolators.cpython-314-aarch64-linux-gnu.so +0 -0
  78. sage/calculus/interpolators.pyx +326 -0
  79. sage/calculus/ode.cpython-314-aarch64-linux-gnu.so +0 -0
  80. sage/calculus/ode.pxd +5 -0
  81. sage/calculus/ode.pyx +610 -0
  82. sage/calculus/riemann.cpython-314-aarch64-linux-gnu.so +0 -0
  83. sage/calculus/riemann.pyx +1521 -0
  84. sage/calculus/test_sympy.py +201 -0
  85. sage/calculus/transforms/all.py +7 -0
  86. sage/calculus/transforms/dft.py +844 -0
  87. sage/calculus/transforms/dwt.cpython-314-aarch64-linux-gnu.so +0 -0
  88. sage/calculus/transforms/dwt.pxd +7 -0
  89. sage/calculus/transforms/dwt.pyx +160 -0
  90. sage/calculus/transforms/fft.cpython-314-aarch64-linux-gnu.so +0 -0
  91. sage/calculus/transforms/fft.pxd +12 -0
  92. sage/calculus/transforms/fft.pyx +487 -0
  93. sage/calculus/wester.py +662 -0
  94. sage/coding/abstract_code.py +1108 -0
  95. sage/coding/ag_code.py +868 -0
  96. sage/coding/ag_code_decoders.cpython-314-aarch64-linux-gnu.so +0 -0
  97. sage/coding/ag_code_decoders.pyx +2639 -0
  98. sage/coding/all.py +15 -0
  99. sage/coding/bch_code.py +494 -0
  100. sage/coding/binary_code.cpython-314-aarch64-linux-gnu.so +0 -0
  101. sage/coding/binary_code.pxd +124 -0
  102. sage/coding/binary_code.pyx +4139 -0
  103. sage/coding/bounds_catalog.py +43 -0
  104. sage/coding/channel.py +819 -0
  105. sage/coding/channels_catalog.py +29 -0
  106. sage/coding/code_bounds.py +755 -0
  107. sage/coding/code_constructions.py +804 -0
  108. sage/coding/codes_catalog.py +111 -0
  109. sage/coding/cyclic_code.py +1329 -0
  110. sage/coding/databases.py +316 -0
  111. sage/coding/decoder.py +373 -0
  112. sage/coding/decoders_catalog.py +88 -0
  113. sage/coding/delsarte_bounds.py +709 -0
  114. sage/coding/encoder.py +390 -0
  115. sage/coding/encoders_catalog.py +64 -0
  116. sage/coding/extended_code.py +468 -0
  117. sage/coding/gabidulin_code.py +1058 -0
  118. sage/coding/golay_code.py +404 -0
  119. sage/coding/goppa_code.py +441 -0
  120. sage/coding/grs_code.py +2371 -0
  121. sage/coding/guava.py +107 -0
  122. sage/coding/guruswami_sudan/all.py +1 -0
  123. sage/coding/guruswami_sudan/gs_decoder.py +897 -0
  124. sage/coding/guruswami_sudan/interpolation.py +409 -0
  125. sage/coding/guruswami_sudan/utils.py +176 -0
  126. sage/coding/hamming_code.py +176 -0
  127. sage/coding/information_set_decoder.py +1032 -0
  128. sage/coding/kasami_codes.cpython-314-aarch64-linux-gnu.so +0 -0
  129. sage/coding/kasami_codes.pyx +351 -0
  130. sage/coding/linear_code.py +3067 -0
  131. sage/coding/linear_code_no_metric.py +1354 -0
  132. sage/coding/linear_rank_metric.py +961 -0
  133. sage/coding/parity_check_code.py +353 -0
  134. sage/coding/punctured_code.py +719 -0
  135. sage/coding/reed_muller_code.py +999 -0
  136. sage/coding/self_dual_codes.py +942 -0
  137. sage/coding/source_coding/all.py +2 -0
  138. sage/coding/source_coding/huffman.py +553 -0
  139. sage/coding/subfield_subcode.py +423 -0
  140. sage/coding/two_weight_db.py +399 -0
  141. sage/combinat/all__sagemath_modules.py +7 -0
  142. sage/combinat/cartesian_product.py +347 -0
  143. sage/combinat/family.py +11 -0
  144. sage/combinat/free_module.py +1977 -0
  145. sage/combinat/root_system/all.py +147 -0
  146. sage/combinat/root_system/ambient_space.py +527 -0
  147. sage/combinat/root_system/associahedron.py +471 -0
  148. sage/combinat/root_system/braid_move_calculator.py +143 -0
  149. sage/combinat/root_system/braid_orbit.cpython-314-aarch64-linux-gnu.so +0 -0
  150. sage/combinat/root_system/braid_orbit.pyx +144 -0
  151. sage/combinat/root_system/branching_rules.py +2301 -0
  152. sage/combinat/root_system/cartan_matrix.py +1245 -0
  153. sage/combinat/root_system/cartan_type.py +3069 -0
  154. sage/combinat/root_system/coxeter_group.py +162 -0
  155. sage/combinat/root_system/coxeter_matrix.py +1261 -0
  156. sage/combinat/root_system/coxeter_type.py +681 -0
  157. sage/combinat/root_system/dynkin_diagram.py +900 -0
  158. sage/combinat/root_system/extended_affine_weyl_group.py +2993 -0
  159. sage/combinat/root_system/fundamental_group.py +795 -0
  160. sage/combinat/root_system/hecke_algebra_representation.py +1203 -0
  161. sage/combinat/root_system/integrable_representations.py +1227 -0
  162. sage/combinat/root_system/non_symmetric_macdonald_polynomials.py +1965 -0
  163. sage/combinat/root_system/pieri_factors.py +1147 -0
  164. sage/combinat/root_system/plot.py +1615 -0
  165. sage/combinat/root_system/root_lattice_realization_algebras.py +1214 -0
  166. sage/combinat/root_system/root_lattice_realizations.py +4628 -0
  167. sage/combinat/root_system/root_space.py +487 -0
  168. sage/combinat/root_system/root_system.py +882 -0
  169. sage/combinat/root_system/type_A.py +348 -0
  170. sage/combinat/root_system/type_A_affine.py +227 -0
  171. sage/combinat/root_system/type_A_infinity.py +241 -0
  172. sage/combinat/root_system/type_B.py +347 -0
  173. sage/combinat/root_system/type_BC_affine.py +287 -0
  174. sage/combinat/root_system/type_B_affine.py +216 -0
  175. sage/combinat/root_system/type_C.py +317 -0
  176. sage/combinat/root_system/type_C_affine.py +188 -0
  177. sage/combinat/root_system/type_D.py +357 -0
  178. sage/combinat/root_system/type_D_affine.py +208 -0
  179. sage/combinat/root_system/type_E.py +641 -0
  180. sage/combinat/root_system/type_E_affine.py +231 -0
  181. sage/combinat/root_system/type_F.py +387 -0
  182. sage/combinat/root_system/type_F_affine.py +137 -0
  183. sage/combinat/root_system/type_G.py +293 -0
  184. sage/combinat/root_system/type_G_affine.py +132 -0
  185. sage/combinat/root_system/type_H.py +105 -0
  186. sage/combinat/root_system/type_I.py +110 -0
  187. sage/combinat/root_system/type_Q.py +150 -0
  188. sage/combinat/root_system/type_affine.py +509 -0
  189. sage/combinat/root_system/type_dual.py +704 -0
  190. sage/combinat/root_system/type_folded.py +301 -0
  191. sage/combinat/root_system/type_marked.py +748 -0
  192. sage/combinat/root_system/type_reducible.py +601 -0
  193. sage/combinat/root_system/type_relabel.py +730 -0
  194. sage/combinat/root_system/type_super_A.py +837 -0
  195. sage/combinat/root_system/weight_lattice_realizations.py +1188 -0
  196. sage/combinat/root_system/weight_space.py +639 -0
  197. sage/combinat/root_system/weyl_characters.py +2238 -0
  198. sage/crypto/__init__.py +4 -0
  199. sage/crypto/all.py +28 -0
  200. sage/crypto/block_cipher/all.py +7 -0
  201. sage/crypto/block_cipher/des.py +1065 -0
  202. sage/crypto/block_cipher/miniaes.py +2171 -0
  203. sage/crypto/block_cipher/present.py +909 -0
  204. sage/crypto/block_cipher/sdes.py +1527 -0
  205. sage/crypto/boolean_function.cpython-314-aarch64-linux-gnu.so +0 -0
  206. sage/crypto/boolean_function.pxd +10 -0
  207. sage/crypto/boolean_function.pyx +1487 -0
  208. sage/crypto/cipher.py +78 -0
  209. sage/crypto/classical.py +3668 -0
  210. sage/crypto/classical_cipher.py +569 -0
  211. sage/crypto/cryptosystem.py +387 -0
  212. sage/crypto/key_exchange/all.py +7 -0
  213. sage/crypto/key_exchange/catalog.py +24 -0
  214. sage/crypto/key_exchange/diffie_hellman.py +323 -0
  215. sage/crypto/key_exchange/key_exchange_scheme.py +107 -0
  216. sage/crypto/lattice.py +312 -0
  217. sage/crypto/lfsr.py +295 -0
  218. sage/crypto/lwe.py +840 -0
  219. sage/crypto/mq/__init__.py +4 -0
  220. sage/crypto/mq/mpolynomialsystemgenerator.py +204 -0
  221. sage/crypto/mq/rijndael_gf.py +2345 -0
  222. sage/crypto/mq/sbox.py +7 -0
  223. sage/crypto/mq/sr.py +3344 -0
  224. sage/crypto/public_key/all.py +5 -0
  225. sage/crypto/public_key/blum_goldwasser.py +776 -0
  226. sage/crypto/sbox.cpython-314-aarch64-linux-gnu.so +0 -0
  227. sage/crypto/sbox.pyx +2090 -0
  228. sage/crypto/sboxes.py +2090 -0
  229. sage/crypto/stream.py +390 -0
  230. sage/crypto/stream_cipher.py +297 -0
  231. sage/crypto/util.py +519 -0
  232. sage/ext/all__sagemath_modules.py +1 -0
  233. sage/ext/interpreters/__init__.py +1 -0
  234. sage/ext/interpreters/all__sagemath_modules.py +2 -0
  235. sage/ext/interpreters/wrapper_cc.cpython-314-aarch64-linux-gnu.so +0 -0
  236. sage/ext/interpreters/wrapper_cc.pxd +30 -0
  237. sage/ext/interpreters/wrapper_cc.pyx +252 -0
  238. sage/ext/interpreters/wrapper_cdf.cpython-314-aarch64-linux-gnu.so +0 -0
  239. sage/ext/interpreters/wrapper_cdf.pxd +26 -0
  240. sage/ext/interpreters/wrapper_cdf.pyx +245 -0
  241. sage/ext/interpreters/wrapper_rdf.cpython-314-aarch64-linux-gnu.so +0 -0
  242. sage/ext/interpreters/wrapper_rdf.pxd +23 -0
  243. sage/ext/interpreters/wrapper_rdf.pyx +221 -0
  244. sage/ext/interpreters/wrapper_rr.cpython-314-aarch64-linux-gnu.so +0 -0
  245. sage/ext/interpreters/wrapper_rr.pxd +28 -0
  246. sage/ext/interpreters/wrapper_rr.pyx +335 -0
  247. sage/geometry/all__sagemath_modules.py +5 -0
  248. sage/geometry/toric_lattice.py +1745 -0
  249. sage/geometry/toric_lattice_element.cpython-314-aarch64-linux-gnu.so +0 -0
  250. sage/geometry/toric_lattice_element.pyx +432 -0
  251. sage/groups/abelian_gps/abelian_group.py +1925 -0
  252. sage/groups/abelian_gps/abelian_group_element.py +164 -0
  253. sage/groups/abelian_gps/all__sagemath_modules.py +5 -0
  254. sage/groups/abelian_gps/dual_abelian_group.py +421 -0
  255. sage/groups/abelian_gps/dual_abelian_group_element.py +179 -0
  256. sage/groups/abelian_gps/element_base.py +341 -0
  257. sage/groups/abelian_gps/values.py +488 -0
  258. sage/groups/additive_abelian/additive_abelian_group.py +476 -0
  259. sage/groups/additive_abelian/additive_abelian_wrapper.py +857 -0
  260. sage/groups/additive_abelian/all.py +4 -0
  261. sage/groups/additive_abelian/qmodnz.py +231 -0
  262. sage/groups/additive_abelian/qmodnz_element.py +349 -0
  263. sage/groups/affine_gps/affine_group.py +535 -0
  264. sage/groups/affine_gps/all.py +1 -0
  265. sage/groups/affine_gps/catalog.py +17 -0
  266. sage/groups/affine_gps/euclidean_group.py +246 -0
  267. sage/groups/affine_gps/group_element.py +562 -0
  268. sage/groups/all__sagemath_modules.py +12 -0
  269. sage/groups/galois_group.py +479 -0
  270. sage/groups/matrix_gps/all.py +4 -0
  271. sage/groups/matrix_gps/all__sagemath_modules.py +13 -0
  272. sage/groups/matrix_gps/catalog.py +26 -0
  273. sage/groups/matrix_gps/coxeter_group.py +927 -0
  274. sage/groups/matrix_gps/finitely_generated.py +487 -0
  275. sage/groups/matrix_gps/group_element.cpython-314-aarch64-linux-gnu.so +0 -0
  276. sage/groups/matrix_gps/group_element.pxd +11 -0
  277. sage/groups/matrix_gps/group_element.pyx +431 -0
  278. sage/groups/matrix_gps/linear.py +440 -0
  279. sage/groups/matrix_gps/matrix_group.py +617 -0
  280. sage/groups/matrix_gps/named_group.py +296 -0
  281. sage/groups/matrix_gps/orthogonal.py +544 -0
  282. sage/groups/matrix_gps/symplectic.py +251 -0
  283. sage/groups/matrix_gps/unitary.py +436 -0
  284. sage/groups/misc_gps/all__sagemath_modules.py +1 -0
  285. sage/groups/misc_gps/argument_groups.py +1905 -0
  286. sage/groups/misc_gps/imaginary_groups.py +479 -0
  287. sage/groups/perm_gps/all__sagemath_modules.py +1 -0
  288. sage/groups/perm_gps/partn_ref/all__sagemath_modules.py +1 -0
  289. sage/groups/perm_gps/partn_ref/refinement_binary.cpython-314-aarch64-linux-gnu.so +0 -0
  290. sage/groups/perm_gps/partn_ref/refinement_binary.pxd +41 -0
  291. sage/groups/perm_gps/partn_ref/refinement_binary.pyx +1167 -0
  292. sage/groups/perm_gps/partn_ref/refinement_matrices.cpython-314-aarch64-linux-gnu.so +0 -0
  293. sage/groups/perm_gps/partn_ref/refinement_matrices.pxd +31 -0
  294. sage/groups/perm_gps/partn_ref/refinement_matrices.pyx +385 -0
  295. sage/homology/algebraic_topological_model.py +595 -0
  296. sage/homology/all.py +2 -0
  297. sage/homology/all__sagemath_modules.py +8 -0
  298. sage/homology/chain_complex.py +2148 -0
  299. sage/homology/chain_complex_homspace.py +165 -0
  300. sage/homology/chain_complex_morphism.py +629 -0
  301. sage/homology/chain_homotopy.py +604 -0
  302. sage/homology/chains.py +653 -0
  303. sage/homology/free_resolution.py +923 -0
  304. sage/homology/graded_resolution.py +567 -0
  305. sage/homology/hochschild_complex.py +756 -0
  306. sage/homology/homology_group.py +188 -0
  307. sage/homology/homology_morphism.py +422 -0
  308. sage/homology/homology_vector_space_with_basis.py +1454 -0
  309. sage/homology/koszul_complex.py +169 -0
  310. sage/homology/matrix_utils.py +205 -0
  311. sage/libs/all__sagemath_modules.py +1 -0
  312. sage/libs/gsl/__init__.py +1 -0
  313. sage/libs/gsl/airy.pxd +56 -0
  314. sage/libs/gsl/all.pxd +66 -0
  315. sage/libs/gsl/array.cpython-314-aarch64-linux-gnu.so +0 -0
  316. sage/libs/gsl/array.pxd +5 -0
  317. sage/libs/gsl/array.pyx +102 -0
  318. sage/libs/gsl/bessel.pxd +208 -0
  319. sage/libs/gsl/blas.pxd +116 -0
  320. sage/libs/gsl/blas_types.pxd +34 -0
  321. sage/libs/gsl/block.pxd +52 -0
  322. sage/libs/gsl/chebyshev.pxd +37 -0
  323. sage/libs/gsl/clausen.pxd +12 -0
  324. sage/libs/gsl/combination.pxd +47 -0
  325. sage/libs/gsl/complex.pxd +151 -0
  326. sage/libs/gsl/coulomb.pxd +30 -0
  327. sage/libs/gsl/coupling.pxd +21 -0
  328. sage/libs/gsl/dawson.pxd +12 -0
  329. sage/libs/gsl/debye.pxd +24 -0
  330. sage/libs/gsl/dilog.pxd +14 -0
  331. sage/libs/gsl/eigen.pxd +46 -0
  332. sage/libs/gsl/elementary.pxd +12 -0
  333. sage/libs/gsl/ellint.pxd +48 -0
  334. sage/libs/gsl/elljac.pxd +8 -0
  335. sage/libs/gsl/erf.pxd +32 -0
  336. sage/libs/gsl/errno.pxd +26 -0
  337. sage/libs/gsl/exp.pxd +44 -0
  338. sage/libs/gsl/expint.pxd +44 -0
  339. sage/libs/gsl/fermi_dirac.pxd +44 -0
  340. sage/libs/gsl/fft.pxd +121 -0
  341. sage/libs/gsl/fit.pxd +50 -0
  342. sage/libs/gsl/gamma.pxd +94 -0
  343. sage/libs/gsl/gegenbauer.pxd +26 -0
  344. sage/libs/gsl/histogram.pxd +176 -0
  345. sage/libs/gsl/hyperg.pxd +52 -0
  346. sage/libs/gsl/integration.pxd +69 -0
  347. sage/libs/gsl/interp.pxd +109 -0
  348. sage/libs/gsl/laguerre.pxd +24 -0
  349. sage/libs/gsl/lambert.pxd +16 -0
  350. sage/libs/gsl/legendre.pxd +90 -0
  351. sage/libs/gsl/linalg.pxd +185 -0
  352. sage/libs/gsl/log.pxd +26 -0
  353. sage/libs/gsl/math.pxd +43 -0
  354. sage/libs/gsl/matrix.pxd +143 -0
  355. sage/libs/gsl/matrix_complex.pxd +130 -0
  356. sage/libs/gsl/min.pxd +67 -0
  357. sage/libs/gsl/monte.pxd +56 -0
  358. sage/libs/gsl/ntuple.pxd +32 -0
  359. sage/libs/gsl/odeiv.pxd +70 -0
  360. sage/libs/gsl/permutation.pxd +78 -0
  361. sage/libs/gsl/poly.pxd +40 -0
  362. sage/libs/gsl/pow_int.pxd +12 -0
  363. sage/libs/gsl/psi.pxd +28 -0
  364. sage/libs/gsl/qrng.pxd +29 -0
  365. sage/libs/gsl/random.pxd +257 -0
  366. sage/libs/gsl/rng.pxd +100 -0
  367. sage/libs/gsl/roots.pxd +72 -0
  368. sage/libs/gsl/sort.pxd +36 -0
  369. sage/libs/gsl/statistics.pxd +59 -0
  370. sage/libs/gsl/sum.pxd +55 -0
  371. sage/libs/gsl/synchrotron.pxd +16 -0
  372. sage/libs/gsl/transport.pxd +24 -0
  373. sage/libs/gsl/trig.pxd +58 -0
  374. sage/libs/gsl/types.pxd +137 -0
  375. sage/libs/gsl/vector.pxd +101 -0
  376. sage/libs/gsl/vector_complex.pxd +83 -0
  377. sage/libs/gsl/wavelet.pxd +49 -0
  378. sage/libs/gsl/zeta.pxd +28 -0
  379. sage/libs/mpc/__init__.pxd +114 -0
  380. sage/libs/mpc/types.pxd +28 -0
  381. sage/libs/mpfr/__init__.pxd +299 -0
  382. sage/libs/mpfr/types.pxd +26 -0
  383. sage/libs/mpmath/__init__.py +1 -0
  384. sage/libs/mpmath/all.py +27 -0
  385. sage/libs/mpmath/all__sagemath_modules.py +1 -0
  386. sage/libs/mpmath/utils.cpython-314-aarch64-linux-gnu.so +0 -0
  387. sage/libs/mpmath/utils.pxd +4 -0
  388. sage/libs/mpmath/utils.pyx +319 -0
  389. sage/matrix/action.cpython-314-aarch64-linux-gnu.so +0 -0
  390. sage/matrix/action.pxd +26 -0
  391. sage/matrix/action.pyx +596 -0
  392. sage/matrix/all.py +9 -0
  393. sage/matrix/args.cpython-314-aarch64-linux-gnu.so +0 -0
  394. sage/matrix/args.pxd +144 -0
  395. sage/matrix/args.pyx +1668 -0
  396. sage/matrix/benchmark.py +1258 -0
  397. sage/matrix/berlekamp_massey.py +95 -0
  398. sage/matrix/compute_J_ideal.py +926 -0
  399. sage/matrix/constructor.cpython-314-aarch64-linux-gnu.so +0 -0
  400. sage/matrix/constructor.pyx +750 -0
  401. sage/matrix/docs.py +430 -0
  402. sage/matrix/echelon_matrix.cpython-314-aarch64-linux-gnu.so +0 -0
  403. sage/matrix/echelon_matrix.pyx +155 -0
  404. sage/matrix/matrix.pxd +2 -0
  405. sage/matrix/matrix0.cpython-314-aarch64-linux-gnu.so +0 -0
  406. sage/matrix/matrix0.pxd +68 -0
  407. sage/matrix/matrix0.pyx +6324 -0
  408. sage/matrix/matrix1.cpython-314-aarch64-linux-gnu.so +0 -0
  409. sage/matrix/matrix1.pxd +8 -0
  410. sage/matrix/matrix1.pyx +2851 -0
  411. sage/matrix/matrix2.cpython-314-aarch64-linux-gnu.so +0 -0
  412. sage/matrix/matrix2.pxd +25 -0
  413. sage/matrix/matrix2.pyx +20181 -0
  414. sage/matrix/matrix_cdv.cpython-314-aarch64-linux-gnu.so +0 -0
  415. sage/matrix/matrix_cdv.pxd +4 -0
  416. sage/matrix/matrix_cdv.pyx +93 -0
  417. sage/matrix/matrix_complex_double_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  418. sage/matrix/matrix_complex_double_dense.pxd +5 -0
  419. sage/matrix/matrix_complex_double_dense.pyx +98 -0
  420. sage/matrix/matrix_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  421. sage/matrix/matrix_dense.pxd +5 -0
  422. sage/matrix/matrix_dense.pyx +343 -0
  423. sage/matrix/matrix_domain_dense.pxd +5 -0
  424. sage/matrix/matrix_domain_sparse.pxd +5 -0
  425. sage/matrix/matrix_double_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  426. sage/matrix/matrix_double_dense.pxd +7 -0
  427. sage/matrix/matrix_double_dense.pyx +3906 -0
  428. sage/matrix/matrix_double_sparse.cpython-314-aarch64-linux-gnu.so +0 -0
  429. sage/matrix/matrix_double_sparse.pxd +6 -0
  430. sage/matrix/matrix_double_sparse.pyx +248 -0
  431. sage/matrix/matrix_generic_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  432. sage/matrix/matrix_generic_dense.pxd +7 -0
  433. sage/matrix/matrix_generic_dense.pyx +354 -0
  434. sage/matrix/matrix_generic_sparse.cpython-314-aarch64-linux-gnu.so +0 -0
  435. sage/matrix/matrix_generic_sparse.pxd +7 -0
  436. sage/matrix/matrix_generic_sparse.pyx +461 -0
  437. sage/matrix/matrix_laurent_mpolynomial_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  438. sage/matrix/matrix_laurent_mpolynomial_dense.pxd +5 -0
  439. sage/matrix/matrix_laurent_mpolynomial_dense.pyx +115 -0
  440. sage/matrix/matrix_misc.py +313 -0
  441. sage/matrix/matrix_numpy_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  442. sage/matrix/matrix_numpy_dense.pxd +14 -0
  443. sage/matrix/matrix_numpy_dense.pyx +450 -0
  444. sage/matrix/matrix_numpy_integer_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  445. sage/matrix/matrix_numpy_integer_dense.pxd +7 -0
  446. sage/matrix/matrix_numpy_integer_dense.pyx +59 -0
  447. sage/matrix/matrix_polynomial_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  448. sage/matrix/matrix_polynomial_dense.pxd +5 -0
  449. sage/matrix/matrix_polynomial_dense.pyx +5341 -0
  450. sage/matrix/matrix_real_double_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  451. sage/matrix/matrix_real_double_dense.pxd +7 -0
  452. sage/matrix/matrix_real_double_dense.pyx +122 -0
  453. sage/matrix/matrix_space.py +2848 -0
  454. sage/matrix/matrix_sparse.cpython-314-aarch64-linux-gnu.so +0 -0
  455. sage/matrix/matrix_sparse.pxd +5 -0
  456. sage/matrix/matrix_sparse.pyx +1222 -0
  457. sage/matrix/matrix_window.cpython-314-aarch64-linux-gnu.so +0 -0
  458. sage/matrix/matrix_window.pxd +37 -0
  459. sage/matrix/matrix_window.pyx +242 -0
  460. sage/matrix/misc_mpfr.cpython-314-aarch64-linux-gnu.so +0 -0
  461. sage/matrix/misc_mpfr.pyx +80 -0
  462. sage/matrix/operation_table.py +1182 -0
  463. sage/matrix/special.py +3666 -0
  464. sage/matrix/strassen.cpython-314-aarch64-linux-gnu.so +0 -0
  465. sage/matrix/strassen.pyx +851 -0
  466. sage/matrix/symplectic_basis.py +541 -0
  467. sage/matrix/template.pxd +6 -0
  468. sage/matrix/tests.py +71 -0
  469. sage/matroids/advanced.py +77 -0
  470. sage/matroids/all.py +13 -0
  471. sage/matroids/basis_exchange_matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  472. sage/matroids/basis_exchange_matroid.pxd +96 -0
  473. sage/matroids/basis_exchange_matroid.pyx +2344 -0
  474. sage/matroids/basis_matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  475. sage/matroids/basis_matroid.pxd +45 -0
  476. sage/matroids/basis_matroid.pyx +1217 -0
  477. sage/matroids/catalog.py +44 -0
  478. sage/matroids/chow_ring.py +473 -0
  479. sage/matroids/chow_ring_ideal.py +849 -0
  480. sage/matroids/circuit_closures_matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  481. sage/matroids/circuit_closures_matroid.pxd +16 -0
  482. sage/matroids/circuit_closures_matroid.pyx +559 -0
  483. sage/matroids/circuits_matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  484. sage/matroids/circuits_matroid.pxd +38 -0
  485. sage/matroids/circuits_matroid.pyx +947 -0
  486. sage/matroids/constructor.py +1086 -0
  487. sage/matroids/database_collections.py +365 -0
  488. sage/matroids/database_matroids.py +5338 -0
  489. sage/matroids/dual_matroid.py +583 -0
  490. sage/matroids/extension.cpython-314-aarch64-linux-gnu.so +0 -0
  491. sage/matroids/extension.pxd +34 -0
  492. sage/matroids/extension.pyx +519 -0
  493. sage/matroids/flats_matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  494. sage/matroids/flats_matroid.pxd +28 -0
  495. sage/matroids/flats_matroid.pyx +715 -0
  496. sage/matroids/gammoid.py +600 -0
  497. sage/matroids/graphic_matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  498. sage/matroids/graphic_matroid.pxd +39 -0
  499. sage/matroids/graphic_matroid.pyx +2024 -0
  500. sage/matroids/lean_matrix.cpython-314-aarch64-linux-gnu.so +0 -0
  501. sage/matroids/lean_matrix.pxd +126 -0
  502. sage/matroids/lean_matrix.pyx +3667 -0
  503. sage/matroids/linear_matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  504. sage/matroids/linear_matroid.pxd +180 -0
  505. sage/matroids/linear_matroid.pyx +6649 -0
  506. sage/matroids/matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  507. sage/matroids/matroid.pxd +243 -0
  508. sage/matroids/matroid.pyx +8759 -0
  509. sage/matroids/matroids_catalog.py +190 -0
  510. sage/matroids/matroids_plot_helpers.py +890 -0
  511. sage/matroids/minor_matroid.py +480 -0
  512. sage/matroids/minorfix.h +9 -0
  513. sage/matroids/named_matroids.py +5 -0
  514. sage/matroids/rank_matroid.py +268 -0
  515. sage/matroids/set_system.cpython-314-aarch64-linux-gnu.so +0 -0
  516. sage/matroids/set_system.pxd +38 -0
  517. sage/matroids/set_system.pyx +800 -0
  518. sage/matroids/transversal_matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  519. sage/matroids/transversal_matroid.pxd +14 -0
  520. sage/matroids/transversal_matroid.pyx +893 -0
  521. sage/matroids/union_matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  522. sage/matroids/union_matroid.pxd +20 -0
  523. sage/matroids/union_matroid.pyx +331 -0
  524. sage/matroids/unpickling.cpython-314-aarch64-linux-gnu.so +0 -0
  525. sage/matroids/unpickling.pyx +843 -0
  526. sage/matroids/utilities.py +809 -0
  527. sage/misc/all__sagemath_modules.py +20 -0
  528. sage/misc/c3.cpython-314-aarch64-linux-gnu.so +0 -0
  529. sage/misc/c3.pyx +238 -0
  530. sage/misc/compat.py +87 -0
  531. sage/misc/element_with_label.py +173 -0
  532. sage/misc/func_persist.py +79 -0
  533. sage/misc/pickle_old.cpython-314-aarch64-linux-gnu.so +0 -0
  534. sage/misc/pickle_old.pyx +19 -0
  535. sage/misc/proof.py +7 -0
  536. sage/misc/replace_dot_all.py +472 -0
  537. sage/misc/sagedoc_conf.py +168 -0
  538. sage/misc/sphinxify.py +167 -0
  539. sage/misc/test_class_pickling.py +85 -0
  540. sage/modules/all.py +42 -0
  541. sage/modules/complex_double_vector.py +25 -0
  542. sage/modules/diamond_cutting.py +380 -0
  543. sage/modules/fg_pid/all.py +1 -0
  544. sage/modules/fg_pid/fgp_element.py +456 -0
  545. sage/modules/fg_pid/fgp_module.py +2091 -0
  546. sage/modules/fg_pid/fgp_morphism.py +550 -0
  547. sage/modules/filtered_vector_space.py +1271 -0
  548. sage/modules/finite_submodule_iter.cpython-314-aarch64-linux-gnu.so +0 -0
  549. sage/modules/finite_submodule_iter.pxd +27 -0
  550. sage/modules/finite_submodule_iter.pyx +452 -0
  551. sage/modules/fp_graded/all.py +1 -0
  552. sage/modules/fp_graded/element.py +346 -0
  553. sage/modules/fp_graded/free_element.py +298 -0
  554. sage/modules/fp_graded/free_homspace.py +53 -0
  555. sage/modules/fp_graded/free_module.py +1060 -0
  556. sage/modules/fp_graded/free_morphism.py +217 -0
  557. sage/modules/fp_graded/homspace.py +563 -0
  558. sage/modules/fp_graded/module.py +1340 -0
  559. sage/modules/fp_graded/morphism.py +1990 -0
  560. sage/modules/fp_graded/steenrod/all.py +1 -0
  561. sage/modules/fp_graded/steenrod/homspace.py +65 -0
  562. sage/modules/fp_graded/steenrod/module.py +477 -0
  563. sage/modules/fp_graded/steenrod/morphism.py +404 -0
  564. sage/modules/fp_graded/steenrod/profile.py +241 -0
  565. sage/modules/free_module.py +8447 -0
  566. sage/modules/free_module_element.cpython-314-aarch64-linux-gnu.so +0 -0
  567. sage/modules/free_module_element.pxd +22 -0
  568. sage/modules/free_module_element.pyx +5445 -0
  569. sage/modules/free_module_homspace.py +369 -0
  570. sage/modules/free_module_integer.py +896 -0
  571. sage/modules/free_module_morphism.py +823 -0
  572. sage/modules/free_module_pseudohomspace.py +352 -0
  573. sage/modules/free_module_pseudomorphism.py +578 -0
  574. sage/modules/free_quadratic_module.py +1706 -0
  575. sage/modules/free_quadratic_module_integer_symmetric.py +1790 -0
  576. sage/modules/matrix_morphism.py +1745 -0
  577. sage/modules/misc.py +103 -0
  578. sage/modules/module_functors.py +192 -0
  579. sage/modules/multi_filtered_vector_space.py +719 -0
  580. sage/modules/ore_module.py +2208 -0
  581. sage/modules/ore_module_element.py +178 -0
  582. sage/modules/ore_module_homspace.py +147 -0
  583. sage/modules/ore_module_morphism.py +968 -0
  584. sage/modules/quotient_module.py +699 -0
  585. sage/modules/real_double_vector.py +22 -0
  586. sage/modules/submodule.py +255 -0
  587. sage/modules/tensor_operations.py +567 -0
  588. sage/modules/torsion_quadratic_module.py +1352 -0
  589. sage/modules/tutorial_free_modules.py +248 -0
  590. sage/modules/vector_complex_double_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  591. sage/modules/vector_complex_double_dense.pxd +6 -0
  592. sage/modules/vector_complex_double_dense.pyx +117 -0
  593. sage/modules/vector_double_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  594. sage/modules/vector_double_dense.pxd +6 -0
  595. sage/modules/vector_double_dense.pyx +604 -0
  596. sage/modules/vector_integer_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  597. sage/modules/vector_integer_dense.pxd +15 -0
  598. sage/modules/vector_integer_dense.pyx +361 -0
  599. sage/modules/vector_integer_sparse.cpython-314-aarch64-linux-gnu.so +0 -0
  600. sage/modules/vector_integer_sparse.pxd +29 -0
  601. sage/modules/vector_integer_sparse.pyx +406 -0
  602. sage/modules/vector_modn_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  603. sage/modules/vector_modn_dense.pxd +12 -0
  604. sage/modules/vector_modn_dense.pyx +394 -0
  605. sage/modules/vector_modn_sparse.cpython-314-aarch64-linux-gnu.so +0 -0
  606. sage/modules/vector_modn_sparse.pxd +21 -0
  607. sage/modules/vector_modn_sparse.pyx +298 -0
  608. sage/modules/vector_numpy_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  609. sage/modules/vector_numpy_dense.pxd +15 -0
  610. sage/modules/vector_numpy_dense.pyx +304 -0
  611. sage/modules/vector_numpy_integer_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  612. sage/modules/vector_numpy_integer_dense.pxd +7 -0
  613. sage/modules/vector_numpy_integer_dense.pyx +54 -0
  614. sage/modules/vector_rational_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  615. sage/modules/vector_rational_dense.pxd +15 -0
  616. sage/modules/vector_rational_dense.pyx +387 -0
  617. sage/modules/vector_rational_sparse.cpython-314-aarch64-linux-gnu.so +0 -0
  618. sage/modules/vector_rational_sparse.pxd +30 -0
  619. sage/modules/vector_rational_sparse.pyx +413 -0
  620. sage/modules/vector_real_double_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  621. sage/modules/vector_real_double_dense.pxd +6 -0
  622. sage/modules/vector_real_double_dense.pyx +126 -0
  623. sage/modules/vector_space_homspace.py +430 -0
  624. sage/modules/vector_space_morphism.py +989 -0
  625. sage/modules/with_basis/all.py +15 -0
  626. sage/modules/with_basis/cell_module.py +494 -0
  627. sage/modules/with_basis/indexed_element.cpython-314-aarch64-linux-gnu.so +0 -0
  628. sage/modules/with_basis/indexed_element.pxd +13 -0
  629. sage/modules/with_basis/indexed_element.pyx +1058 -0
  630. sage/modules/with_basis/invariant.py +1075 -0
  631. sage/modules/with_basis/morphism.py +1636 -0
  632. sage/modules/with_basis/representation.py +2939 -0
  633. sage/modules/with_basis/subquotient.py +685 -0
  634. sage/numerical/all__sagemath_modules.py +6 -0
  635. sage/numerical/gauss_legendre.cpython-314-aarch64-linux-gnu.so +0 -0
  636. sage/numerical/gauss_legendre.pyx +381 -0
  637. sage/numerical/optimize.py +910 -0
  638. sage/probability/all.py +10 -0
  639. sage/probability/probability_distribution.cpython-314-aarch64-linux-gnu.so +0 -0
  640. sage/probability/probability_distribution.pyx +1242 -0
  641. sage/probability/random_variable.py +411 -0
  642. sage/quadratic_forms/all.py +4 -0
  643. sage/quadratic_forms/all__sagemath_modules.py +15 -0
  644. sage/quadratic_forms/binary_qf.py +2042 -0
  645. sage/quadratic_forms/bqf_class_group.py +748 -0
  646. sage/quadratic_forms/constructions.py +93 -0
  647. sage/quadratic_forms/count_local_2.cpython-314-aarch64-linux-gnu.so +0 -0
  648. sage/quadratic_forms/count_local_2.pyx +365 -0
  649. sage/quadratic_forms/extras.py +195 -0
  650. sage/quadratic_forms/quadratic_form.py +1753 -0
  651. sage/quadratic_forms/quadratic_form__count_local_2.py +221 -0
  652. sage/quadratic_forms/quadratic_form__equivalence_testing.py +708 -0
  653. sage/quadratic_forms/quadratic_form__evaluate.cpython-314-aarch64-linux-gnu.so +0 -0
  654. sage/quadratic_forms/quadratic_form__evaluate.pyx +139 -0
  655. sage/quadratic_forms/quadratic_form__local_density_congruence.py +977 -0
  656. sage/quadratic_forms/quadratic_form__local_field_invariants.py +1072 -0
  657. sage/quadratic_forms/quadratic_form__neighbors.py +424 -0
  658. sage/quadratic_forms/quadratic_form__reduction_theory.py +488 -0
  659. sage/quadratic_forms/quadratic_form__split_local_covering.py +416 -0
  660. sage/quadratic_forms/quadratic_form__ternary_Tornaria.py +657 -0
  661. sage/quadratic_forms/quadratic_form__theta.py +352 -0
  662. sage/quadratic_forms/quadratic_form__variable_substitutions.py +370 -0
  663. sage/quadratic_forms/random_quadraticform.py +209 -0
  664. sage/quadratic_forms/ternary.cpython-314-aarch64-linux-gnu.so +0 -0
  665. sage/quadratic_forms/ternary.pyx +1154 -0
  666. sage/quadratic_forms/ternary_qf.py +2027 -0
  667. sage/rings/all__sagemath_modules.py +28 -0
  668. sage/rings/asymptotic/all__sagemath_modules.py +1 -0
  669. sage/rings/asymptotic/misc.py +1252 -0
  670. sage/rings/cc.py +4 -0
  671. sage/rings/cfinite_sequence.py +1306 -0
  672. sage/rings/complex_conversion.cpython-314-aarch64-linux-gnu.so +0 -0
  673. sage/rings/complex_conversion.pxd +8 -0
  674. sage/rings/complex_conversion.pyx +23 -0
  675. sage/rings/complex_double.cpython-314-aarch64-linux-gnu.so +0 -0
  676. sage/rings/complex_double.pxd +21 -0
  677. sage/rings/complex_double.pyx +2654 -0
  678. sage/rings/complex_mpc.cpython-314-aarch64-linux-gnu.so +0 -0
  679. sage/rings/complex_mpc.pxd +21 -0
  680. sage/rings/complex_mpc.pyx +2576 -0
  681. sage/rings/complex_mpfr.cpython-314-aarch64-linux-gnu.so +0 -0
  682. sage/rings/complex_mpfr.pxd +18 -0
  683. sage/rings/complex_mpfr.pyx +3602 -0
  684. sage/rings/derivation.py +2334 -0
  685. sage/rings/finite_rings/all__sagemath_modules.py +1 -0
  686. sage/rings/finite_rings/maps_finite_field.py +191 -0
  687. sage/rings/function_field/all__sagemath_modules.py +8 -0
  688. sage/rings/function_field/derivations.py +102 -0
  689. sage/rings/function_field/derivations_rational.py +132 -0
  690. sage/rings/function_field/differential.py +853 -0
  691. sage/rings/function_field/divisor.py +1107 -0
  692. sage/rings/function_field/drinfeld_modules/action.py +199 -0
  693. sage/rings/function_field/drinfeld_modules/all.py +1 -0
  694. sage/rings/function_field/drinfeld_modules/charzero_drinfeld_module.py +673 -0
  695. sage/rings/function_field/drinfeld_modules/drinfeld_module.py +2087 -0
  696. sage/rings/function_field/drinfeld_modules/finite_drinfeld_module.py +1131 -0
  697. sage/rings/function_field/drinfeld_modules/homset.py +420 -0
  698. sage/rings/function_field/drinfeld_modules/morphism.py +820 -0
  699. sage/rings/function_field/hermite_form_polynomial.cpython-314-aarch64-linux-gnu.so +0 -0
  700. sage/rings/function_field/hermite_form_polynomial.pyx +188 -0
  701. sage/rings/function_field/khuri_makdisi.cpython-314-aarch64-linux-gnu.so +0 -0
  702. sage/rings/function_field/khuri_makdisi.pyx +935 -0
  703. sage/rings/invariants/all.py +4 -0
  704. sage/rings/invariants/invariant_theory.py +4597 -0
  705. sage/rings/invariants/reconstruction.py +395 -0
  706. sage/rings/polynomial/all__sagemath_modules.py +17 -0
  707. sage/rings/polynomial/integer_valued_polynomials.py +1230 -0
  708. sage/rings/polynomial/laurent_polynomial_mpair.cpython-314-aarch64-linux-gnu.so +0 -0
  709. sage/rings/polynomial/laurent_polynomial_mpair.pxd +15 -0
  710. sage/rings/polynomial/laurent_polynomial_mpair.pyx +2023 -0
  711. sage/rings/polynomial/ore_function_element.py +952 -0
  712. sage/rings/polynomial/ore_function_field.py +1028 -0
  713. sage/rings/polynomial/ore_polynomial_element.cpython-314-aarch64-linux-gnu.so +0 -0
  714. sage/rings/polynomial/ore_polynomial_element.pxd +48 -0
  715. sage/rings/polynomial/ore_polynomial_element.pyx +3145 -0
  716. sage/rings/polynomial/ore_polynomial_ring.py +1334 -0
  717. sage/rings/polynomial/polynomial_real_mpfr_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  718. sage/rings/polynomial/polynomial_real_mpfr_dense.pyx +788 -0
  719. sage/rings/polynomial/q_integer_valued_polynomials.py +1264 -0
  720. sage/rings/polynomial/skew_polynomial_element.cpython-314-aarch64-linux-gnu.so +0 -0
  721. sage/rings/polynomial/skew_polynomial_element.pxd +9 -0
  722. sage/rings/polynomial/skew_polynomial_element.pyx +684 -0
  723. sage/rings/polynomial/skew_polynomial_finite_field.cpython-314-aarch64-linux-gnu.so +0 -0
  724. sage/rings/polynomial/skew_polynomial_finite_field.pxd +19 -0
  725. sage/rings/polynomial/skew_polynomial_finite_field.pyx +1093 -0
  726. sage/rings/polynomial/skew_polynomial_finite_order.cpython-314-aarch64-linux-gnu.so +0 -0
  727. sage/rings/polynomial/skew_polynomial_finite_order.pxd +10 -0
  728. sage/rings/polynomial/skew_polynomial_finite_order.pyx +567 -0
  729. sage/rings/polynomial/skew_polynomial_ring.py +908 -0
  730. sage/rings/real_double_element_gsl.cpython-314-aarch64-linux-gnu.so +0 -0
  731. sage/rings/real_double_element_gsl.pxd +8 -0
  732. sage/rings/real_double_element_gsl.pyx +794 -0
  733. sage/rings/real_field.py +58 -0
  734. sage/rings/real_mpfr.cpython-314-aarch64-linux-gnu.so +0 -0
  735. sage/rings/real_mpfr.pxd +29 -0
  736. sage/rings/real_mpfr.pyx +6122 -0
  737. sage/rings/ring_extension.cpython-314-aarch64-linux-gnu.so +0 -0
  738. sage/rings/ring_extension.pxd +42 -0
  739. sage/rings/ring_extension.pyx +2779 -0
  740. sage/rings/ring_extension_conversion.cpython-314-aarch64-linux-gnu.so +0 -0
  741. sage/rings/ring_extension_conversion.pxd +16 -0
  742. sage/rings/ring_extension_conversion.pyx +462 -0
  743. sage/rings/ring_extension_element.cpython-314-aarch64-linux-gnu.so +0 -0
  744. sage/rings/ring_extension_element.pxd +21 -0
  745. sage/rings/ring_extension_element.pyx +1635 -0
  746. sage/rings/ring_extension_homset.py +64 -0
  747. sage/rings/ring_extension_morphism.cpython-314-aarch64-linux-gnu.so +0 -0
  748. sage/rings/ring_extension_morphism.pxd +35 -0
  749. sage/rings/ring_extension_morphism.pyx +920 -0
  750. sage/schemes/all__sagemath_modules.py +1 -0
  751. sage/schemes/projective/all__sagemath_modules.py +1 -0
  752. sage/schemes/projective/coherent_sheaf.py +300 -0
  753. sage/schemes/projective/cohomology.py +510 -0
  754. sage/stats/all.py +15 -0
  755. sage/stats/basic_stats.py +489 -0
  756. sage/stats/distributions/all.py +7 -0
  757. sage/stats/distributions/catalog.py +34 -0
  758. sage/stats/distributions/dgs.h +50 -0
  759. sage/stats/distributions/dgs.pxd +111 -0
  760. sage/stats/distributions/dgs_bern.h +400 -0
  761. sage/stats/distributions/dgs_gauss.h +614 -0
  762. sage/stats/distributions/dgs_misc.h +104 -0
  763. sage/stats/distributions/discrete_gaussian_integer.cpython-314-aarch64-linux-gnu.so +0 -0
  764. sage/stats/distributions/discrete_gaussian_integer.pxd +14 -0
  765. sage/stats/distributions/discrete_gaussian_integer.pyx +498 -0
  766. sage/stats/distributions/discrete_gaussian_lattice.py +908 -0
  767. sage/stats/distributions/discrete_gaussian_polynomial.py +141 -0
  768. sage/stats/hmm/all.py +15 -0
  769. sage/stats/hmm/chmm.cpython-314-aarch64-linux-gnu.so +0 -0
  770. sage/stats/hmm/chmm.pyx +1595 -0
  771. sage/stats/hmm/distributions.cpython-314-aarch64-linux-gnu.so +0 -0
  772. sage/stats/hmm/distributions.pxd +29 -0
  773. sage/stats/hmm/distributions.pyx +531 -0
  774. sage/stats/hmm/hmm.cpython-314-aarch64-linux-gnu.so +0 -0
  775. sage/stats/hmm/hmm.pxd +17 -0
  776. sage/stats/hmm/hmm.pyx +1388 -0
  777. sage/stats/hmm/util.cpython-314-aarch64-linux-gnu.so +0 -0
  778. sage/stats/hmm/util.pxd +7 -0
  779. sage/stats/hmm/util.pyx +165 -0
  780. sage/stats/intlist.cpython-314-aarch64-linux-gnu.so +0 -0
  781. sage/stats/intlist.pxd +14 -0
  782. sage/stats/intlist.pyx +588 -0
  783. sage/stats/r.py +49 -0
  784. sage/stats/time_series.cpython-314-aarch64-linux-gnu.so +0 -0
  785. sage/stats/time_series.pxd +6 -0
  786. sage/stats/time_series.pyx +2546 -0
  787. sage/tensor/all.py +2 -0
  788. sage/tensor/modules/all.py +8 -0
  789. sage/tensor/modules/alternating_contr_tensor.py +761 -0
  790. sage/tensor/modules/comp.py +5598 -0
  791. sage/tensor/modules/ext_pow_free_module.py +824 -0
  792. sage/tensor/modules/finite_rank_free_module.py +3589 -0
  793. sage/tensor/modules/format_utilities.py +333 -0
  794. sage/tensor/modules/free_module_alt_form.py +858 -0
  795. sage/tensor/modules/free_module_automorphism.py +1207 -0
  796. sage/tensor/modules/free_module_basis.py +1074 -0
  797. sage/tensor/modules/free_module_element.py +284 -0
  798. sage/tensor/modules/free_module_homset.py +652 -0
  799. sage/tensor/modules/free_module_linear_group.py +564 -0
  800. sage/tensor/modules/free_module_morphism.py +1581 -0
  801. sage/tensor/modules/free_module_tensor.py +3289 -0
  802. sage/tensor/modules/reflexive_module.py +386 -0
  803. sage/tensor/modules/tensor_free_module.py +780 -0
  804. sage/tensor/modules/tensor_free_submodule.py +538 -0
  805. sage/tensor/modules/tensor_free_submodule_basis.py +140 -0
  806. sage/tensor/modules/tensor_with_indices.py +1043 -0
@@ -0,0 +1,1252 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ r"""
3
+ Asymptotic Expansions --- Miscellaneous
4
+
5
+ AUTHORS:
6
+
7
+ - Daniel Krenn (2015)
8
+
9
+ ACKNOWLEDGEMENT:
10
+
11
+ - Benjamin Hackl, Clemens Heuberger and Daniel Krenn are supported by the
12
+ Austrian Science Fund (FWF): P 24644-N26.
13
+
14
+ - Benjamin Hackl is supported by the Google Summer of Code 2015.
15
+
16
+
17
+ Functions, Classes and Methods
18
+ ==============================
19
+ """
20
+
21
+ # ****************************************************************************
22
+ # Copyright (C) 2015 Daniel Krenn <dev@danielkrenn.at>
23
+ #
24
+ # This program is free software: you can redistribute it and/or modify
25
+ # it under the terms of the GNU General Public License as published by
26
+ # the Free Software Foundation, either version 2 of the License, or
27
+ # (at your option) any later version.
28
+ # https://www.gnu.org/licenses/
29
+ # ****************************************************************************
30
+
31
+ from sage.misc.cachefunc import cached_method
32
+ from sage.misc.lazy_import import lazy_import
33
+ from sage.structure.sage_object import SageObject
34
+
35
+ lazy_import('sage.rings.lazy_series_ring', 'LazyPowerSeriesRing')
36
+ lazy_import('sage.rings.multi_power_series_ring', 'MPowerSeriesRing_generic')
37
+ lazy_import('sage.rings.polynomial.multi_polynomial_ring_base', 'MPolynomialRing_base')
38
+ lazy_import('sage.rings.polynomial.polynomial_ring', 'PolynomialRing_generic')
39
+ lazy_import('sage.rings.power_series_ring', 'PowerSeriesRing_generic')
40
+
41
+
42
+ def repr_short_to_parent(s):
43
+ r"""
44
+ Helper method for the growth group factory, which converts a short
45
+ representation string to a parent.
46
+
47
+ INPUT:
48
+
49
+ - ``s`` -- string; short representation of a parent
50
+
51
+ OUTPUT: a parent
52
+
53
+ The possible short representations are shown in the examples below.
54
+
55
+ EXAMPLES::
56
+
57
+ sage: from sage.rings.asymptotic.misc import repr_short_to_parent
58
+ sage: repr_short_to_parent('ZZ')
59
+ Integer Ring
60
+ sage: repr_short_to_parent('QQ')
61
+ Rational Field
62
+ sage: repr_short_to_parent('SR') # needs sage.symbolic
63
+ Symbolic Ring
64
+ sage: repr_short_to_parent('NN')
65
+ Non negative integer semiring
66
+ sage: repr_short_to_parent('UU')
67
+ Group of Roots of Unity
68
+
69
+ TESTS::
70
+
71
+ sage: repr_short_to_parent('abcdef')
72
+ Traceback (most recent call last):
73
+ ...
74
+ ValueError: Cannot create a parent out of 'abcdef'.
75
+ > *previous* ValueError: unknown specification abcdef
76
+ > *and* NameError: name 'abcdef' is not defined
77
+ """
78
+ from sage.groups.misc_gps.argument_groups import ArgumentGroup
79
+ from sage.misc.sage_eval import sage_eval
80
+
81
+ def extract(s):
82
+ try:
83
+ return ArgumentGroup(specification=s)
84
+ except Exception as e:
85
+ e_ag = e
86
+ e_ag.__traceback__ = None
87
+
88
+ try:
89
+ return sage_eval(s)
90
+ except Exception as e:
91
+ e_se = e
92
+ e_se.__traceback__ = None
93
+
94
+ raise combine_exceptions(
95
+ ValueError("Cannot create a parent out of '%s'." % (s,)),
96
+ e_ag, e_se)
97
+
98
+ P = extract(s)
99
+
100
+ from sage.misc.lazy_import import LazyImport
101
+ if type(P) is LazyImport:
102
+ P = P._get_object()
103
+
104
+ from sage.structure.parent import Parent
105
+ if not isinstance(P, Parent):
106
+ raise ValueError("'%s' does not describe a parent." % (s,))
107
+ return P
108
+
109
+
110
+ def parent_to_repr_short(P):
111
+ r"""
112
+ Helper method which generates a short(er) representation string
113
+ out of a parent.
114
+
115
+ INPUT:
116
+
117
+ - ``P`` -- a parent
118
+
119
+ OUTPUT: string
120
+
121
+ EXAMPLES::
122
+
123
+ sage: from sage.rings.asymptotic.misc import parent_to_repr_short
124
+ sage: parent_to_repr_short(ZZ)
125
+ 'ZZ'
126
+ sage: parent_to_repr_short(QQ)
127
+ 'QQ'
128
+ sage: parent_to_repr_short(SR) # needs sage.symbolic
129
+ 'SR'
130
+ sage: parent_to_repr_short(RR)
131
+ 'RR'
132
+ sage: parent_to_repr_short(CC)
133
+ 'CC'
134
+ sage: parent_to_repr_short(ZZ['x'])
135
+ 'ZZ[x]'
136
+ sage: parent_to_repr_short(QQ['d, k'])
137
+ 'QQ[d, k]'
138
+ sage: parent_to_repr_short(QQ['e'])
139
+ 'QQ[e]'
140
+ sage: parent_to_repr_short(SR[['a, r']]) # needs sage.symbolic
141
+ 'SR[[a, r]]'
142
+ sage: parent_to_repr_short(Zmod(3))
143
+ 'Ring of integers modulo 3'
144
+ sage: parent_to_repr_short(Zmod(3)['g'])
145
+ 'Univariate Polynomial Ring in g over Ring of integers modulo 3'
146
+ """
147
+ def abbreviate(P):
148
+ try:
149
+ return P._repr_short_()
150
+ except AttributeError:
151
+ pass
152
+
153
+ from sage.rings.integer_ring import ZZ
154
+ if P == ZZ:
155
+ return 'ZZ'
156
+
157
+ from sage.rings.rational_field import QQ
158
+ if P == QQ:
159
+ return 'QQ'
160
+
161
+ from sage.rings.real_mpfr import RR
162
+ if P == RR:
163
+ return 'RR'
164
+
165
+ try:
166
+ from sage.rings.cc import CC
167
+ except ImportError:
168
+ pass
169
+ else:
170
+ if P == CC:
171
+ return 'CC'
172
+
173
+ try:
174
+ from sage.rings.cif import CIF
175
+ except ImportError:
176
+ pass
177
+ else:
178
+ if P == CIF:
179
+ return 'CIF'
180
+
181
+ try:
182
+ from sage.rings.complex_arb import CBF
183
+ except ImportError:
184
+ pass
185
+ else:
186
+ if P == CBF:
187
+ return 'CBF'
188
+
189
+ try:
190
+ from sage.rings.real_arb import RBF
191
+ except ImportError:
192
+ pass
193
+ else:
194
+ if P == RBF:
195
+ return 'RBF'
196
+
197
+ try:
198
+ from sage.rings.real_mpfi import RIF
199
+ except ImportError:
200
+ pass
201
+ else:
202
+ if P == RIF:
203
+ return 'RIF'
204
+
205
+ try:
206
+ from sage.symbolic.ring import SR
207
+ except ImportError:
208
+ pass
209
+ else:
210
+ if P == SR:
211
+ return 'SR'
212
+
213
+ raise ValueError('Cannot abbreviate %s.' % (P,))
214
+
215
+ poly = isinstance(P, (PolynomialRing_generic, MPolynomialRing_base))
216
+ power = isinstance(P, (PowerSeriesRing_generic, MPowerSeriesRing_generic, LazyPowerSeriesRing))
217
+
218
+ if poly or power:
219
+ if poly:
220
+ op, cl = ('[', ']')
221
+ else:
222
+ op, cl = ('[[', ']]')
223
+ try:
224
+ s = abbreviate(P.base_ring()) + op + ', '.join(P.variable_names()) + cl
225
+ except ValueError:
226
+ s = str(P)
227
+ else:
228
+ try:
229
+ s = abbreviate(P)
230
+ except ValueError:
231
+ s = str(P)
232
+
233
+ return s
234
+
235
+
236
+ def split_str_by_op(string, op, strip_parentheses=True):
237
+ r"""
238
+ Split the given string into a tuple of substrings arising by
239
+ splitting by ``op`` and taking care of parentheses.
240
+
241
+ INPUT:
242
+
243
+ - ``string`` -- string
244
+
245
+ - ``op`` -- string; this is used by
246
+ :python:`str.split <library/stdtypes.html#str.split>`.
247
+ Thus, if this is ``None``, then any whitespace string is a
248
+ separator and empty strings are removed from the result.
249
+
250
+ - ``strip_parentheses`` -- boolean (default: ``True``)
251
+
252
+ OUTPUT: a tuple of strings
253
+
254
+ TESTS::
255
+
256
+ sage: from sage.rings.asymptotic.misc import split_str_by_op
257
+ sage: split_str_by_op('x^ZZ', '*')
258
+ ('x^ZZ',)
259
+ sage: split_str_by_op('log(x)^ZZ * y^QQ', '*')
260
+ ('log(x)^ZZ', 'y^QQ')
261
+ sage: split_str_by_op('log(x)**ZZ * y**QQ', '*')
262
+ ('log(x)**ZZ', 'y**QQ')
263
+ sage: split_str_by_op('a^b * * c^d', '*')
264
+ Traceback (most recent call last):
265
+ ...
266
+ ValueError: 'a^b * * c^d' is invalid since a '*' follows a '*'.
267
+ sage: split_str_by_op('a^b * (c*d^e)', '*')
268
+ ('a^b', 'c*d^e')
269
+
270
+ ::
271
+
272
+ sage: split_str_by_op('(a^b)^c', '^')
273
+ ('a^b', 'c')
274
+ sage: split_str_by_op('a^(b^c)', '^')
275
+ ('a', 'b^c')
276
+
277
+ ::
278
+
279
+ sage: split_str_by_op('(a) + (b)', op='+', strip_parentheses=True)
280
+ ('a', 'b')
281
+ sage: split_str_by_op('(a) + (b)', op='+', strip_parentheses=False)
282
+ ('(a)', '(b)')
283
+ sage: split_str_by_op(' ( t ) ', op='+', strip_parentheses=False)
284
+ ('( t )',)
285
+
286
+ ::
287
+
288
+ sage: split_str_by_op(' ( t ) ', op=None)
289
+ ('t',)
290
+ sage: split_str_by_op(' ( t )s', op=None)
291
+ ('(t)s',)
292
+ sage: split_str_by_op(' ( t ) s', op=None)
293
+ ('t', 's')
294
+
295
+ ::
296
+
297
+ sage: split_str_by_op('(e^(n*log(n)))^SR.subring(no_variables=True)', '*')
298
+ ('(e^(n*log(n)))^SR.subring(no_variables=True)',)
299
+ """
300
+ def is_balanced(s):
301
+ open = 0
302
+ for l in s:
303
+ if l == '(':
304
+ open += 1
305
+ elif l == ')':
306
+ open -= 1
307
+ if open < 0:
308
+ return False
309
+ return bool(open == 0)
310
+
311
+ factors = []
312
+ balanced = True
313
+ if string and op is not None and string.startswith(op):
314
+ raise ValueError("'%s' is invalid since it starts with a '%s'." %
315
+ (string, op))
316
+ for s in string.split(op):
317
+ if not s:
318
+ factors[-1] += op
319
+ balanced = False
320
+ continue
321
+ if not s.strip():
322
+ raise ValueError("'%s' is invalid since a '%s' follows a '%s'." %
323
+ (string, op, op))
324
+ if not balanced:
325
+ s = factors.pop() + (op if op else '') + s
326
+ balanced = is_balanced(s)
327
+ factors.append(s)
328
+
329
+ if not balanced:
330
+ raise ValueError("Parentheses in '%s' are not balanced." % (string,))
331
+
332
+ def strip(s):
333
+ s = s.strip()
334
+ if not s:
335
+ return s
336
+ if strip_parentheses and s[0] == '(' and s[-1] == ')':
337
+ t = s[1:-1]
338
+ if is_balanced(t):
339
+ s = t
340
+ return s.strip()
341
+
342
+ return tuple(strip(f) for f in factors)
343
+
344
+
345
+ def repr_op(left, op, right=None, latex=False):
346
+ r"""
347
+ Create a string ``left op right`` with
348
+ taking care of parentheses in its operands.
349
+
350
+ INPUT:
351
+
352
+ - ``left`` -- an element
353
+
354
+ - ``op`` -- string
355
+
356
+ - ``right`` -- an element
357
+
358
+ - ``latex`` -- boolean (default: ``False``); if set, then
359
+ LaTeX-output is returned
360
+
361
+ OUTPUT: string
362
+
363
+ EXAMPLES::
364
+
365
+ sage: from sage.rings.asymptotic.misc import repr_op
366
+ sage: repr_op('a^b', '^', 'c')
367
+ '(a^b)^c'
368
+
369
+ TESTS::
370
+
371
+ sage: repr_op('a-b', '^', 'c')
372
+ '(a-b)^c'
373
+ sage: repr_op('a+b', '^', 'c')
374
+ '(a+b)^c'
375
+
376
+ ::
377
+
378
+ sage: print(repr_op(r'\frac{1}{2}', '^', 'c', latex=True))
379
+ \left(\frac{1}{2}\right)^c
380
+
381
+ ::
382
+
383
+ sage: repr_op('Arg', '_', 'Symbolic Ring')
384
+ 'Arg_(Symbolic Ring)'
385
+ """
386
+ left = str(left)
387
+ right = str(right) if right is not None else ''
388
+
389
+ def add_parentheses(s, op):
390
+ if op in ('^', '_'):
391
+ signals = ('^', '/', '*', '-', '+', ' ')
392
+ else:
393
+ return s
394
+ if any(sig in s for sig in signals) or latex and s.startswith(r'\frac'):
395
+ if latex:
396
+ return r'\left({}\right)'.format(s)
397
+ return '({})'.format(s)
398
+ return s
399
+
400
+ return add_parentheses(left, op) + op + add_parentheses(right, op)
401
+
402
+
403
+ def combine_exceptions(e, *f):
404
+ r"""
405
+ Helper function which combines the messages of the given exceptions.
406
+
407
+ INPUT:
408
+
409
+ - ``e`` -- an exception
410
+
411
+ - ``*f`` -- exceptions
412
+
413
+ OUTPUT: an exception
414
+
415
+ EXAMPLES::
416
+
417
+ sage: from sage.rings.asymptotic.misc import combine_exceptions
418
+ sage: raise combine_exceptions(ValueError('Outer.'), TypeError('Inner.'))
419
+ Traceback (most recent call last):
420
+ ...
421
+ ValueError: Outer.
422
+ > *previous* TypeError: Inner.
423
+ sage: raise combine_exceptions(ValueError('Outer.'),
424
+ ....: TypeError('Inner1.'), TypeError('Inner2.'))
425
+ Traceback (most recent call last):
426
+ ...
427
+ ValueError: Outer.
428
+ > *previous* TypeError: Inner1.
429
+ > *and* TypeError: Inner2.
430
+ sage: raise combine_exceptions(ValueError('Outer.'),
431
+ ....: combine_exceptions(TypeError('Middle.'),
432
+ ....: TypeError('Inner.')))
433
+ Traceback (most recent call last):
434
+ ...
435
+ ValueError: Outer.
436
+ > *previous* TypeError: Middle.
437
+ >> *previous* TypeError: Inner.
438
+ """
439
+ import re
440
+ msg = ('\n *previous* ' +
441
+ '\n *and* '.join("%s: %s" % (ff.__class__.__name__, str(ff)) for ff in f))
442
+ msg = re.sub(r'^([>]* \*previous\*)', r'>\1', msg, flags=re.MULTILINE)
443
+ msg = re.sub(r'^([>]* \*and\*)', r'>\1', msg, flags=re.MULTILINE)
444
+ msg = str(e.args if len(e.args) > 1 else e.args[0]) + msg
445
+ e.args = (msg,)
446
+ return e
447
+
448
+
449
+ def substitute_raise_exception(element, e):
450
+ r"""
451
+ Raise an error describing what went wrong with the substitution.
452
+
453
+ INPUT:
454
+
455
+ - ``element`` -- an element
456
+
457
+ - ``e`` -- an exception which is included in the raised error message
458
+
459
+ OUTPUT: raise an exception of the same type as ``e``
460
+
461
+ TESTS::
462
+
463
+ sage: from sage.rings.asymptotic.misc import substitute_raise_exception
464
+ sage: substitute_raise_exception(x, Exception('blub')) # needs sage.symbolic
465
+ Traceback (most recent call last):
466
+ ...
467
+ Exception: Cannot substitute in x in Symbolic Ring.
468
+ > *previous* Exception: blub
469
+ """
470
+ raise combine_exceptions(
471
+ type(e)('Cannot substitute in %s in %s.' %
472
+ (element, element.parent())), e)
473
+
474
+
475
+ def bidirectional_merge_overlapping(A, B, key=None):
476
+ r"""
477
+ Merge the two overlapping tuples/lists.
478
+
479
+ INPUT:
480
+
481
+ - ``A`` -- list or tuple (type has to coincide with type of ``B``)
482
+
483
+ - ``B`` -- list or tuple (type has to coincide with type of ``A``)
484
+
485
+ - ``key`` -- (default: ``None``) a function. If ``None``, then the
486
+ identity is used. This ``key``-function applied on an element
487
+ of the list/tuple is used for comparison. Thus elements with the
488
+ same key are considered as equal.
489
+
490
+ OUTPUT:
491
+
492
+ A pair of lists or tuples (depending on the type of ``A`` and ``B``).
493
+
494
+ .. NOTE::
495
+
496
+ Suppose we can decompose the list `A=ac` and `B=cb` with
497
+ lists `a`, `b`, `c`, where `c` is nonempty. Then
498
+ :func:`bidirectional_merge_overlapping` returns the pair `(acb, acb)`.
499
+
500
+ Suppose a ``key``-function is specified and `A=ac_A` and
501
+ `B=c_Bb`, where the list of keys of the elements of `c_A`
502
+ equals the list of keys of the elements of `c_B`. Then
503
+ :func:`bidirectional_merge_overlapping` returns the pair `(ac_Ab, ac_Bb)`.
504
+
505
+ After unsuccessfully merging `A=ac` and `B=cb`,
506
+ a merge of `A=ca` and `B=bc` is tried.
507
+
508
+ TESTS::
509
+
510
+ sage: from sage.rings.asymptotic.misc import bidirectional_merge_overlapping
511
+ sage: def f(L, s):
512
+ ....: return list((ell, s) for ell in L)
513
+ sage: key = lambda k: k[0]
514
+ sage: bidirectional_merge_overlapping(f([0..3], 'a'), f([5..7], 'b'), key)
515
+ Traceback (most recent call last):
516
+ ...
517
+ ValueError: Input does not have an overlap.
518
+ sage: bidirectional_merge_overlapping(f([0..2], 'a'), f([4..7], 'b'), key)
519
+ Traceback (most recent call last):
520
+ ...
521
+ ValueError: Input does not have an overlap.
522
+ sage: bidirectional_merge_overlapping(f([4..7], 'a'), f([0..2], 'b'), key)
523
+ Traceback (most recent call last):
524
+ ...
525
+ ValueError: Input does not have an overlap.
526
+ sage: bidirectional_merge_overlapping(f([0..3], 'a'), f([3..4], 'b'), key)
527
+ ([(0, 'a'), (1, 'a'), (2, 'a'), (3, 'a'), (4, 'b')],
528
+ [(0, 'a'), (1, 'a'), (2, 'a'), (3, 'b'), (4, 'b')])
529
+ sage: bidirectional_merge_overlapping(f([3..4], 'a'), f([0..3], 'b'), key)
530
+ ([(0, 'b'), (1, 'b'), (2, 'b'), (3, 'a'), (4, 'a')],
531
+ [(0, 'b'), (1, 'b'), (2, 'b'), (3, 'b'), (4, 'a')])
532
+ sage: bidirectional_merge_overlapping(f([0..1], 'a'), f([0..4], 'b'), key)
533
+ ([(0, 'a'), (1, 'a'), (2, 'b'), (3, 'b'), (4, 'b')],
534
+ [(0, 'b'), (1, 'b'), (2, 'b'), (3, 'b'), (4, 'b')])
535
+ sage: bidirectional_merge_overlapping(f([0..3], 'a'), f([0..1], 'b'), key)
536
+ ([(0, 'a'), (1, 'a'), (2, 'a'), (3, 'a')],
537
+ [(0, 'b'), (1, 'b'), (2, 'a'), (3, 'a')])
538
+ sage: bidirectional_merge_overlapping(f([0..3], 'a'), f([1..3], 'b'), key)
539
+ ([(0, 'a'), (1, 'a'), (2, 'a'), (3, 'a')],
540
+ [(0, 'a'), (1, 'b'), (2, 'b'), (3, 'b')])
541
+ sage: bidirectional_merge_overlapping(f([1..3], 'a'), f([0..3], 'b'), key)
542
+ ([(0, 'b'), (1, 'a'), (2, 'a'), (3, 'a')],
543
+ [(0, 'b'), (1, 'b'), (2, 'b'), (3, 'b')])
544
+ sage: bidirectional_merge_overlapping(f([0..6], 'a'), f([3..4], 'b'), key)
545
+ ([(0, 'a'), (1, 'a'), (2, 'a'), (3, 'a'), (4, 'a'), (5, 'a'), (6, 'a')],
546
+ [(0, 'a'), (1, 'a'), (2, 'a'), (3, 'b'), (4, 'b'), (5, 'a'), (6, 'a')])
547
+ sage: bidirectional_merge_overlapping(f([0..3], 'a'), f([1..2], 'b'), key)
548
+ ([(0, 'a'), (1, 'a'), (2, 'a'), (3, 'a')],
549
+ [(0, 'a'), (1, 'b'), (2, 'b'), (3, 'a')])
550
+ sage: bidirectional_merge_overlapping(f([1..2], 'a'), f([0..3], 'b'), key)
551
+ ([(0, 'b'), (1, 'a'), (2, 'a'), (3, 'b')],
552
+ [(0, 'b'), (1, 'b'), (2, 'b'), (3, 'b')])
553
+ sage: bidirectional_merge_overlapping(f([1..3], 'a'), f([1..3], 'b'), key)
554
+ ([(1, 'a'), (2, 'a'), (3, 'a')],
555
+ [(1, 'b'), (2, 'b'), (3, 'b')])
556
+ """
557
+ if key is None:
558
+ Akeys = A
559
+ Bkeys = B
560
+ else:
561
+ Akeys = tuple(key(a) for a in A)
562
+ Bkeys = tuple(key(b) for b in B)
563
+
564
+ def find_overlapping_index(A, B):
565
+ if len(B) > len(A) - 2:
566
+ raise StopIteration
567
+ matches = iter(i for i in range(1, len(A) - len(B))
568
+ if A[i:i+len(B)] == B)
569
+ return next(matches)
570
+
571
+ def find_mergedoverlapping_index(A, B):
572
+ """
573
+ Return in index i where to merge two overlapping tuples/lists ``A`` and ``B``.
574
+
575
+ Then ``A + B[i:]`` or ``A[:-i] + B`` are the merged tuples/lists.
576
+
577
+ Adapted from https://stackoverflow.com/a/30056066/1052778.
578
+ """
579
+ matches = iter(i for i in range(min(len(A), len(B)), 0, -1)
580
+ if A[-i:] == B[:i])
581
+ return next(matches, 0)
582
+
583
+ i = find_mergedoverlapping_index(Akeys, Bkeys)
584
+ if i > 0:
585
+ return A + B[i:], A[:-i] + B
586
+
587
+ i = find_mergedoverlapping_index(Bkeys, Akeys)
588
+ if i > 0:
589
+ return B[:-i] + A, B + A[i:]
590
+
591
+ try:
592
+ i = find_overlapping_index(Akeys, Bkeys)
593
+ except StopIteration:
594
+ pass
595
+ else:
596
+ return A, A[:i] + B + A[i+len(B):]
597
+
598
+ try:
599
+ i = find_overlapping_index(Bkeys, Akeys)
600
+ except StopIteration:
601
+ pass
602
+ else:
603
+ return B[:i] + A + B[i+len(A):], B
604
+
605
+ raise ValueError('Input does not have an overlap.')
606
+
607
+
608
+ def bidirectional_merge_sorted(A, B, key=None):
609
+ r"""
610
+ Merge the two tuples/lists, keeping the orders provided by them.
611
+
612
+ INPUT:
613
+
614
+ - ``A`` -- list or tuple (type has to coincide with type of ``B``)
615
+
616
+ - ``B`` -- list or tuple (type has to coincide with type of ``A``)
617
+
618
+ - ``key`` -- (default: ``None``) a function. If ``None``, then the
619
+ identity is used. This ``key``-function applied on an element
620
+ of the list/tuple is used for comparison. Thus elements with the
621
+ same key are considered as equal.
622
+
623
+ .. NOTE::
624
+
625
+ The two tuples/list need to overlap, i.e. need at least
626
+ one key in common.
627
+
628
+ OUTPUT:
629
+
630
+ A pair of lists containing all elements totally ordered. (The first
631
+ component uses ``A`` as a merge base, the second component ``B``.)
632
+
633
+ If merging fails, then a
634
+ :python:`RuntimeError<library/exceptions.html#exceptions.RuntimeError>`
635
+ is raised.
636
+
637
+ TESTS::
638
+
639
+ sage: from sage.rings.asymptotic.misc import bidirectional_merge_sorted
640
+ sage: def f(L, s):
641
+ ....: return list((ell, s) for ell in L)
642
+ sage: key = lambda k: k[0]
643
+ sage: bidirectional_merge_sorted(f([0..3], 'a'), f([5..7], 'b'), key)
644
+ Traceback (most recent call last):
645
+ ...
646
+ RuntimeError: no common elements
647
+ sage: bidirectional_merge_sorted(f([0..2], 'a'), f([4..7], 'b'), key)
648
+ Traceback (most recent call last):
649
+ ...
650
+ RuntimeError: no common elements
651
+ sage: bidirectional_merge_sorted(f([4..7], 'a'), f([0..2], 'b'), key)
652
+ Traceback (most recent call last):
653
+ ...
654
+ RuntimeError: no common elements
655
+ sage: bidirectional_merge_sorted(f([0..3], 'a'), f([3..4], 'b'), key)
656
+ ([(0, 'a'), (1, 'a'), (2, 'a'), (3, 'a'), (4, 'b')],
657
+ [(0, 'a'), (1, 'a'), (2, 'a'), (3, 'b'), (4, 'b')])
658
+ sage: bidirectional_merge_sorted(f([3..4], 'a'), f([0..3], 'b'), key)
659
+ ([(0, 'b'), (1, 'b'), (2, 'b'), (3, 'a'), (4, 'a')],
660
+ [(0, 'b'), (1, 'b'), (2, 'b'), (3, 'b'), (4, 'a')])
661
+ sage: bidirectional_merge_sorted(f([0..1], 'a'), f([0..4], 'b'), key)
662
+ ([(0, 'a'), (1, 'a'), (2, 'b'), (3, 'b'), (4, 'b')],
663
+ [(0, 'b'), (1, 'b'), (2, 'b'), (3, 'b'), (4, 'b')])
664
+ sage: bidirectional_merge_sorted(f([0..3], 'a'), f([0..1], 'b'), key)
665
+ ([(0, 'a'), (1, 'a'), (2, 'a'), (3, 'a')],
666
+ [(0, 'b'), (1, 'b'), (2, 'a'), (3, 'a')])
667
+ sage: bidirectional_merge_sorted(f([0..3], 'a'), f([1..3], 'b'), key)
668
+ ([(0, 'a'), (1, 'a'), (2, 'a'), (3, 'a')],
669
+ [(0, 'a'), (1, 'b'), (2, 'b'), (3, 'b')])
670
+ sage: bidirectional_merge_sorted(f([1..3], 'a'), f([0..3], 'b'), key)
671
+ ([(0, 'b'), (1, 'a'), (2, 'a'), (3, 'a')],
672
+ [(0, 'b'), (1, 'b'), (2, 'b'), (3, 'b')])
673
+ sage: bidirectional_merge_sorted(f([0..6], 'a'), f([3..4], 'b'), key)
674
+ ([(0, 'a'), (1, 'a'), (2, 'a'), (3, 'a'), (4, 'a'), (5, 'a'), (6, 'a')],
675
+ [(0, 'a'), (1, 'a'), (2, 'a'), (3, 'b'), (4, 'b'), (5, 'a'), (6, 'a')])
676
+ sage: bidirectional_merge_sorted(f([0..3], 'a'), f([1..2], 'b'), key)
677
+ ([(0, 'a'), (1, 'a'), (2, 'a'), (3, 'a')],
678
+ [(0, 'a'), (1, 'b'), (2, 'b'), (3, 'a')])
679
+ sage: bidirectional_merge_sorted(f([1..2], 'a'), f([0..3], 'b'), key)
680
+ ([(0, 'b'), (1, 'a'), (2, 'a'), (3, 'b')],
681
+ [(0, 'b'), (1, 'b'), (2, 'b'), (3, 'b')])
682
+ sage: bidirectional_merge_sorted(f([1..3], 'a'), f([1..3], 'b'), key)
683
+ ([(1, 'a'), (2, 'a'), (3, 'a')],
684
+ [(1, 'b'), (2, 'b'), (3, 'b')])
685
+
686
+ ::
687
+
688
+ sage: bidirectional_merge_sorted(f([1, 2, 3], 'a'), f([1, 3], 'b'), key)
689
+ ([(1, 'a'), (2, 'a'), (3, 'a')],
690
+ [(1, 'b'), (2, 'a'), (3, 'b')])
691
+ sage: bidirectional_merge_sorted(f([1, 4, 5, 6], 'a'), f([1, 2, 3, 4, 6], 'b'), key)
692
+ ([(1, 'a'), (2, 'b'), (3, 'b'), (4, 'a'), (5, 'a'), (6, 'a')],
693
+ [(1, 'b'), (2, 'b'), (3, 'b'), (4, 'b'), (5, 'a'), (6, 'b')])
694
+ sage: bidirectional_merge_sorted(f([1, 2, 3, 4], 'a'), f([1, 3, 5], 'b'), key)
695
+ Traceback (most recent call last):
696
+ ...
697
+ RuntimeError: sorting not unique
698
+ sage: bidirectional_merge_sorted(f([1, 2], 'a'), f([2, 1], 'b'), key)
699
+ Traceback (most recent call last):
700
+ ...
701
+ RuntimeError: sorting in lists not compatible
702
+ sage: bidirectional_merge_sorted(f([1, 2, 4], 'a'), f([1, 3, 4], 'b'), key)
703
+ Traceback (most recent call last):
704
+ ...
705
+ RuntimeError: sorting not unique
706
+ """
707
+ if key is None:
708
+ Akeys = A
709
+ Bkeys = B
710
+ else:
711
+ Akeys = tuple(key(a) for a in A)
712
+ Bkeys = tuple(key(b) for b in B)
713
+
714
+ matches = tuple((i, j)
715
+ for i, a in enumerate(Akeys)
716
+ for j, b in enumerate(Bkeys)
717
+ if a == b)
718
+ if not matches:
719
+ raise RuntimeError('no common elements')
720
+
721
+ resultA = []
722
+ resultB = []
723
+ last = (0, 0)
724
+ end = (len(A), len(B))
725
+ for current in matches + (end,):
726
+ if not all(a <= b for a, b in zip(last, current)):
727
+ raise RuntimeError('sorting in lists not compatible')
728
+ if last[0] == current[0]:
729
+ resultA.extend(B[last[1]:current[1]])
730
+ resultB.extend(B[last[1]:current[1]])
731
+ elif last[1] == current[1]:
732
+ resultA.extend(A[last[0]:current[0]])
733
+ resultB.extend(A[last[0]:current[0]])
734
+ else:
735
+ raise RuntimeError('sorting not unique')
736
+ if current != end:
737
+ resultA.append(A[current[0]])
738
+ resultB.append(B[current[1]])
739
+ last = (current[0]+1, current[1]+1)
740
+
741
+ return (resultA, resultB)
742
+
743
+
744
+ def log_string(element, base=None):
745
+ r"""
746
+ Return a representation of the log of the given element to the
747
+ given base.
748
+
749
+ INPUT:
750
+
751
+ - ``element`` -- an object
752
+
753
+ - ``base`` -- an object or ``None``
754
+
755
+ OUTPUT: string
756
+
757
+ EXAMPLES::
758
+
759
+ sage: from sage.rings.asymptotic.misc import log_string
760
+ sage: log_string(3)
761
+ 'log(3)'
762
+ sage: log_string(3, base=42)
763
+ 'log(3, base=42)'
764
+ """
765
+ basestr = ', base=' + str(base) if base else ''
766
+ return 'log(%s%s)' % (element, basestr)
767
+
768
+
769
+ def strip_symbolic(expression):
770
+ r"""
771
+ Return, if possible, the underlying (numeric) object of
772
+ the symbolic expression.
773
+
774
+ If ``expression`` is not symbolic, then ``expression`` is returned.
775
+
776
+ INPUT:
777
+
778
+ - ``expression`` -- an object
779
+
780
+ OUTPUT: an object
781
+
782
+ EXAMPLES::
783
+
784
+ sage: # needs sage.symbolic
785
+ sage: from sage.rings.asymptotic.misc import strip_symbolic
786
+ sage: strip_symbolic(SR(2)); _.parent()
787
+ 2
788
+ Integer Ring
789
+ sage: strip_symbolic(SR(2/3)); _.parent()
790
+ 2/3
791
+ Rational Field
792
+ sage: strip_symbolic(SR('x')); _.parent()
793
+ x
794
+ Symbolic Ring
795
+ sage: strip_symbolic(pi); _.parent()
796
+ pi
797
+ Symbolic Ring
798
+ """
799
+ from sage.structure.element import parent, Element
800
+ from sage.symbolic.ring import SymbolicRing
801
+
802
+ P = parent(expression)
803
+ if isinstance(P, SymbolicRing):
804
+ try:
805
+ stripped = expression.pyobject()
806
+ if isinstance(stripped, Element):
807
+ return stripped
808
+ except TypeError:
809
+ pass
810
+ return expression
811
+
812
+
813
+ class NotImplementedOZero(NotImplementedError):
814
+ r"""
815
+ A special :python:`NotImplementedError<library/exceptions.html#exceptions.NotImplementedError>`
816
+ which is raised when the result is O(0) which means 0
817
+ for sufficiently large values of the variable.
818
+ """
819
+ def __init__(self, asymptotic_ring=None, var=None, exact_part=0):
820
+ r"""
821
+ INPUT:
822
+
823
+ - ``asymptotic_ring`` -- (default: ``None``) an :class:`AsymptoticRing`
824
+ or ``None``
825
+
826
+ - ``var`` -- (default: ``None``) a string
827
+
828
+ Either ``asymptotic_ring`` or ``var`` has to be specified.
829
+
830
+ - ``exact_part`` -- (default: ``0``) asymptotic expansion
831
+
832
+ EXAMPLES::
833
+
834
+ sage: from sage.rings.asymptotic.misc import NotImplementedOZero
835
+
836
+ sage: # needs sage.symbolic
837
+ sage: A = AsymptoticRing('n^ZZ', ZZ)
838
+ sage: raise NotImplementedOZero(A)
839
+ Traceback (most recent call last):
840
+ ...
841
+ NotImplementedOZero: got O(0)
842
+ The error term O(0) means 0 for sufficiently large n.
843
+
844
+ sage: raise NotImplementedOZero(var='m')
845
+ Traceback (most recent call last):
846
+ ...
847
+ NotImplementedOZero: got O(0)
848
+ The error term O(0) means 0 for sufficiently large m.
849
+
850
+ TESTS::
851
+
852
+ sage: raise NotImplementedOZero(A, var='m') # needs sage.symbolic
853
+ Traceback (most recent call last):
854
+ ...
855
+ ValueError: specify either 'asymptotic_ring' or 'var'
856
+ sage: raise NotImplementedOZero()
857
+ Traceback (most recent call last):
858
+ ...
859
+ ValueError: specify either 'asymptotic_ring' or 'var'
860
+ """
861
+ if (asymptotic_ring is None) == (var is None):
862
+ raise ValueError("specify either 'asymptotic_ring' or 'var'")
863
+
864
+ if var is None:
865
+ var = ', '.join(str(g) for g in asymptotic_ring.gens())
866
+ message = ('got {}\n'.format(('{} + '.format(exact_part) if exact_part else '')
867
+ + 'O(0)') +
868
+ 'The error term O(0) '
869
+ 'means 0 for sufficiently large {}.'.format(var))
870
+
871
+ if asymptotic_ring is not None and isinstance(exact_part, int) and exact_part == 0:
872
+ exact_part = asymptotic_ring.zero()
873
+ self.exact_part = exact_part
874
+
875
+ super().__init__(message)
876
+
877
+
878
+ class NotImplementedBZero(NotImplementedError):
879
+ r"""
880
+ A special :python:`NotImplementedError<library/exceptions.html#exceptions.NotImplementedError>`
881
+ which is raised when the result is B(0) which means 0
882
+ for sufficiently large values of the variable.
883
+ """
884
+ def __init__(self, asymptotic_ring=None, var=None, exact_part=0):
885
+ r"""
886
+ INPUT:
887
+
888
+ - ``asymptotic_ring`` -- (default: ``None``) an :class:`AsymptoticRing`
889
+ or ``None``
890
+
891
+ - ``var`` -- (default: ``None``) string
892
+
893
+ Either ``asymptotic_ring`` or ``var`` has to be specified.
894
+
895
+ - ``exact_part`` -- (default: ``0``) asymptotic expansion
896
+
897
+ EXAMPLES::
898
+
899
+ sage: from sage.rings.asymptotic.misc import NotImplementedBZero
900
+
901
+ sage: # needs sage.symbolic
902
+ sage: A = AsymptoticRing('n^ZZ', ZZ)
903
+ sage: raise NotImplementedBZero(A)
904
+ Traceback (most recent call last):
905
+ ...
906
+ NotImplementedBZero: got B(0)
907
+ The error term B(0) means 0 for sufficiently large n.
908
+ sage: raise NotImplementedBZero(var='m')
909
+ Traceback (most recent call last):
910
+ ...
911
+ NotImplementedBZero: got B(0)
912
+ The error term B(0) means 0 for sufficiently large m.
913
+ sage: AR.<n> = AsymptoticRing('n^QQ', QQ)
914
+ sage: AR(0).B(42)
915
+ Traceback (most recent call last):
916
+ ...
917
+ NotImplementedBZero: got B(0)
918
+ The error term B(0) means 0 for sufficiently large n.
919
+
920
+ TESTS::
921
+
922
+ sage: raise NotImplementedBZero(A, var='m') # needs sage.symbolic
923
+ Traceback (most recent call last):
924
+ ...
925
+ ValueError: specify either 'asymptotic_ring' or 'var'
926
+ sage: raise NotImplementedBZero()
927
+ Traceback (most recent call last):
928
+ ...
929
+ ValueError: specify either 'asymptotic_ring' or 'var'
930
+ """
931
+ if (asymptotic_ring is None) == (var is None):
932
+ raise ValueError("specify either 'asymptotic_ring' or 'var'")
933
+
934
+ if var is None:
935
+ var = ', '.join(str(g) for g in asymptotic_ring.gens())
936
+ message = ('got {}\n'.format(('{} + '.format(exact_part) if exact_part else '')
937
+ + 'B(0)') +
938
+ 'The error term B(0) '
939
+ 'means 0 for sufficiently large {}.'.format(var))
940
+
941
+ if asymptotic_ring is not None and isinstance(exact_part, int) and exact_part == 0:
942
+ exact_part = asymptotic_ring.zero()
943
+ self.exact_part = exact_part
944
+
945
+ super().__init__(message)
946
+
947
+
948
+ def transform_category(category,
949
+ subcategory_mapping, axiom_mapping,
950
+ initial_category=None):
951
+ r"""
952
+ Transform ``category`` to a new category according to the given
953
+ mappings.
954
+
955
+ INPUT:
956
+
957
+ - ``category`` -- a category
958
+
959
+ - ``subcategory_mapping`` -- list (or other iterable) of triples
960
+ ``(from, to, mandatory)``, where
961
+
962
+ - ``from`` and ``to`` are categories and
963
+ - ``mandatory`` is a boolean.
964
+
965
+ - ``axiom_mapping`` -- list (or other iterable) of triples
966
+ ``(from, to, mandatory)``, where
967
+
968
+ - ``from`` and ``to`` are strings describing axioms and
969
+ - ``mandatory`` is a boolean.
970
+
971
+ - ``initial_category`` -- (default: ``None``) a category. When
972
+ transforming the given category, this ``initial_category`` is
973
+ used as a starting point of the result. This means the resulting
974
+ category will be a subcategory of ``initial_category``.
975
+ If ``initial_category`` is ``None``, then the
976
+ :class:`category of objects <sage.categories.objects.Objects>`
977
+ is used.
978
+
979
+ OUTPUT: a category
980
+
981
+ .. NOTE::
982
+
983
+ Consider a subcategory mapping ``(from, to, mandatory)``. If
984
+ ``category`` is a subcategory of ``from``, then the
985
+ returned category will be a subcategory of ``to``. Otherwise and
986
+ if ``mandatory`` is set, then an error is raised.
987
+
988
+ Consider an axiom mapping ``(from, to, mandatory)``. If
989
+ ``category`` is has axiom ``from``, then the
990
+ returned category will have axiom ``to``. Otherwise and
991
+ if ``mandatory`` is set, then an error is raised.
992
+
993
+ EXAMPLES::
994
+
995
+ sage: from sage.rings.asymptotic.misc import transform_category
996
+ sage: from sage.categories.additive_semigroups import AdditiveSemigroups
997
+ sage: from sage.categories.additive_monoids import AdditiveMonoids
998
+ sage: from sage.categories.additive_groups import AdditiveGroups
999
+ sage: S = [
1000
+ ....: (Sets(), Sets(), True),
1001
+ ....: (Posets(), Posets(), False),
1002
+ ....: (AdditiveMagmas(), Magmas(), False)]
1003
+ sage: A = [
1004
+ ....: ('AdditiveAssociative', 'Associative', False),
1005
+ ....: ('AdditiveUnital', 'Unital', False),
1006
+ ....: ('AdditiveInverse', 'Inverse', False),
1007
+ ....: ('AdditiveCommutative', 'Commutative', False)]
1008
+ sage: transform_category(Objects(), S, A)
1009
+ Traceback (most recent call last):
1010
+ ...
1011
+ ValueError: Category of objects is not
1012
+ a subcategory of Category of sets.
1013
+ sage: transform_category(Sets(), S, A)
1014
+ Category of sets
1015
+ sage: transform_category(Posets(), S, A)
1016
+ Category of posets
1017
+ sage: transform_category(AdditiveSemigroups(), S, A)
1018
+ Category of semigroups
1019
+ sage: transform_category(AdditiveMonoids(), S, A)
1020
+ Category of monoids
1021
+ sage: transform_category(AdditiveGroups(), S, A)
1022
+ Category of groups
1023
+ sage: transform_category(AdditiveGroups().AdditiveCommutative(), S, A)
1024
+ Category of commutative groups
1025
+
1026
+ ::
1027
+
1028
+ sage: transform_category(AdditiveGroups().AdditiveCommutative(), S, A,
1029
+ ....: initial_category=Posets())
1030
+ Join of Category of commutative groups
1031
+ and Category of posets
1032
+
1033
+ ::
1034
+
1035
+ sage: transform_category(ZZ.category(), S, A)
1036
+ Category of commutative groups
1037
+ sage: transform_category(QQ.category(), S, A)
1038
+ Category of commutative groups
1039
+ sage: transform_category(SR.category(), S, A) # needs sage.symbolic
1040
+ Category of commutative groups
1041
+ sage: transform_category(Fields(), S, A)
1042
+ Category of commutative groups
1043
+ sage: transform_category(ZZ['t'].category(), S, A)
1044
+ Category of commutative groups
1045
+
1046
+ ::
1047
+
1048
+ sage: A[-1] = ('Commutative', 'AdditiveCommutative', True)
1049
+ sage: transform_category(Groups(), S, A)
1050
+ Traceback (most recent call last):
1051
+ ...
1052
+ ValueError: Category of groups does not have
1053
+ axiom Commutative.
1054
+ """
1055
+ if initial_category is None:
1056
+ from sage.categories.objects import Objects
1057
+ result = Objects()
1058
+ else:
1059
+ result = initial_category
1060
+
1061
+ for A, B, mandatory in subcategory_mapping:
1062
+ if category.is_subcategory(A):
1063
+ result &= B
1064
+ elif mandatory:
1065
+ raise ValueError('%s is not a subcategory of %s.' %
1066
+ (category, A))
1067
+
1068
+ axioms = category.axioms()
1069
+ for A, B, mandatory in axiom_mapping:
1070
+ if A in axioms:
1071
+ result = result._with_axiom(B)
1072
+ elif mandatory:
1073
+ raise ValueError('%s does not have axiom %s.' %
1074
+ (category, A))
1075
+
1076
+ return result
1077
+
1078
+
1079
+ class Locals(dict):
1080
+ r"""
1081
+ A frozen dictionary-like class for storing locals
1082
+ of an :class:`~sage.rings.asymptotic.asymptotic_ring.AsymptoticRing`.
1083
+
1084
+ EXAMPLES::
1085
+
1086
+ sage: from sage.rings.asymptotic.misc import Locals
1087
+ sage: locals = Locals({'a': 42})
1088
+ sage: locals['a']
1089
+ 42
1090
+
1091
+ The object contains default values (see :meth:`default_locals`)
1092
+ for some keys::
1093
+
1094
+ sage: locals['log']
1095
+ <function log at 0x...>
1096
+ """
1097
+ def __getitem__(self, key):
1098
+ r"""
1099
+ Return an item.
1100
+
1101
+ TESTS::
1102
+
1103
+ sage: from sage.rings.asymptotic.misc import Locals
1104
+ sage: locals = Locals()
1105
+ sage: locals
1106
+ {}
1107
+ sage: locals['log'] # indirect doctest
1108
+ <function log at 0x...>
1109
+ """
1110
+ try:
1111
+ return super().__getitem__(key)
1112
+ except KeyError as ke:
1113
+ try:
1114
+ return self.default_locals()[key]
1115
+ except KeyError:
1116
+ raise ke
1117
+
1118
+ def __setitem__(self, key, value):
1119
+ r"""
1120
+ Set an item.
1121
+
1122
+ This raises an error as the object is immutable.
1123
+
1124
+ TESTS::
1125
+
1126
+ sage: from sage.rings.asymptotic.misc import Locals
1127
+ sage: locals = Locals()
1128
+ sage: locals['a'] = 4 # indirect doctest
1129
+ Traceback (most recent call last):
1130
+ ...
1131
+ TypeError: locals dictionary is frozen,
1132
+ therefore does not support item assignment
1133
+ """
1134
+ raise TypeError('locals dictionary is frozen, therefore does not support item assignment')
1135
+
1136
+ @cached_method
1137
+ def _data_(self):
1138
+ r"""
1139
+ Return stored data as tuple sorted by their keys.
1140
+
1141
+ TESTS::
1142
+
1143
+ sage: from sage.rings.asymptotic.misc import Locals
1144
+ sage: locals = Locals({'a': 2, 'b': 1})
1145
+ sage: locals._data_()
1146
+ (('a', 2), ('b', 1))
1147
+ """
1148
+ return tuple(sorted(self.items(), key=lambda k_v: k_v[0]))
1149
+
1150
+ def __hash__(self):
1151
+ r"""
1152
+ Return a hash value.
1153
+
1154
+ TESTS::
1155
+
1156
+ sage: from sage.rings.asymptotic.misc import Locals
1157
+ sage: locals = Locals({'a': 2, 'b': 1})
1158
+ sage: hash(locals) # random
1159
+ -42
1160
+ """
1161
+ return hash(self._data_())
1162
+
1163
+ @cached_method
1164
+ def default_locals(self):
1165
+ r"""
1166
+ Return the default locals used in
1167
+ the :class:`~sage.rings.asymptotic.asymptotic_ring.AsymptoticRing`.
1168
+
1169
+ OUTPUT: a dictionary
1170
+
1171
+ EXAMPLES::
1172
+
1173
+ sage: from sage.rings.asymptotic.misc import Locals
1174
+ sage: locals = Locals({'a': 2, 'b': 1})
1175
+ sage: locals
1176
+ {'a': 2, 'b': 1}
1177
+ sage: locals.default_locals()
1178
+ {'log': <function log at 0x...>}
1179
+ sage: locals['log']
1180
+ <function log at 0x...>
1181
+ """
1182
+ from sage.functions.log import log
1183
+ return {
1184
+ 'log': log}
1185
+
1186
+
1187
+ class WithLocals(SageObject):
1188
+ r"""
1189
+ A class extensions for handling local values; see also
1190
+ :class:`Locals`.
1191
+
1192
+ This is used in the
1193
+ :class:`~sage.rings.asymptotic.asymptotic_ring.AsymptoticRing`.
1194
+
1195
+ EXAMPLES::
1196
+
1197
+ sage: A.<n> = AsymptoticRing('n^ZZ', QQ, locals={'a': 42}) # needs sage.symbolic
1198
+ sage: A.locals() # needs sage.symbolic
1199
+ {'a': 42}
1200
+ """
1201
+ @staticmethod
1202
+ def _convert_locals_(locals):
1203
+ r"""
1204
+ This helper method return data converted to :class:`Locals`.
1205
+
1206
+ TESTS::
1207
+
1208
+ sage: # needs sage.symbolic
1209
+ sage: A.<n> = AsymptoticRing('n^ZZ', QQ)
1210
+ sage: locals = A._convert_locals_({'a': 42}); locals
1211
+ {'a': 42}
1212
+ sage: type(locals)
1213
+ <class 'sage.rings.asymptotic.misc.Locals'>
1214
+ """
1215
+ if locals is None:
1216
+ return Locals()
1217
+ return Locals(locals)
1218
+
1219
+ def locals(self, locals=None):
1220
+ r"""
1221
+ Return the actual :class:`Locals` object to be used.
1222
+
1223
+ INPUT:
1224
+
1225
+ - ``locals`` -- an object
1226
+
1227
+ If ``locals`` is not ``None``, then a :class:`Locals` object
1228
+ is created and returned.
1229
+ If ``locals`` is ``None``, then a stored :class:`Locals` object,
1230
+ if any, is returned. Otherwise, an empty (i.e. no values except
1231
+ the default values)
1232
+ :class:`Locals` object is created and returned.
1233
+
1234
+ OUTPUT: a :class:`Locals` object
1235
+
1236
+ TESTS::
1237
+
1238
+ sage: # needs sage.symbolic
1239
+ sage: A.<n> = AsymptoticRing('n^ZZ', QQ, locals={'a': 42})
1240
+ sage: A.locals()
1241
+ {'a': 42}
1242
+ sage: A.locals({'a': 41})
1243
+ {'a': 41}
1244
+ sage: A.locals({'b': -3})
1245
+ {'b': -3}
1246
+ """
1247
+ if locals is None:
1248
+ try:
1249
+ locals = self._locals_
1250
+ except AttributeError:
1251
+ pass
1252
+ return self._convert_locals_(locals)