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

Files changed (808) hide show
  1. passagemath_modules-10.6.31rc3.dist-info/METADATA +281 -0
  2. passagemath_modules-10.6.31rc3.dist-info/RECORD +808 -0
  3. passagemath_modules-10.6.31rc3.dist-info/WHEEL +5 -0
  4. passagemath_modules-10.6.31rc3.dist-info/top_level.txt +2 -0
  5. passagemath_modules.libs/libgcc_s-0cd532bd.so.1 +0 -0
  6. passagemath_modules.libs/libgfortran-2c33b284.so.5.0.0 +0 -0
  7. passagemath_modules.libs/libgmp-0e7fc84e.so.10.5.0 +0 -0
  8. passagemath_modules.libs/libgsl-42cda06f.so.28.0.0 +0 -0
  9. passagemath_modules.libs/libmpc-d8ebe4b5.so.3.3.1 +0 -0
  10. passagemath_modules.libs/libmpfr-aaecbfc0.so.6.2.1 +0 -0
  11. passagemath_modules.libs/libopenblasp-r0-905cb27d.3.29.so +0 -0
  12. passagemath_modules.libs/libquadmath-bb76a5fc.so.0.0.0 +0 -0
  13. sage/algebras/all__sagemath_modules.py +20 -0
  14. sage/algebras/catalog.py +148 -0
  15. sage/algebras/clifford_algebra.py +3107 -0
  16. sage/algebras/clifford_algebra_element.cpython-314-x86_64-linux-musl.so +0 -0
  17. sage/algebras/clifford_algebra_element.pxd +16 -0
  18. sage/algebras/clifford_algebra_element.pyx +997 -0
  19. sage/algebras/commutative_dga.py +4252 -0
  20. sage/algebras/exterior_algebra_groebner.cpython-314-x86_64-linux-musl.so +0 -0
  21. sage/algebras/exterior_algebra_groebner.pxd +55 -0
  22. sage/algebras/exterior_algebra_groebner.pyx +727 -0
  23. sage/algebras/finite_dimensional_algebras/all.py +2 -0
  24. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra.py +1029 -0
  25. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.cpython-314-x86_64-linux-musl.so +0 -0
  26. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pxd +12 -0
  27. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pyx +706 -0
  28. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_ideal.py +196 -0
  29. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_morphism.py +255 -0
  30. sage/algebras/finite_gca.py +528 -0
  31. sage/algebras/group_algebra.py +232 -0
  32. sage/algebras/lie_algebras/abelian.py +197 -0
  33. sage/algebras/lie_algebras/affine_lie_algebra.py +1213 -0
  34. sage/algebras/lie_algebras/all.py +25 -0
  35. sage/algebras/lie_algebras/all__sagemath_modules.py +1 -0
  36. sage/algebras/lie_algebras/bch.py +177 -0
  37. sage/algebras/lie_algebras/bgg_dual_module.py +1184 -0
  38. sage/algebras/lie_algebras/bgg_resolution.py +232 -0
  39. sage/algebras/lie_algebras/center_uea.py +767 -0
  40. sage/algebras/lie_algebras/classical_lie_algebra.py +2516 -0
  41. sage/algebras/lie_algebras/examples.py +683 -0
  42. sage/algebras/lie_algebras/free_lie_algebra.py +973 -0
  43. sage/algebras/lie_algebras/heisenberg.py +820 -0
  44. sage/algebras/lie_algebras/lie_algebra.py +1562 -0
  45. sage/algebras/lie_algebras/lie_algebra_element.cpython-314-x86_64-linux-musl.so +0 -0
  46. sage/algebras/lie_algebras/lie_algebra_element.pxd +68 -0
  47. sage/algebras/lie_algebras/lie_algebra_element.pyx +2122 -0
  48. sage/algebras/lie_algebras/morphism.py +661 -0
  49. sage/algebras/lie_algebras/nilpotent_lie_algebra.py +457 -0
  50. sage/algebras/lie_algebras/onsager.py +1324 -0
  51. sage/algebras/lie_algebras/poincare_birkhoff_witt.py +816 -0
  52. sage/algebras/lie_algebras/quotient.py +462 -0
  53. sage/algebras/lie_algebras/rank_two_heisenberg_virasoro.py +355 -0
  54. sage/algebras/lie_algebras/representation.py +1040 -0
  55. sage/algebras/lie_algebras/structure_coefficients.py +459 -0
  56. sage/algebras/lie_algebras/subalgebra.py +967 -0
  57. sage/algebras/lie_algebras/symplectic_derivation.py +289 -0
  58. sage/algebras/lie_algebras/verma_module.py +1630 -0
  59. sage/algebras/lie_algebras/virasoro.py +1186 -0
  60. sage/algebras/octonion_algebra.cpython-314-x86_64-linux-musl.so +0 -0
  61. sage/algebras/octonion_algebra.pxd +20 -0
  62. sage/algebras/octonion_algebra.pyx +987 -0
  63. sage/algebras/orlik_solomon.py +907 -0
  64. sage/algebras/orlik_terao.py +779 -0
  65. sage/algebras/steenrod/all.py +7 -0
  66. sage/algebras/steenrod/steenrod_algebra.py +4258 -0
  67. sage/algebras/steenrod/steenrod_algebra_bases.py +1179 -0
  68. sage/algebras/steenrod/steenrod_algebra_misc.py +1167 -0
  69. sage/algebras/steenrod/steenrod_algebra_mult.py +954 -0
  70. sage/algebras/weyl_algebra.py +1126 -0
  71. sage/all__sagemath_modules.py +62 -0
  72. sage/calculus/all__sagemath_modules.py +19 -0
  73. sage/calculus/expr.py +205 -0
  74. sage/calculus/integration.cpython-314-x86_64-linux-musl.so +0 -0
  75. sage/calculus/integration.pyx +698 -0
  76. sage/calculus/interpolation.cpython-314-x86_64-linux-musl.so +0 -0
  77. sage/calculus/interpolation.pxd +13 -0
  78. sage/calculus/interpolation.pyx +387 -0
  79. sage/calculus/interpolators.cpython-314-x86_64-linux-musl.so +0 -0
  80. sage/calculus/interpolators.pyx +326 -0
  81. sage/calculus/ode.cpython-314-x86_64-linux-musl.so +0 -0
  82. sage/calculus/ode.pxd +5 -0
  83. sage/calculus/ode.pyx +610 -0
  84. sage/calculus/riemann.cpython-314-x86_64-linux-musl.so +0 -0
  85. sage/calculus/riemann.pyx +1521 -0
  86. sage/calculus/test_sympy.py +201 -0
  87. sage/calculus/transforms/all.py +7 -0
  88. sage/calculus/transforms/dft.py +844 -0
  89. sage/calculus/transforms/dwt.cpython-314-x86_64-linux-musl.so +0 -0
  90. sage/calculus/transforms/dwt.pxd +7 -0
  91. sage/calculus/transforms/dwt.pyx +160 -0
  92. sage/calculus/transforms/fft.cpython-314-x86_64-linux-musl.so +0 -0
  93. sage/calculus/transforms/fft.pxd +12 -0
  94. sage/calculus/transforms/fft.pyx +487 -0
  95. sage/calculus/wester.py +662 -0
  96. sage/coding/abstract_code.py +1108 -0
  97. sage/coding/ag_code.py +868 -0
  98. sage/coding/ag_code_decoders.cpython-314-x86_64-linux-musl.so +0 -0
  99. sage/coding/ag_code_decoders.pyx +2639 -0
  100. sage/coding/all.py +15 -0
  101. sage/coding/bch_code.py +494 -0
  102. sage/coding/binary_code.cpython-314-x86_64-linux-musl.so +0 -0
  103. sage/coding/binary_code.pxd +124 -0
  104. sage/coding/binary_code.pyx +4139 -0
  105. sage/coding/bounds_catalog.py +43 -0
  106. sage/coding/channel.py +819 -0
  107. sage/coding/channels_catalog.py +29 -0
  108. sage/coding/code_bounds.py +755 -0
  109. sage/coding/code_constructions.py +804 -0
  110. sage/coding/codes_catalog.py +111 -0
  111. sage/coding/cyclic_code.py +1329 -0
  112. sage/coding/databases.py +316 -0
  113. sage/coding/decoder.py +373 -0
  114. sage/coding/decoders_catalog.py +88 -0
  115. sage/coding/delsarte_bounds.py +709 -0
  116. sage/coding/encoder.py +390 -0
  117. sage/coding/encoders_catalog.py +64 -0
  118. sage/coding/extended_code.py +468 -0
  119. sage/coding/gabidulin_code.py +1058 -0
  120. sage/coding/golay_code.py +404 -0
  121. sage/coding/goppa_code.py +441 -0
  122. sage/coding/grs_code.py +2371 -0
  123. sage/coding/guava.py +107 -0
  124. sage/coding/guruswami_sudan/all.py +1 -0
  125. sage/coding/guruswami_sudan/gs_decoder.py +897 -0
  126. sage/coding/guruswami_sudan/interpolation.py +409 -0
  127. sage/coding/guruswami_sudan/utils.py +176 -0
  128. sage/coding/hamming_code.py +176 -0
  129. sage/coding/information_set_decoder.py +1032 -0
  130. sage/coding/kasami_codes.cpython-314-x86_64-linux-musl.so +0 -0
  131. sage/coding/kasami_codes.pyx +351 -0
  132. sage/coding/linear_code.py +3067 -0
  133. sage/coding/linear_code_no_metric.py +1354 -0
  134. sage/coding/linear_rank_metric.py +961 -0
  135. sage/coding/parity_check_code.py +353 -0
  136. sage/coding/punctured_code.py +719 -0
  137. sage/coding/reed_muller_code.py +999 -0
  138. sage/coding/self_dual_codes.py +942 -0
  139. sage/coding/source_coding/all.py +2 -0
  140. sage/coding/source_coding/huffman.py +553 -0
  141. sage/coding/subfield_subcode.py +423 -0
  142. sage/coding/two_weight_db.py +399 -0
  143. sage/combinat/all__sagemath_modules.py +7 -0
  144. sage/combinat/cartesian_product.py +347 -0
  145. sage/combinat/family.py +11 -0
  146. sage/combinat/free_module.py +1977 -0
  147. sage/combinat/root_system/all.py +147 -0
  148. sage/combinat/root_system/ambient_space.py +527 -0
  149. sage/combinat/root_system/associahedron.py +471 -0
  150. sage/combinat/root_system/braid_move_calculator.py +143 -0
  151. sage/combinat/root_system/braid_orbit.cpython-314-x86_64-linux-musl.so +0 -0
  152. sage/combinat/root_system/braid_orbit.pyx +144 -0
  153. sage/combinat/root_system/branching_rules.py +2301 -0
  154. sage/combinat/root_system/cartan_matrix.py +1245 -0
  155. sage/combinat/root_system/cartan_type.py +3069 -0
  156. sage/combinat/root_system/coxeter_group.py +162 -0
  157. sage/combinat/root_system/coxeter_matrix.py +1261 -0
  158. sage/combinat/root_system/coxeter_type.py +681 -0
  159. sage/combinat/root_system/dynkin_diagram.py +900 -0
  160. sage/combinat/root_system/extended_affine_weyl_group.py +2993 -0
  161. sage/combinat/root_system/fundamental_group.py +795 -0
  162. sage/combinat/root_system/hecke_algebra_representation.py +1203 -0
  163. sage/combinat/root_system/integrable_representations.py +1227 -0
  164. sage/combinat/root_system/non_symmetric_macdonald_polynomials.py +1965 -0
  165. sage/combinat/root_system/pieri_factors.py +1147 -0
  166. sage/combinat/root_system/plot.py +1615 -0
  167. sage/combinat/root_system/root_lattice_realization_algebras.py +1214 -0
  168. sage/combinat/root_system/root_lattice_realizations.py +4628 -0
  169. sage/combinat/root_system/root_space.py +487 -0
  170. sage/combinat/root_system/root_system.py +882 -0
  171. sage/combinat/root_system/type_A.py +348 -0
  172. sage/combinat/root_system/type_A_affine.py +227 -0
  173. sage/combinat/root_system/type_A_infinity.py +241 -0
  174. sage/combinat/root_system/type_B.py +347 -0
  175. sage/combinat/root_system/type_BC_affine.py +287 -0
  176. sage/combinat/root_system/type_B_affine.py +216 -0
  177. sage/combinat/root_system/type_C.py +317 -0
  178. sage/combinat/root_system/type_C_affine.py +188 -0
  179. sage/combinat/root_system/type_D.py +357 -0
  180. sage/combinat/root_system/type_D_affine.py +208 -0
  181. sage/combinat/root_system/type_E.py +641 -0
  182. sage/combinat/root_system/type_E_affine.py +231 -0
  183. sage/combinat/root_system/type_F.py +387 -0
  184. sage/combinat/root_system/type_F_affine.py +137 -0
  185. sage/combinat/root_system/type_G.py +293 -0
  186. sage/combinat/root_system/type_G_affine.py +132 -0
  187. sage/combinat/root_system/type_H.py +105 -0
  188. sage/combinat/root_system/type_I.py +110 -0
  189. sage/combinat/root_system/type_Q.py +150 -0
  190. sage/combinat/root_system/type_affine.py +509 -0
  191. sage/combinat/root_system/type_dual.py +704 -0
  192. sage/combinat/root_system/type_folded.py +301 -0
  193. sage/combinat/root_system/type_marked.py +748 -0
  194. sage/combinat/root_system/type_reducible.py +601 -0
  195. sage/combinat/root_system/type_relabel.py +730 -0
  196. sage/combinat/root_system/type_super_A.py +837 -0
  197. sage/combinat/root_system/weight_lattice_realizations.py +1188 -0
  198. sage/combinat/root_system/weight_space.py +639 -0
  199. sage/combinat/root_system/weyl_characters.py +2238 -0
  200. sage/crypto/__init__.py +4 -0
  201. sage/crypto/all.py +28 -0
  202. sage/crypto/block_cipher/all.py +7 -0
  203. sage/crypto/block_cipher/des.py +1065 -0
  204. sage/crypto/block_cipher/miniaes.py +2171 -0
  205. sage/crypto/block_cipher/present.py +909 -0
  206. sage/crypto/block_cipher/sdes.py +1527 -0
  207. sage/crypto/boolean_function.cpython-314-x86_64-linux-musl.so +0 -0
  208. sage/crypto/boolean_function.pxd +10 -0
  209. sage/crypto/boolean_function.pyx +1487 -0
  210. sage/crypto/cipher.py +78 -0
  211. sage/crypto/classical.py +3668 -0
  212. sage/crypto/classical_cipher.py +569 -0
  213. sage/crypto/cryptosystem.py +387 -0
  214. sage/crypto/key_exchange/all.py +7 -0
  215. sage/crypto/key_exchange/catalog.py +24 -0
  216. sage/crypto/key_exchange/diffie_hellman.py +323 -0
  217. sage/crypto/key_exchange/key_exchange_scheme.py +107 -0
  218. sage/crypto/lattice.py +312 -0
  219. sage/crypto/lfsr.py +295 -0
  220. sage/crypto/lwe.py +840 -0
  221. sage/crypto/mq/__init__.py +4 -0
  222. sage/crypto/mq/mpolynomialsystemgenerator.py +204 -0
  223. sage/crypto/mq/rijndael_gf.py +2345 -0
  224. sage/crypto/mq/sbox.py +7 -0
  225. sage/crypto/mq/sr.py +3344 -0
  226. sage/crypto/public_key/all.py +5 -0
  227. sage/crypto/public_key/blum_goldwasser.py +776 -0
  228. sage/crypto/sbox.cpython-314-x86_64-linux-musl.so +0 -0
  229. sage/crypto/sbox.pyx +2090 -0
  230. sage/crypto/sboxes.py +2090 -0
  231. sage/crypto/stream.py +390 -0
  232. sage/crypto/stream_cipher.py +297 -0
  233. sage/crypto/util.py +519 -0
  234. sage/ext/all__sagemath_modules.py +1 -0
  235. sage/ext/interpreters/__init__.py +1 -0
  236. sage/ext/interpreters/all__sagemath_modules.py +2 -0
  237. sage/ext/interpreters/wrapper_cc.cpython-314-x86_64-linux-musl.so +0 -0
  238. sage/ext/interpreters/wrapper_cc.pxd +30 -0
  239. sage/ext/interpreters/wrapper_cc.pyx +252 -0
  240. sage/ext/interpreters/wrapper_cdf.cpython-314-x86_64-linux-musl.so +0 -0
  241. sage/ext/interpreters/wrapper_cdf.pxd +26 -0
  242. sage/ext/interpreters/wrapper_cdf.pyx +245 -0
  243. sage/ext/interpreters/wrapper_rdf.cpython-314-x86_64-linux-musl.so +0 -0
  244. sage/ext/interpreters/wrapper_rdf.pxd +23 -0
  245. sage/ext/interpreters/wrapper_rdf.pyx +221 -0
  246. sage/ext/interpreters/wrapper_rr.cpython-314-x86_64-linux-musl.so +0 -0
  247. sage/ext/interpreters/wrapper_rr.pxd +28 -0
  248. sage/ext/interpreters/wrapper_rr.pyx +335 -0
  249. sage/geometry/all__sagemath_modules.py +5 -0
  250. sage/geometry/toric_lattice.py +1745 -0
  251. sage/geometry/toric_lattice_element.cpython-314-x86_64-linux-musl.so +0 -0
  252. sage/geometry/toric_lattice_element.pyx +432 -0
  253. sage/groups/abelian_gps/abelian_group.py +1925 -0
  254. sage/groups/abelian_gps/abelian_group_element.py +164 -0
  255. sage/groups/abelian_gps/all__sagemath_modules.py +5 -0
  256. sage/groups/abelian_gps/dual_abelian_group.py +421 -0
  257. sage/groups/abelian_gps/dual_abelian_group_element.py +179 -0
  258. sage/groups/abelian_gps/element_base.py +341 -0
  259. sage/groups/abelian_gps/values.py +488 -0
  260. sage/groups/additive_abelian/additive_abelian_group.py +476 -0
  261. sage/groups/additive_abelian/additive_abelian_wrapper.py +857 -0
  262. sage/groups/additive_abelian/all.py +4 -0
  263. sage/groups/additive_abelian/qmodnz.py +231 -0
  264. sage/groups/additive_abelian/qmodnz_element.py +349 -0
  265. sage/groups/affine_gps/affine_group.py +535 -0
  266. sage/groups/affine_gps/all.py +1 -0
  267. sage/groups/affine_gps/catalog.py +17 -0
  268. sage/groups/affine_gps/euclidean_group.py +246 -0
  269. sage/groups/affine_gps/group_element.py +562 -0
  270. sage/groups/all__sagemath_modules.py +12 -0
  271. sage/groups/galois_group.py +479 -0
  272. sage/groups/matrix_gps/all.py +4 -0
  273. sage/groups/matrix_gps/all__sagemath_modules.py +13 -0
  274. sage/groups/matrix_gps/catalog.py +26 -0
  275. sage/groups/matrix_gps/coxeter_group.py +927 -0
  276. sage/groups/matrix_gps/finitely_generated.py +487 -0
  277. sage/groups/matrix_gps/group_element.cpython-314-x86_64-linux-musl.so +0 -0
  278. sage/groups/matrix_gps/group_element.pxd +11 -0
  279. sage/groups/matrix_gps/group_element.pyx +431 -0
  280. sage/groups/matrix_gps/linear.py +440 -0
  281. sage/groups/matrix_gps/matrix_group.py +617 -0
  282. sage/groups/matrix_gps/named_group.py +296 -0
  283. sage/groups/matrix_gps/orthogonal.py +544 -0
  284. sage/groups/matrix_gps/symplectic.py +251 -0
  285. sage/groups/matrix_gps/unitary.py +436 -0
  286. sage/groups/misc_gps/all__sagemath_modules.py +1 -0
  287. sage/groups/misc_gps/argument_groups.py +1905 -0
  288. sage/groups/misc_gps/imaginary_groups.py +479 -0
  289. sage/groups/perm_gps/all__sagemath_modules.py +1 -0
  290. sage/groups/perm_gps/partn_ref/all__sagemath_modules.py +1 -0
  291. sage/groups/perm_gps/partn_ref/refinement_binary.cpython-314-x86_64-linux-musl.so +0 -0
  292. sage/groups/perm_gps/partn_ref/refinement_binary.pxd +41 -0
  293. sage/groups/perm_gps/partn_ref/refinement_binary.pyx +1167 -0
  294. sage/groups/perm_gps/partn_ref/refinement_matrices.cpython-314-x86_64-linux-musl.so +0 -0
  295. sage/groups/perm_gps/partn_ref/refinement_matrices.pxd +31 -0
  296. sage/groups/perm_gps/partn_ref/refinement_matrices.pyx +385 -0
  297. sage/homology/algebraic_topological_model.py +595 -0
  298. sage/homology/all.py +2 -0
  299. sage/homology/all__sagemath_modules.py +8 -0
  300. sage/homology/chain_complex.py +2148 -0
  301. sage/homology/chain_complex_homspace.py +165 -0
  302. sage/homology/chain_complex_morphism.py +629 -0
  303. sage/homology/chain_homotopy.py +604 -0
  304. sage/homology/chains.py +653 -0
  305. sage/homology/free_resolution.py +923 -0
  306. sage/homology/graded_resolution.py +567 -0
  307. sage/homology/hochschild_complex.py +756 -0
  308. sage/homology/homology_group.py +188 -0
  309. sage/homology/homology_morphism.py +422 -0
  310. sage/homology/homology_vector_space_with_basis.py +1454 -0
  311. sage/homology/koszul_complex.py +169 -0
  312. sage/homology/matrix_utils.py +205 -0
  313. sage/libs/all__sagemath_modules.py +1 -0
  314. sage/libs/gsl/__init__.py +1 -0
  315. sage/libs/gsl/airy.pxd +56 -0
  316. sage/libs/gsl/all.pxd +66 -0
  317. sage/libs/gsl/array.cpython-314-x86_64-linux-musl.so +0 -0
  318. sage/libs/gsl/array.pxd +5 -0
  319. sage/libs/gsl/array.pyx +102 -0
  320. sage/libs/gsl/bessel.pxd +208 -0
  321. sage/libs/gsl/blas.pxd +116 -0
  322. sage/libs/gsl/blas_types.pxd +34 -0
  323. sage/libs/gsl/block.pxd +52 -0
  324. sage/libs/gsl/chebyshev.pxd +37 -0
  325. sage/libs/gsl/clausen.pxd +12 -0
  326. sage/libs/gsl/combination.pxd +47 -0
  327. sage/libs/gsl/complex.pxd +151 -0
  328. sage/libs/gsl/coulomb.pxd +30 -0
  329. sage/libs/gsl/coupling.pxd +21 -0
  330. sage/libs/gsl/dawson.pxd +12 -0
  331. sage/libs/gsl/debye.pxd +24 -0
  332. sage/libs/gsl/dilog.pxd +14 -0
  333. sage/libs/gsl/eigen.pxd +46 -0
  334. sage/libs/gsl/elementary.pxd +12 -0
  335. sage/libs/gsl/ellint.pxd +48 -0
  336. sage/libs/gsl/elljac.pxd +8 -0
  337. sage/libs/gsl/erf.pxd +32 -0
  338. sage/libs/gsl/errno.pxd +26 -0
  339. sage/libs/gsl/exp.pxd +44 -0
  340. sage/libs/gsl/expint.pxd +44 -0
  341. sage/libs/gsl/fermi_dirac.pxd +44 -0
  342. sage/libs/gsl/fft.pxd +121 -0
  343. sage/libs/gsl/fit.pxd +50 -0
  344. sage/libs/gsl/gamma.pxd +94 -0
  345. sage/libs/gsl/gegenbauer.pxd +26 -0
  346. sage/libs/gsl/histogram.pxd +176 -0
  347. sage/libs/gsl/hyperg.pxd +52 -0
  348. sage/libs/gsl/integration.pxd +69 -0
  349. sage/libs/gsl/interp.pxd +109 -0
  350. sage/libs/gsl/laguerre.pxd +24 -0
  351. sage/libs/gsl/lambert.pxd +16 -0
  352. sage/libs/gsl/legendre.pxd +90 -0
  353. sage/libs/gsl/linalg.pxd +185 -0
  354. sage/libs/gsl/log.pxd +26 -0
  355. sage/libs/gsl/math.pxd +43 -0
  356. sage/libs/gsl/matrix.pxd +143 -0
  357. sage/libs/gsl/matrix_complex.pxd +130 -0
  358. sage/libs/gsl/min.pxd +67 -0
  359. sage/libs/gsl/monte.pxd +56 -0
  360. sage/libs/gsl/ntuple.pxd +32 -0
  361. sage/libs/gsl/odeiv.pxd +70 -0
  362. sage/libs/gsl/permutation.pxd +78 -0
  363. sage/libs/gsl/poly.pxd +40 -0
  364. sage/libs/gsl/pow_int.pxd +12 -0
  365. sage/libs/gsl/psi.pxd +28 -0
  366. sage/libs/gsl/qrng.pxd +29 -0
  367. sage/libs/gsl/random.pxd +257 -0
  368. sage/libs/gsl/rng.pxd +100 -0
  369. sage/libs/gsl/roots.pxd +72 -0
  370. sage/libs/gsl/sort.pxd +36 -0
  371. sage/libs/gsl/statistics.pxd +59 -0
  372. sage/libs/gsl/sum.pxd +55 -0
  373. sage/libs/gsl/synchrotron.pxd +16 -0
  374. sage/libs/gsl/transport.pxd +24 -0
  375. sage/libs/gsl/trig.pxd +58 -0
  376. sage/libs/gsl/types.pxd +137 -0
  377. sage/libs/gsl/vector.pxd +101 -0
  378. sage/libs/gsl/vector_complex.pxd +83 -0
  379. sage/libs/gsl/wavelet.pxd +49 -0
  380. sage/libs/gsl/zeta.pxd +28 -0
  381. sage/libs/mpc/__init__.pxd +114 -0
  382. sage/libs/mpc/types.pxd +28 -0
  383. sage/libs/mpfr/__init__.pxd +299 -0
  384. sage/libs/mpfr/types.pxd +26 -0
  385. sage/libs/mpmath/__init__.py +1 -0
  386. sage/libs/mpmath/all.py +27 -0
  387. sage/libs/mpmath/all__sagemath_modules.py +1 -0
  388. sage/libs/mpmath/utils.cpython-314-x86_64-linux-musl.so +0 -0
  389. sage/libs/mpmath/utils.pxd +4 -0
  390. sage/libs/mpmath/utils.pyx +319 -0
  391. sage/matrix/action.cpython-314-x86_64-linux-musl.so +0 -0
  392. sage/matrix/action.pxd +26 -0
  393. sage/matrix/action.pyx +596 -0
  394. sage/matrix/all.py +9 -0
  395. sage/matrix/args.cpython-314-x86_64-linux-musl.so +0 -0
  396. sage/matrix/args.pxd +144 -0
  397. sage/matrix/args.pyx +1668 -0
  398. sage/matrix/benchmark.py +1258 -0
  399. sage/matrix/berlekamp_massey.py +95 -0
  400. sage/matrix/compute_J_ideal.py +926 -0
  401. sage/matrix/constructor.cpython-314-x86_64-linux-musl.so +0 -0
  402. sage/matrix/constructor.pyx +750 -0
  403. sage/matrix/docs.py +430 -0
  404. sage/matrix/echelon_matrix.cpython-314-x86_64-linux-musl.so +0 -0
  405. sage/matrix/echelon_matrix.pyx +155 -0
  406. sage/matrix/matrix.pxd +2 -0
  407. sage/matrix/matrix0.cpython-314-x86_64-linux-musl.so +0 -0
  408. sage/matrix/matrix0.pxd +68 -0
  409. sage/matrix/matrix0.pyx +6324 -0
  410. sage/matrix/matrix1.cpython-314-x86_64-linux-musl.so +0 -0
  411. sage/matrix/matrix1.pxd +8 -0
  412. sage/matrix/matrix1.pyx +2851 -0
  413. sage/matrix/matrix2.cpython-314-x86_64-linux-musl.so +0 -0
  414. sage/matrix/matrix2.pxd +25 -0
  415. sage/matrix/matrix2.pyx +20181 -0
  416. sage/matrix/matrix_cdv.cpython-314-x86_64-linux-musl.so +0 -0
  417. sage/matrix/matrix_cdv.pxd +4 -0
  418. sage/matrix/matrix_cdv.pyx +93 -0
  419. sage/matrix/matrix_complex_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  420. sage/matrix/matrix_complex_double_dense.pxd +5 -0
  421. sage/matrix/matrix_complex_double_dense.pyx +98 -0
  422. sage/matrix/matrix_dense.cpython-314-x86_64-linux-musl.so +0 -0
  423. sage/matrix/matrix_dense.pxd +5 -0
  424. sage/matrix/matrix_dense.pyx +343 -0
  425. sage/matrix/matrix_domain_dense.pxd +5 -0
  426. sage/matrix/matrix_domain_sparse.pxd +5 -0
  427. sage/matrix/matrix_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  428. sage/matrix/matrix_double_dense.pxd +7 -0
  429. sage/matrix/matrix_double_dense.pyx +3906 -0
  430. sage/matrix/matrix_double_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  431. sage/matrix/matrix_double_sparse.pxd +6 -0
  432. sage/matrix/matrix_double_sparse.pyx +248 -0
  433. sage/matrix/matrix_generic_dense.cpython-314-x86_64-linux-musl.so +0 -0
  434. sage/matrix/matrix_generic_dense.pxd +7 -0
  435. sage/matrix/matrix_generic_dense.pyx +354 -0
  436. sage/matrix/matrix_generic_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  437. sage/matrix/matrix_generic_sparse.pxd +7 -0
  438. sage/matrix/matrix_generic_sparse.pyx +461 -0
  439. sage/matrix/matrix_laurent_mpolynomial_dense.cpython-314-x86_64-linux-musl.so +0 -0
  440. sage/matrix/matrix_laurent_mpolynomial_dense.pxd +5 -0
  441. sage/matrix/matrix_laurent_mpolynomial_dense.pyx +115 -0
  442. sage/matrix/matrix_misc.py +313 -0
  443. sage/matrix/matrix_numpy_dense.cpython-314-x86_64-linux-musl.so +0 -0
  444. sage/matrix/matrix_numpy_dense.pxd +14 -0
  445. sage/matrix/matrix_numpy_dense.pyx +450 -0
  446. sage/matrix/matrix_numpy_integer_dense.cpython-314-x86_64-linux-musl.so +0 -0
  447. sage/matrix/matrix_numpy_integer_dense.pxd +7 -0
  448. sage/matrix/matrix_numpy_integer_dense.pyx +59 -0
  449. sage/matrix/matrix_polynomial_dense.cpython-314-x86_64-linux-musl.so +0 -0
  450. sage/matrix/matrix_polynomial_dense.pxd +5 -0
  451. sage/matrix/matrix_polynomial_dense.pyx +5341 -0
  452. sage/matrix/matrix_real_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  453. sage/matrix/matrix_real_double_dense.pxd +7 -0
  454. sage/matrix/matrix_real_double_dense.pyx +122 -0
  455. sage/matrix/matrix_space.py +2848 -0
  456. sage/matrix/matrix_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  457. sage/matrix/matrix_sparse.pxd +5 -0
  458. sage/matrix/matrix_sparse.pyx +1222 -0
  459. sage/matrix/matrix_window.cpython-314-x86_64-linux-musl.so +0 -0
  460. sage/matrix/matrix_window.pxd +37 -0
  461. sage/matrix/matrix_window.pyx +242 -0
  462. sage/matrix/misc_mpfr.cpython-314-x86_64-linux-musl.so +0 -0
  463. sage/matrix/misc_mpfr.pyx +80 -0
  464. sage/matrix/operation_table.py +1182 -0
  465. sage/matrix/special.py +3666 -0
  466. sage/matrix/strassen.cpython-314-x86_64-linux-musl.so +0 -0
  467. sage/matrix/strassen.pyx +851 -0
  468. sage/matrix/symplectic_basis.py +541 -0
  469. sage/matrix/template.pxd +6 -0
  470. sage/matrix/tests.py +71 -0
  471. sage/matroids/advanced.py +77 -0
  472. sage/matroids/all.py +13 -0
  473. sage/matroids/basis_exchange_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  474. sage/matroids/basis_exchange_matroid.pxd +96 -0
  475. sage/matroids/basis_exchange_matroid.pyx +2344 -0
  476. sage/matroids/basis_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  477. sage/matroids/basis_matroid.pxd +45 -0
  478. sage/matroids/basis_matroid.pyx +1217 -0
  479. sage/matroids/catalog.py +44 -0
  480. sage/matroids/chow_ring.py +473 -0
  481. sage/matroids/chow_ring_ideal.py +849 -0
  482. sage/matroids/circuit_closures_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  483. sage/matroids/circuit_closures_matroid.pxd +16 -0
  484. sage/matroids/circuit_closures_matroid.pyx +559 -0
  485. sage/matroids/circuits_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  486. sage/matroids/circuits_matroid.pxd +38 -0
  487. sage/matroids/circuits_matroid.pyx +947 -0
  488. sage/matroids/constructor.py +1086 -0
  489. sage/matroids/database_collections.py +365 -0
  490. sage/matroids/database_matroids.py +5338 -0
  491. sage/matroids/dual_matroid.py +583 -0
  492. sage/matroids/extension.cpython-314-x86_64-linux-musl.so +0 -0
  493. sage/matroids/extension.pxd +34 -0
  494. sage/matroids/extension.pyx +519 -0
  495. sage/matroids/flats_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  496. sage/matroids/flats_matroid.pxd +28 -0
  497. sage/matroids/flats_matroid.pyx +715 -0
  498. sage/matroids/gammoid.py +600 -0
  499. sage/matroids/graphic_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  500. sage/matroids/graphic_matroid.pxd +39 -0
  501. sage/matroids/graphic_matroid.pyx +2024 -0
  502. sage/matroids/lean_matrix.cpython-314-x86_64-linux-musl.so +0 -0
  503. sage/matroids/lean_matrix.pxd +126 -0
  504. sage/matroids/lean_matrix.pyx +3667 -0
  505. sage/matroids/linear_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  506. sage/matroids/linear_matroid.pxd +180 -0
  507. sage/matroids/linear_matroid.pyx +6649 -0
  508. sage/matroids/matroid.cpython-314-x86_64-linux-musl.so +0 -0
  509. sage/matroids/matroid.pxd +243 -0
  510. sage/matroids/matroid.pyx +8759 -0
  511. sage/matroids/matroids_catalog.py +190 -0
  512. sage/matroids/matroids_plot_helpers.py +890 -0
  513. sage/matroids/minor_matroid.py +480 -0
  514. sage/matroids/minorfix.h +9 -0
  515. sage/matroids/named_matroids.py +5 -0
  516. sage/matroids/rank_matroid.py +268 -0
  517. sage/matroids/set_system.cpython-314-x86_64-linux-musl.so +0 -0
  518. sage/matroids/set_system.pxd +38 -0
  519. sage/matroids/set_system.pyx +800 -0
  520. sage/matroids/transversal_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  521. sage/matroids/transversal_matroid.pxd +14 -0
  522. sage/matroids/transversal_matroid.pyx +893 -0
  523. sage/matroids/union_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  524. sage/matroids/union_matroid.pxd +20 -0
  525. sage/matroids/union_matroid.pyx +331 -0
  526. sage/matroids/unpickling.cpython-314-x86_64-linux-musl.so +0 -0
  527. sage/matroids/unpickling.pyx +843 -0
  528. sage/matroids/utilities.py +809 -0
  529. sage/misc/all__sagemath_modules.py +20 -0
  530. sage/misc/c3.cpython-314-x86_64-linux-musl.so +0 -0
  531. sage/misc/c3.pyx +238 -0
  532. sage/misc/compat.py +87 -0
  533. sage/misc/element_with_label.py +173 -0
  534. sage/misc/func_persist.py +79 -0
  535. sage/misc/pickle_old.cpython-314-x86_64-linux-musl.so +0 -0
  536. sage/misc/pickle_old.pyx +19 -0
  537. sage/misc/proof.py +7 -0
  538. sage/misc/replace_dot_all.py +472 -0
  539. sage/misc/sagedoc_conf.py +168 -0
  540. sage/misc/sphinxify.py +167 -0
  541. sage/misc/test_class_pickling.py +85 -0
  542. sage/modules/all.py +42 -0
  543. sage/modules/complex_double_vector.py +25 -0
  544. sage/modules/diamond_cutting.py +380 -0
  545. sage/modules/fg_pid/all.py +1 -0
  546. sage/modules/fg_pid/fgp_element.py +456 -0
  547. sage/modules/fg_pid/fgp_module.py +2091 -0
  548. sage/modules/fg_pid/fgp_morphism.py +550 -0
  549. sage/modules/filtered_vector_space.py +1271 -0
  550. sage/modules/finite_submodule_iter.cpython-314-x86_64-linux-musl.so +0 -0
  551. sage/modules/finite_submodule_iter.pxd +27 -0
  552. sage/modules/finite_submodule_iter.pyx +452 -0
  553. sage/modules/fp_graded/all.py +1 -0
  554. sage/modules/fp_graded/element.py +346 -0
  555. sage/modules/fp_graded/free_element.py +298 -0
  556. sage/modules/fp_graded/free_homspace.py +53 -0
  557. sage/modules/fp_graded/free_module.py +1060 -0
  558. sage/modules/fp_graded/free_morphism.py +217 -0
  559. sage/modules/fp_graded/homspace.py +563 -0
  560. sage/modules/fp_graded/module.py +1340 -0
  561. sage/modules/fp_graded/morphism.py +1990 -0
  562. sage/modules/fp_graded/steenrod/all.py +1 -0
  563. sage/modules/fp_graded/steenrod/homspace.py +65 -0
  564. sage/modules/fp_graded/steenrod/module.py +477 -0
  565. sage/modules/fp_graded/steenrod/morphism.py +404 -0
  566. sage/modules/fp_graded/steenrod/profile.py +241 -0
  567. sage/modules/free_module.py +8447 -0
  568. sage/modules/free_module_element.cpython-314-x86_64-linux-musl.so +0 -0
  569. sage/modules/free_module_element.pxd +22 -0
  570. sage/modules/free_module_element.pyx +5445 -0
  571. sage/modules/free_module_homspace.py +369 -0
  572. sage/modules/free_module_integer.py +896 -0
  573. sage/modules/free_module_morphism.py +823 -0
  574. sage/modules/free_module_pseudohomspace.py +352 -0
  575. sage/modules/free_module_pseudomorphism.py +578 -0
  576. sage/modules/free_quadratic_module.py +1706 -0
  577. sage/modules/free_quadratic_module_integer_symmetric.py +1790 -0
  578. sage/modules/matrix_morphism.py +1745 -0
  579. sage/modules/misc.py +103 -0
  580. sage/modules/module_functors.py +192 -0
  581. sage/modules/multi_filtered_vector_space.py +719 -0
  582. sage/modules/ore_module.py +2208 -0
  583. sage/modules/ore_module_element.py +178 -0
  584. sage/modules/ore_module_homspace.py +147 -0
  585. sage/modules/ore_module_morphism.py +968 -0
  586. sage/modules/quotient_module.py +699 -0
  587. sage/modules/real_double_vector.py +22 -0
  588. sage/modules/submodule.py +255 -0
  589. sage/modules/tensor_operations.py +567 -0
  590. sage/modules/torsion_quadratic_module.py +1352 -0
  591. sage/modules/tutorial_free_modules.py +248 -0
  592. sage/modules/vector_complex_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  593. sage/modules/vector_complex_double_dense.pxd +6 -0
  594. sage/modules/vector_complex_double_dense.pyx +117 -0
  595. sage/modules/vector_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  596. sage/modules/vector_double_dense.pxd +6 -0
  597. sage/modules/vector_double_dense.pyx +604 -0
  598. sage/modules/vector_integer_dense.cpython-314-x86_64-linux-musl.so +0 -0
  599. sage/modules/vector_integer_dense.pxd +15 -0
  600. sage/modules/vector_integer_dense.pyx +361 -0
  601. sage/modules/vector_integer_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  602. sage/modules/vector_integer_sparse.pxd +29 -0
  603. sage/modules/vector_integer_sparse.pyx +406 -0
  604. sage/modules/vector_modn_dense.cpython-314-x86_64-linux-musl.so +0 -0
  605. sage/modules/vector_modn_dense.pxd +12 -0
  606. sage/modules/vector_modn_dense.pyx +394 -0
  607. sage/modules/vector_modn_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  608. sage/modules/vector_modn_sparse.pxd +21 -0
  609. sage/modules/vector_modn_sparse.pyx +298 -0
  610. sage/modules/vector_numpy_dense.cpython-314-x86_64-linux-musl.so +0 -0
  611. sage/modules/vector_numpy_dense.pxd +15 -0
  612. sage/modules/vector_numpy_dense.pyx +304 -0
  613. sage/modules/vector_numpy_integer_dense.cpython-314-x86_64-linux-musl.so +0 -0
  614. sage/modules/vector_numpy_integer_dense.pxd +7 -0
  615. sage/modules/vector_numpy_integer_dense.pyx +54 -0
  616. sage/modules/vector_rational_dense.cpython-314-x86_64-linux-musl.so +0 -0
  617. sage/modules/vector_rational_dense.pxd +15 -0
  618. sage/modules/vector_rational_dense.pyx +387 -0
  619. sage/modules/vector_rational_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  620. sage/modules/vector_rational_sparse.pxd +30 -0
  621. sage/modules/vector_rational_sparse.pyx +413 -0
  622. sage/modules/vector_real_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  623. sage/modules/vector_real_double_dense.pxd +6 -0
  624. sage/modules/vector_real_double_dense.pyx +126 -0
  625. sage/modules/vector_space_homspace.py +430 -0
  626. sage/modules/vector_space_morphism.py +989 -0
  627. sage/modules/with_basis/all.py +15 -0
  628. sage/modules/with_basis/cell_module.py +494 -0
  629. sage/modules/with_basis/indexed_element.cpython-314-x86_64-linux-musl.so +0 -0
  630. sage/modules/with_basis/indexed_element.pxd +13 -0
  631. sage/modules/with_basis/indexed_element.pyx +1058 -0
  632. sage/modules/with_basis/invariant.py +1075 -0
  633. sage/modules/with_basis/morphism.py +1636 -0
  634. sage/modules/with_basis/representation.py +2939 -0
  635. sage/modules/with_basis/subquotient.py +685 -0
  636. sage/numerical/all__sagemath_modules.py +6 -0
  637. sage/numerical/gauss_legendre.cpython-314-x86_64-linux-musl.so +0 -0
  638. sage/numerical/gauss_legendre.pyx +381 -0
  639. sage/numerical/optimize.py +910 -0
  640. sage/probability/all.py +10 -0
  641. sage/probability/probability_distribution.cpython-314-x86_64-linux-musl.so +0 -0
  642. sage/probability/probability_distribution.pyx +1242 -0
  643. sage/probability/random_variable.py +411 -0
  644. sage/quadratic_forms/all.py +4 -0
  645. sage/quadratic_forms/all__sagemath_modules.py +15 -0
  646. sage/quadratic_forms/binary_qf.py +2042 -0
  647. sage/quadratic_forms/bqf_class_group.py +748 -0
  648. sage/quadratic_forms/constructions.py +93 -0
  649. sage/quadratic_forms/count_local_2.cpython-314-x86_64-linux-musl.so +0 -0
  650. sage/quadratic_forms/count_local_2.pyx +365 -0
  651. sage/quadratic_forms/extras.py +195 -0
  652. sage/quadratic_forms/quadratic_form.py +1753 -0
  653. sage/quadratic_forms/quadratic_form__count_local_2.py +221 -0
  654. sage/quadratic_forms/quadratic_form__equivalence_testing.py +708 -0
  655. sage/quadratic_forms/quadratic_form__evaluate.cpython-314-x86_64-linux-musl.so +0 -0
  656. sage/quadratic_forms/quadratic_form__evaluate.pyx +139 -0
  657. sage/quadratic_forms/quadratic_form__local_density_congruence.py +977 -0
  658. sage/quadratic_forms/quadratic_form__local_field_invariants.py +1072 -0
  659. sage/quadratic_forms/quadratic_form__neighbors.py +424 -0
  660. sage/quadratic_forms/quadratic_form__reduction_theory.py +488 -0
  661. sage/quadratic_forms/quadratic_form__split_local_covering.py +416 -0
  662. sage/quadratic_forms/quadratic_form__ternary_Tornaria.py +657 -0
  663. sage/quadratic_forms/quadratic_form__theta.py +352 -0
  664. sage/quadratic_forms/quadratic_form__variable_substitutions.py +370 -0
  665. sage/quadratic_forms/random_quadraticform.py +209 -0
  666. sage/quadratic_forms/ternary.cpython-314-x86_64-linux-musl.so +0 -0
  667. sage/quadratic_forms/ternary.pyx +1154 -0
  668. sage/quadratic_forms/ternary_qf.py +2027 -0
  669. sage/rings/all__sagemath_modules.py +28 -0
  670. sage/rings/asymptotic/all__sagemath_modules.py +1 -0
  671. sage/rings/asymptotic/misc.py +1252 -0
  672. sage/rings/cc.py +4 -0
  673. sage/rings/cfinite_sequence.py +1306 -0
  674. sage/rings/complex_conversion.cpython-314-x86_64-linux-musl.so +0 -0
  675. sage/rings/complex_conversion.pxd +8 -0
  676. sage/rings/complex_conversion.pyx +23 -0
  677. sage/rings/complex_double.cpython-314-x86_64-linux-musl.so +0 -0
  678. sage/rings/complex_double.pxd +21 -0
  679. sage/rings/complex_double.pyx +2654 -0
  680. sage/rings/complex_mpc.cpython-314-x86_64-linux-musl.so +0 -0
  681. sage/rings/complex_mpc.pxd +21 -0
  682. sage/rings/complex_mpc.pyx +2576 -0
  683. sage/rings/complex_mpfr.cpython-314-x86_64-linux-musl.so +0 -0
  684. sage/rings/complex_mpfr.pxd +18 -0
  685. sage/rings/complex_mpfr.pyx +3602 -0
  686. sage/rings/derivation.py +2334 -0
  687. sage/rings/finite_rings/all__sagemath_modules.py +1 -0
  688. sage/rings/finite_rings/maps_finite_field.py +191 -0
  689. sage/rings/function_field/all__sagemath_modules.py +8 -0
  690. sage/rings/function_field/derivations.py +102 -0
  691. sage/rings/function_field/derivations_rational.py +132 -0
  692. sage/rings/function_field/differential.py +853 -0
  693. sage/rings/function_field/divisor.py +1107 -0
  694. sage/rings/function_field/drinfeld_modules/action.py +199 -0
  695. sage/rings/function_field/drinfeld_modules/all.py +1 -0
  696. sage/rings/function_field/drinfeld_modules/charzero_drinfeld_module.py +673 -0
  697. sage/rings/function_field/drinfeld_modules/drinfeld_module.py +2087 -0
  698. sage/rings/function_field/drinfeld_modules/finite_drinfeld_module.py +1131 -0
  699. sage/rings/function_field/drinfeld_modules/homset.py +420 -0
  700. sage/rings/function_field/drinfeld_modules/morphism.py +820 -0
  701. sage/rings/function_field/hermite_form_polynomial.cpython-314-x86_64-linux-musl.so +0 -0
  702. sage/rings/function_field/hermite_form_polynomial.pyx +188 -0
  703. sage/rings/function_field/khuri_makdisi.cpython-314-x86_64-linux-musl.so +0 -0
  704. sage/rings/function_field/khuri_makdisi.pyx +935 -0
  705. sage/rings/invariants/all.py +4 -0
  706. sage/rings/invariants/invariant_theory.py +4597 -0
  707. sage/rings/invariants/reconstruction.py +395 -0
  708. sage/rings/polynomial/all__sagemath_modules.py +17 -0
  709. sage/rings/polynomial/integer_valued_polynomials.py +1230 -0
  710. sage/rings/polynomial/laurent_polynomial_mpair.cpython-314-x86_64-linux-musl.so +0 -0
  711. sage/rings/polynomial/laurent_polynomial_mpair.pxd +15 -0
  712. sage/rings/polynomial/laurent_polynomial_mpair.pyx +2023 -0
  713. sage/rings/polynomial/ore_function_element.py +952 -0
  714. sage/rings/polynomial/ore_function_field.py +1028 -0
  715. sage/rings/polynomial/ore_polynomial_element.cpython-314-x86_64-linux-musl.so +0 -0
  716. sage/rings/polynomial/ore_polynomial_element.pxd +48 -0
  717. sage/rings/polynomial/ore_polynomial_element.pyx +3145 -0
  718. sage/rings/polynomial/ore_polynomial_ring.py +1334 -0
  719. sage/rings/polynomial/polynomial_real_mpfr_dense.cpython-314-x86_64-linux-musl.so +0 -0
  720. sage/rings/polynomial/polynomial_real_mpfr_dense.pyx +788 -0
  721. sage/rings/polynomial/q_integer_valued_polynomials.py +1264 -0
  722. sage/rings/polynomial/skew_polynomial_element.cpython-314-x86_64-linux-musl.so +0 -0
  723. sage/rings/polynomial/skew_polynomial_element.pxd +9 -0
  724. sage/rings/polynomial/skew_polynomial_element.pyx +684 -0
  725. sage/rings/polynomial/skew_polynomial_finite_field.cpython-314-x86_64-linux-musl.so +0 -0
  726. sage/rings/polynomial/skew_polynomial_finite_field.pxd +19 -0
  727. sage/rings/polynomial/skew_polynomial_finite_field.pyx +1093 -0
  728. sage/rings/polynomial/skew_polynomial_finite_order.cpython-314-x86_64-linux-musl.so +0 -0
  729. sage/rings/polynomial/skew_polynomial_finite_order.pxd +10 -0
  730. sage/rings/polynomial/skew_polynomial_finite_order.pyx +567 -0
  731. sage/rings/polynomial/skew_polynomial_ring.py +908 -0
  732. sage/rings/real_double_element_gsl.cpython-314-x86_64-linux-musl.so +0 -0
  733. sage/rings/real_double_element_gsl.pxd +8 -0
  734. sage/rings/real_double_element_gsl.pyx +794 -0
  735. sage/rings/real_field.py +58 -0
  736. sage/rings/real_mpfr.cpython-314-x86_64-linux-musl.so +0 -0
  737. sage/rings/real_mpfr.pxd +29 -0
  738. sage/rings/real_mpfr.pyx +6122 -0
  739. sage/rings/ring_extension.cpython-314-x86_64-linux-musl.so +0 -0
  740. sage/rings/ring_extension.pxd +42 -0
  741. sage/rings/ring_extension.pyx +2779 -0
  742. sage/rings/ring_extension_conversion.cpython-314-x86_64-linux-musl.so +0 -0
  743. sage/rings/ring_extension_conversion.pxd +16 -0
  744. sage/rings/ring_extension_conversion.pyx +462 -0
  745. sage/rings/ring_extension_element.cpython-314-x86_64-linux-musl.so +0 -0
  746. sage/rings/ring_extension_element.pxd +21 -0
  747. sage/rings/ring_extension_element.pyx +1635 -0
  748. sage/rings/ring_extension_homset.py +64 -0
  749. sage/rings/ring_extension_morphism.cpython-314-x86_64-linux-musl.so +0 -0
  750. sage/rings/ring_extension_morphism.pxd +35 -0
  751. sage/rings/ring_extension_morphism.pyx +920 -0
  752. sage/schemes/all__sagemath_modules.py +1 -0
  753. sage/schemes/projective/all__sagemath_modules.py +1 -0
  754. sage/schemes/projective/coherent_sheaf.py +300 -0
  755. sage/schemes/projective/cohomology.py +510 -0
  756. sage/stats/all.py +15 -0
  757. sage/stats/basic_stats.py +489 -0
  758. sage/stats/distributions/all.py +7 -0
  759. sage/stats/distributions/catalog.py +34 -0
  760. sage/stats/distributions/dgs.h +50 -0
  761. sage/stats/distributions/dgs.pxd +111 -0
  762. sage/stats/distributions/dgs_bern.h +400 -0
  763. sage/stats/distributions/dgs_gauss.h +614 -0
  764. sage/stats/distributions/dgs_misc.h +104 -0
  765. sage/stats/distributions/discrete_gaussian_integer.cpython-314-x86_64-linux-musl.so +0 -0
  766. sage/stats/distributions/discrete_gaussian_integer.pxd +14 -0
  767. sage/stats/distributions/discrete_gaussian_integer.pyx +498 -0
  768. sage/stats/distributions/discrete_gaussian_lattice.py +908 -0
  769. sage/stats/distributions/discrete_gaussian_polynomial.py +141 -0
  770. sage/stats/hmm/all.py +15 -0
  771. sage/stats/hmm/chmm.cpython-314-x86_64-linux-musl.so +0 -0
  772. sage/stats/hmm/chmm.pyx +1595 -0
  773. sage/stats/hmm/distributions.cpython-314-x86_64-linux-musl.so +0 -0
  774. sage/stats/hmm/distributions.pxd +29 -0
  775. sage/stats/hmm/distributions.pyx +531 -0
  776. sage/stats/hmm/hmm.cpython-314-x86_64-linux-musl.so +0 -0
  777. sage/stats/hmm/hmm.pxd +17 -0
  778. sage/stats/hmm/hmm.pyx +1388 -0
  779. sage/stats/hmm/util.cpython-314-x86_64-linux-musl.so +0 -0
  780. sage/stats/hmm/util.pxd +7 -0
  781. sage/stats/hmm/util.pyx +165 -0
  782. sage/stats/intlist.cpython-314-x86_64-linux-musl.so +0 -0
  783. sage/stats/intlist.pxd +14 -0
  784. sage/stats/intlist.pyx +588 -0
  785. sage/stats/r.py +49 -0
  786. sage/stats/time_series.cpython-314-x86_64-linux-musl.so +0 -0
  787. sage/stats/time_series.pxd +6 -0
  788. sage/stats/time_series.pyx +2546 -0
  789. sage/tensor/all.py +2 -0
  790. sage/tensor/modules/all.py +8 -0
  791. sage/tensor/modules/alternating_contr_tensor.py +761 -0
  792. sage/tensor/modules/comp.py +5598 -0
  793. sage/tensor/modules/ext_pow_free_module.py +824 -0
  794. sage/tensor/modules/finite_rank_free_module.py +3589 -0
  795. sage/tensor/modules/format_utilities.py +333 -0
  796. sage/tensor/modules/free_module_alt_form.py +858 -0
  797. sage/tensor/modules/free_module_automorphism.py +1207 -0
  798. sage/tensor/modules/free_module_basis.py +1074 -0
  799. sage/tensor/modules/free_module_element.py +284 -0
  800. sage/tensor/modules/free_module_homset.py +652 -0
  801. sage/tensor/modules/free_module_linear_group.py +564 -0
  802. sage/tensor/modules/free_module_morphism.py +1581 -0
  803. sage/tensor/modules/free_module_tensor.py +3289 -0
  804. sage/tensor/modules/reflexive_module.py +386 -0
  805. sage/tensor/modules/tensor_free_module.py +780 -0
  806. sage/tensor/modules/tensor_free_submodule.py +538 -0
  807. sage/tensor/modules/tensor_free_submodule_basis.py +140 -0
  808. sage/tensor/modules/tensor_with_indices.py +1043 -0
@@ -0,0 +1,472 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ r"""
3
+ Implementation of the command ``sage --fiximports``.
4
+
5
+ This file provides a tool to fix the modularization antipattern ``namespace_pkg_all_import``
6
+ reported by ``tox -e relint``. Sage library code should not import from ``sage.PAC.KAGE.all``
7
+ when ``sage.PAC.KAGE`` is an implicit namespace package.
8
+
9
+ AUTHORS:
10
+
11
+ - Alex Chandler
12
+ - Matthias Köppe
13
+
14
+ INSTRUCTIONS:
15
+
16
+ To fix the above issue for all Python and Cython source files (``.py``, ``.pyx``, ``.pxi``) files in the ``src/sage`` directory,
17
+ run the following from a terminal in ``SAGE_ROOT`` ::
18
+
19
+ ./sage -python src/sage/misc/replace_dot_all.py
20
+
21
+ or ::
22
+
23
+ ./sage --fiximports
24
+
25
+ Running replace_dot_all.py will call the function :func:`walkdir_replace_dot_all` which walks through all Python and Cython source files
26
+ and replaces certain ``from sage.PAC.KAGE.all import something`` (those matching the pattern above)
27
+ with the correct ``import`` statement by applying the function :func:`~sage.misc.dev_tools.import_statements`.
28
+
29
+ The user can also pass subdirectories of ``src/sage`` or specific files to fix. For example ::
30
+
31
+ ./sage -python src/sage/misc/replace_dot_all.py src/sage/arith
32
+
33
+ will fix all files in ``src/sage/arith`` and ::
34
+
35
+ ./sage -python src/sage/misc/replace_dot_all.py src/sage/arith/functions.pyx
36
+
37
+ will fix the file ``src/sage/arith/functions.py``. The file extension is necessary in the case of a specific file. The user can also
38
+ pass the verbose flag ``-v`` to print out the files being fixed. For example ::
39
+
40
+ ./sage -python src/sage/misc/replace_dot_all.py -v src/sage/arith
41
+
42
+ will fix all files in ``src/sage/arith`` and print out the unusual examples of ``import`` statements it finds.
43
+
44
+ In some rare cases, such as ``import`` statements appearing in doctests, the program will not be able to fix the ``import`` statement. The program will
45
+ print out the location of the file and the line number of the exceptional ``import`` statement. The user can then manually fix the ``import`` statement.
46
+ The program will also (usually) print out the suggested replacement for the ``import`` statement. The user can then copy and paste this replacement
47
+ into the file. In the cases a suggested replacement is not printed out, the user should use the function :func:`~sage.misc.dev_tools.import_statements`
48
+ to find the correct ``import`` statement.
49
+ """
50
+
51
+ # ****************************************************************************
52
+ # Copyright (C) 2022-2023 Alex Chandler
53
+ # 2023 Matthias Koeppe
54
+ #
55
+ # This program is free software: you can redistribute it and/or modify
56
+ # it under the terms of the GNU General Public License as published by
57
+ # the Free Software Foundation, either version 2 of the License, or
58
+ # (at your option) any later version.
59
+ # https://www.gnu.org/licenses/
60
+ # ****************************************************************************
61
+
62
+ # Importing packages
63
+
64
+ from sage.misc.dev_tools import import_statements
65
+ import os
66
+ import re
67
+ import argparse
68
+
69
+ # We import this using __import__ so that "tox -e relint" does not complain about this source file.
70
+ __import__("sage.all", globals(), locals(), ["*"])
71
+
72
+
73
+ # Keep in sync with SAGE_ROOT/src/.relint.yml (namespace_pkg_all_import)
74
+
75
+ default_package_regex = (r"sage("
76
+ r"|[.](arith|categories|combinat|crypto|databases|data_structures|dynamics|ext|game_theory|games|geometry|graphs|groups|interfaces|lfunctions|manifolds|matrix|matroids|misc|modules|monoids|numerical|probability|quadratic_forms|quivers|rings|sat|schemes|sets|stats|tensor)[a-z0-9_.]*|[.]libs"
77
+ r")[.]all")
78
+
79
+
80
+ # Global variables
81
+
82
+ examples = list('ABCDEFGHIJ') # controls how we print out interesting examples to the console
83
+ interesting_examples = dict(zip(examples, [0]*len(examples)))
84
+ log_messages = ''
85
+ number_examples_to_print = 100 # controls how many examples we print out to the console (100 effectively allows all unusual examples to be printed)
86
+ numberFiles, numberFilesMatchingRegex, numberFilesChanged, numberStatementsReplaced = 0, 0, 0, 0 # to print report on number of files changed
87
+
88
+
89
+ # Functions
90
+
91
+ def find_replacements(location, package_regex=None, verbose=False):
92
+ r"""
93
+ Locate the lines in the file at ``location`` which contain an ``import`` statement.
94
+
95
+ INPUT:
96
+
97
+ - ``location`` -- a file path
98
+ - ``package_regex`` -- (default: :obj:`default_package_regex`) a regular expression matching
99
+ the ``sage.PAC.KAGE.all`` package names from which we do not want to import.
100
+ - ``verbose`` -- a parameter which if used will issue print statements when interesting examples are found
101
+
102
+ OUTPUT:
103
+
104
+ an array [row_index,import_index,replaced_commands,lines_spanned (optional)] with entries
105
+
106
+ - ``row_index`` -- the row index (zero indexed) in the file which needs replacing
107
+ - ``import_index`` -- the index of row row_index which marks the beginning of the word ``import`` in the line
108
+ - ``replaced_commands`` -- the string which will replace the current line
109
+ - ``lines_spanned`` -- the number of lines the original statement spans
110
+
111
+ This output can be processed by the function :func:`process_line`.
112
+
113
+ EXAMPLES::
114
+
115
+ sage: # needs SAGE_SRC
116
+ sage: from sage.misc.replace_dot_all import *
117
+ sage: location = os.path.join(sage.env.SAGE_SRC, 'sage', 'plot', 'arc.py')
118
+ sage: find_replacements(location, package_regex='sage[.]plot[.]all', verbose=True)
119
+ [[..., ..., 'from sage.plot.graphics import Graphics']]
120
+ """
121
+ if package_regex is None:
122
+ package_regex = default_package_regex
123
+ regex = r"from\s+" + package_regex + r"\s+import"
124
+ pattern = re.compile(regex)
125
+ replacements = []
126
+ global log_messages, interesting_examples
127
+ with open(location) as fp:
128
+ skip_line = False
129
+ lines = fp.readlines() # read all lines using readline()
130
+ row_index = 0
131
+ for row in lines: # iterate over all lines of python file
132
+ if pattern.search(row): # (match the regex also do not want to mess with documentation)
133
+ prefix = ''
134
+ if '*' in row or 'SAGE_ROOT' in row:
135
+ if verbose and interesting_examples['J'] < number_examples_to_print:
136
+ interesting_examples['J'] += 1
137
+ log_messages += (f'J. Match but no changes made (import statement uses *) at {location}:{row_index + 1}. '
138
+ f'Not applying any changes here.\n')
139
+ continue
140
+ elif not (row.lstrip()[0:4] == 'from'):
141
+ skip_line = True
142
+ if '"' not in row and "'" not in row:
143
+ print(f'\n'
144
+ f'NEED TO CHANGE MANUALLY \n'
145
+ f' Issue: line with import statement does not start with "from" \n'
146
+ f' Location: at {location} \n'
147
+ f' Line number: {row_index + 1}. \n'
148
+ f' Giving correct import statements:\n')
149
+ leading_space = 0
150
+ while len(row) > 0 and row[leading_space] == ' ' and leading_space < len(row)-1:
151
+ leading_space += 1
152
+ prefix_space = leading_space
153
+ while row[prefix_space:prefix_space+4] != 'from':
154
+ prefix_space += 1
155
+ prefix = row[leading_space:prefix_space]
156
+ row = row[prefix_space:]
157
+ else:
158
+ print(f'\n'
159
+ f'NEED TO CHANGE MANUALLY \n'
160
+ f' Issue: import statement does not start with "from" and contains quotation marks \n'
161
+ f' Location: at {location}:{row_index + 1}. \n'
162
+ f' Not able to suggest correct import statements. User must use the function import_statements().')
163
+ continue
164
+ # find() method returns -1 if the value is not found, or if found it returns index of the first occurrence of the substring
165
+ import_index = row.find('import ')
166
+ modules = ''
167
+ to_exec = row.strip() # the import statement itself which we will clean and call to import modules e.g. "import (aa as a, bb, cc as c)"
168
+ to_eval = row[import_index + 7:-1].strip() # tuple of modules in import statement but e.g. "(aa as a, bb, cc as c)" is saved as "(a,bb,c)"
169
+ to_eval_raw = row[import_index + 7:-1].strip() # same as to_eval but we don't get rid of " as " parts e.g. "(aa as a, bb, cc as c)"
170
+ span = 0 # keeps track of how many lines the import statement spans
171
+
172
+ if '(' in row: # for examples where we import a tuple of modules and the statement spans several lines
173
+ while ')' not in lines[row_index + span]: # finding the line which closes the import statement
174
+ span += 1
175
+ to_exec += lines[row_index + span].strip()
176
+ to_eval += lines[row_index + span].strip()
177
+ to_eval_raw += lines[row_index + span].strip()
178
+ if span and verbose: # useful to see these multiline examples for debugging
179
+ if " as " in to_eval_raw and interesting_examples['D'] < number_examples_to_print:
180
+ log_messages += f'D. Interesting example (spans multiple lines and has " as ") at {location}:{row_index + 1}\n'
181
+ interesting_examples['D'] += 1
182
+ elif interesting_examples['B'] < number_examples_to_print:
183
+ log_messages += f'B. Interesting example (spans multiple lines) at {location}:{row_index + 1}\n'
184
+ interesting_examples['B'] += 1
185
+
186
+ # if there is an "as" statement inside to_eval, we want to keep only the new name for the module e.g. "(aa as a, bb, cc as c)" becomes "(a,bb,c)"
187
+ while " as " in to_eval:
188
+ as_ind = to_eval.find(" as ")
189
+ j = as_ind - 1
190
+ while to_eval[j] not in [',', ' '] and j >= 0:
191
+ j -= 1
192
+ to_eval = to_eval[0:j+1] + to_eval[as_ind+4:]
193
+
194
+ try: # trying to execute the import statement so we can eval the modules and feed them to the function import_statements
195
+ to_exec = to_exec.replace("'", '').replace('"', '')
196
+ if (to_exec[-1] == ','):
197
+ to_exec = to_exec[:-1]
198
+ glob = dict()
199
+ exec(to_exec, glob)
200
+ except ModuleNotFoundError as err:
201
+ print(f'ModuleNotFoundError: {err} found when trying to execute {to_exec}')
202
+ except ImportError as err:
203
+ print(f'ImportError: {err} found when trying to execute {to_exec}')
204
+
205
+ try: # try to evaluate the list of module names to get a list of the modules themselves which we can call import_statements on
206
+ modules = eval(to_eval, glob)
207
+ except NameError as err:
208
+ print(f'NameError: {err} found when trying to evaluate {to_eval} at {location}:{row_index + 1}')
209
+ except SyntaxError as err:
210
+ print(f'SyntaxError: {err} found when trying to evaluate {to_eval} at {location}:{row_index + 1}')
211
+
212
+ # Need module to be a list of modules we are importing. If a single module was given, we make it a 1-element list.
213
+ if not isinstance(modules, tuple):
214
+ modules = [modules]
215
+
216
+ to_eval_list = to_eval.replace('(', '').replace(')', '').split(',') # convert comma separated string to_eval to a list
217
+ to_eval_list_raw = to_eval_raw.replace('(', '').replace(')', '').split(',') # convert comma separated string to_eval_raw to a list
218
+ to_eval_list_index = 0
219
+
220
+ change_to = ''
221
+ # constructs the appropriate replacement for the import statement and stores it (along with location data) in list replacements
222
+ for mod in modules:
223
+ postfix = ''
224
+ as_index = -1
225
+ # saves the callable name of module in variable postfix (e.g. for module "b" called by "bb as b" we set postfix = " as b")
226
+ if " as " in to_eval_list_raw[to_eval_list_index]:
227
+ if verbose and interesting_examples['C'] < number_examples_to_print:
228
+ log_messages += f'C. Interesting example (" as " in tuple import) at {location}:{row_index + 1}\n'
229
+ interesting_examples['C'] += 1
230
+ as_index = to_eval_list_raw[to_eval_list_index].index(" as ")
231
+ postfix = to_eval_list_raw[to_eval_list_index][as_index:]
232
+ new_import_statement = import_statements(mod, answer_as_str=True, verbose=False) # import statement for the current mod in the list module
233
+ import_index = new_import_statement.find('import')
234
+ new_mod_as_string = new_import_statement[import_index + 7:].strip() # the name for the module given by the function import_statements
235
+ if as_index >= 0:
236
+ # the name for the module as originally called in the document (when there is an " as " statement)
237
+ original_mod_string = to_eval_list_raw[to_eval_list_index].strip()[:as_index]
238
+ else:
239
+ original_mod_string = to_eval_list[to_eval_list_index].strip() # the name for the module as originally called in the document
240
+ if original_mod_string != new_mod_as_string: # if the names differ, we use the original name as it was called in the document
241
+ if verbose and interesting_examples['A'] < number_examples_to_print:
242
+ log_messages += (f'A. Interesting example (module has multiple names) at {location}:{row_index + 1}. '
243
+ f'Names: {original_mod_string}, {new_mod_as_string}. '
244
+ f'Replacing new {new_mod_as_string} by original {original_mod_string}.\n')
245
+ interesting_examples['A'] += 1
246
+ new_import_statement = new_import_statement.replace(' ' + new_mod_as_string, ' ' + new_mod_as_string + ' as ' + original_mod_string)
247
+ if " as " in postfix and interesting_examples['G'] < number_examples_to_print:
248
+ log_messages += (f'G. Interesting example (module has multiple names) at {location}:{row_index + 1}. '
249
+ f'Names: {original_mod_string}, {new_mod_as_string}. '
250
+ f'Replacing new {new_mod_as_string} by original {original_mod_string}.\n')
251
+ interesting_examples['G'] += 1
252
+ if len(postfix.strip()) > 0: # if module was called with " as " statement, we put that back in by adding the string "postfix"
253
+ # if " as " in new_import_statement locate the index of " as ", remove the end after this, and add the postfix there
254
+ if " as " in new_import_statement:
255
+ new_import_statement = new_import_statement[:new_import_statement.index(" as ")] + ' ' + postfix.strip()
256
+ else:
257
+ new_import_statement += (' ' + postfix.strip())
258
+ change_to += (prefix + new_import_statement + '\n')
259
+ to_eval_list_index += 1
260
+ # [:-1] on change_to gets rid of the last '\n' we added which adds an unnecessary new line
261
+ replacement = [row_index, import_index, change_to[:-1]].copy()
262
+ if span:
263
+ # if original statement spanned multiple lines, we store that information to signal that we need to skip lines
264
+ # as we read the document in the function make_replacements_in_file
265
+ replacement.append(span)
266
+ if not skip_line:
267
+ replacements.append(replacement)
268
+ row_index += 1
269
+ skip_line = False
270
+ # keeping track of the numbers of files changed and statements replaced
271
+ global numberStatementsReplaced, numberFilesChanged
272
+ numberStatementsReplaced += len(replacements)
273
+ if replacements:
274
+ numberFilesChanged += 1
275
+ return replacements
276
+
277
+
278
+ def process_line(location, line, replacements, row_index, verbose=False):
279
+ r"""
280
+ Modify a single source code ``line`` according to the given ``replacements``.
281
+
282
+ INPUTS:
283
+
284
+ - ``location`` -- a file path; only used for logging
285
+ - ``line`` -- a source code line
286
+ - ``replacements`` -- the array output from :func:`find_replacements`
287
+ - ``row_index`` -- the line number where ``import`` appears
288
+ - ``verbose`` -- if ``True``, issue print statements when interesting
289
+ examples are found
290
+
291
+ OUTPUT: an array ``[new_line, replacements]`` with entries
292
+
293
+ - ``new_line`` -- the modified import statement (possibly now on several lines)
294
+ - ``replacements`` -- just returns the original replacements with its index 0 element removed if ``replacements`` is nonempty
295
+
296
+ EXAMPLES:
297
+
298
+ Replacing the first line which needs a replacement in the source file with filepath ``src/sage/plot/arc.py``::
299
+
300
+ sage: # needs SAGE_SRC
301
+ sage: from sage.misc.replace_dot_all import *
302
+ sage: location = os.path.join(sage.env.SAGE_SRC, 'sage', 'plot', 'arc.py')
303
+ sage: replacements = find_replacements(location, package_regex='sage[.]plot[.]all', verbose=True); replacements
304
+ [[477, 24, 'from sage.plot.graphics import Graphics']]
305
+ sage: with open(location, "r") as file:
306
+ ....: lines = file.readlines()
307
+ sage: row_index, col_number, *_ = replacements[0]
308
+ sage: line = lines[row_index]
309
+ sage: print(line.rstrip())
310
+ from sage.plot.all import Graphics
311
+ sage: new_line, replacements = process_line(location, line, replacements, row_index)
312
+ sage: print(new_line)
313
+ from sage.plot.graphics import Graphics
314
+ sage: replacements
315
+ []
316
+ """
317
+ line = line.rstrip() # stripping line break
318
+ new_line = ''
319
+ global log_messages, interesting_examples
320
+ if len(replacements) == 0:
321
+ return line, replacements
322
+ if row_index == replacements[0][0]: # if line marked as containing .all
323
+ replacement = replacements.pop(0)
324
+ leading_space = 0
325
+ while line and line[leading_space] == ' ' and leading_space < len(line)-1:
326
+ leading_space += 1
327
+ new_line = ' '*leading_space + replacement[2] # adds leading space to first line (which may or may not start with 'from')
328
+ new_line = new_line.replace('\n', '\n'+' '*leading_space) # adds correct amount of indentation to the replacement at each line
329
+ # new_line = replacement[2].replace('from ',' '*leading_space + 'from ') # adds correct amount of indentation to the replacement at each line
330
+ if verbose and leading_space > 0:
331
+ if len(replacement) == 4 and interesting_examples['F'] < number_examples_to_print:
332
+ log_messages += f'F. Interesting example (has leading space and multiline) at {location}:{replacement[0] + 1}\n'
333
+ interesting_examples['F'] += 1
334
+ elif interesting_examples['E'] < number_examples_to_print:
335
+ log_messages += f'E. Interesting example (has leading space) at {location}:{replacement[0] + 1}\n'
336
+ interesting_examples['E'] += 1
337
+
338
+ else: # if line does not contain .all
339
+ new_line = line
340
+ return new_line, replacements
341
+
342
+
343
+ def make_replacements_in_file(location, package_regex=None, verbose=False, output=None):
344
+ r"""
345
+ Replace ``import`` statements in the file with filepath "location".
346
+
347
+ INPUT:
348
+
349
+ - ``location`` -- a file path
350
+ - ``package_regex`` -- (default: :obj:`default_package_regex`) a regular expression matching
351
+ the ``sage.PAC.KAGE.all`` package names from which we do not want to import.
352
+ - ``verbose`` -- if ``True``, issue print statements when interesting examples are found
353
+ - ``output`` -- a file path; if ``None``, overwrite the file given by ``location``
354
+
355
+ EXAMPLES::
356
+
357
+ sage: from sage.misc.replace_dot_all import *
358
+ sage: import tempfile
359
+ sage: with tempfile.TemporaryDirectory() as d:
360
+ ....: location = os.path.join(d, "input.py")
361
+ ....: with open(location, "w") as input:
362
+ ....: _ = input.write("from sage.plot.all import point2d\n")
363
+ ....: _ = input.write("from sage.plot.line import line\n")
364
+ ....: make_replacements_in_file(location, 'sage[.]plot[.]all', True)
365
+ ....: with open(location, "r") as output:
366
+ ....: for line in output:
367
+ ....: print(line.strip())
368
+ from sage.plot.point import point2d
369
+ from sage.plot.line import line
370
+ """
371
+ replacements = find_replacements(location, package_regex, verbose)
372
+ with open(location) as file:
373
+ lines = file.readlines()
374
+ replaced_content = ""
375
+ row_index = 0 # keeps track of the line number
376
+ while row_index < len(lines): # looping through the file
377
+ line = lines[row_index]
378
+ span = 0 # keeps track of number of lines import statement spans
379
+ if replacements and row_index == replacements[0][0] and len(replacements[0]) == 4:
380
+ span = replacements[0][3] # if import statement spans span lines
381
+ # returns the line if no replacements are needed and returns the processed line otherwise
382
+ new_line, replacements = process_line(location, line, replacements, row_index, verbose=verbose)
383
+ replaced_content += new_line + "\n" # concatenate the new string and add an end-line break
384
+ row_index += 1 + span
385
+ if output is None:
386
+ output = location
387
+ with open(output, "w") as write_file: # Open file in write mode
388
+ write_file.write(replaced_content) # overwriting the old file contents with the new/replaced content
389
+
390
+
391
+ def walkdir_replace_dot_all(dir, file_regex=r'.*[.](py|pyx|pxi)$', package_regex=None, verbose=False, *,
392
+ excluded_file_regex=r'auto-methods|replace_dot_all'):
393
+ r"""
394
+ Replace ``import`` statements in the files in directory ``dir`` matching the regex pattern ``file_regex``.
395
+
396
+ INPUTS:
397
+
398
+ - ``dir`` -- a directory path
399
+ - ``file_regex`` -- a regular expression matching the file names to process
400
+ - ``package_regex`` -- (default: :obj:`default_package_regex`) a regular expression matching
401
+ the ``sage.PAC.KAGE.all`` package names from which we do not want to import.
402
+ - ``verbose`` -- if ``True``, print statements when interesting examples are found
403
+ - ``excluded_file_regex`` -- a regular expression matching the file names to exclude
404
+
405
+ EXAMPLES::
406
+
407
+ sage: # needs SAGE_SRC
408
+ sage: from sage.misc.replace_dot_all import *
409
+ sage: walkdir_replace_dot_all(os.path.join(sage.env.SAGE_SRC, 'sage')) # not tested
410
+ """
411
+ global numberFiles, numberFilesMatchingRegex
412
+ file_regex = re.compile(file_regex)
413
+ excluded_file_regex = re.compile(excluded_file_regex)
414
+ for root, dirs, files in os.walk(dir, topdown=False):
415
+ for name in files:
416
+ numberFiles += 1
417
+ if file_regex.search(name) and not excluded_file_regex.search(name):
418
+ numberFilesMatchingRegex += 1
419
+ location = os.path.join(root, name)
420
+ make_replacements_in_file(location, package_regex, verbose)
421
+
422
+
423
+ # ******************************************************** EXECUTES MAIN FUNCTION **********************************************************************
424
+ # this executes the main function in this file which writes over all import statements matching regex in files in specified location matching fileRegex:
425
+ if __name__ == "__main__":
426
+ # Create argument parser
427
+ parser = argparse.ArgumentParser()
428
+ # Optional arguments
429
+ parser.add_argument(
430
+ "location",
431
+ metavar='files or directories',
432
+ nargs='*',
433
+ help=("Names of source directories or source files. "
434
+ "If none given, walks through all files in src/sage."),
435
+ type=str)
436
+ parser.add_argument(
437
+ "-v", "--verbose",
438
+ help="Increase output verbosity. Shows locations of any unusual cases of import statements and the corresponding changes.",
439
+ action="store_true") # Parse arguments
440
+ args = parser.parse_args()
441
+ verbosity = args.verbose
442
+ # Declare regular expressions
443
+ file_regex = r'.*[.](py|pyx|pxi)$'
444
+ package_regex = None
445
+ # Execute the main function based on the specified location and verbosity
446
+ if not args.location:
447
+ from sage.env import SAGE_SRC
448
+
449
+ args.location = [os.path.join(SAGE_SRC, 'sage')]
450
+ try:
451
+ for location in args.location:
452
+ if not (location.endswith('.py') or location.endswith('.pxi')):
453
+ # Assume directory
454
+ walkdir_replace_dot_all(location, file_regex, package_regex, verbose=verbosity)
455
+ else:
456
+ # make replacements in file specified by location argument
457
+ make_replacements_in_file(location, package_regex, verbose=verbosity)
458
+ finally:
459
+ # Print report also when interrupted
460
+ if verbosity:
461
+ log_messages_split = sorted(log_messages.rstrip().split('\n'))
462
+ for i, message in enumerate(log_messages_split, start=1):
463
+ # add index to each line
464
+ print(f'{i}. {message.rstrip()}')
465
+ report = 'REPORT:\n'
466
+ report += f'Number of files checked: {numberFiles}\n'
467
+ report += f'Number of files matching regex: {numberFilesMatchingRegex}\n'
468
+ report += f'Number of files changed: {numberFilesChanged}\n'
469
+ report += f'Number of import statements replaced: {numberStatementsReplaced}'
470
+ print('*'*100 + '\n' + report + '\n' + '*'*100)
471
+
472
+ # ******************************************************************************************************************************************************
@@ -0,0 +1,168 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ r"""
3
+ Sphinx configuration shared by sage.misc.sphinxify and sage_docbuild
4
+ """
5
+
6
+ # ****************************************************************************
7
+ # Copyright (C) 2022 Matthias Koeppe <mkoeppe@math.ucdavis.edu>
8
+ #
9
+ # This program is free software: you can redistribute it and/or modify
10
+ # it under the terms of the GNU General Public License as published by
11
+ # the Free Software Foundation, either version 2 of the License, or
12
+ # (at your option) any later version.
13
+ # https://www.gnu.org/licenses/
14
+ # ****************************************************************************
15
+
16
+ from docutils import nodes
17
+ from docutils.transforms import Transform
18
+ from sphinx.ext.doctest import blankline_re
19
+
20
+ # The reST default role (used for this markup: `text`) to use for all documents.
21
+ default_role = 'math'
22
+
23
+
24
+ def process_docstring_aliases(app, what, name, obj, options, docstringlines):
25
+ """
26
+ Change the docstrings for aliases to point to the original object.
27
+ """
28
+ basename = name.rpartition('.')[2]
29
+ if hasattr(obj, '__name__') and obj.__name__ != basename:
30
+ docstringlines[:] = ['See :obj:`%s`.' % name]
31
+
32
+
33
+ def process_directives(app, what, name, obj, options, docstringlines):
34
+ """
35
+ Remove 'nodetex' and other directives from the first line of any
36
+ docstring where they appear.
37
+ """
38
+ if len(docstringlines) == 0:
39
+ return
40
+ first_line = docstringlines[0]
41
+ directives = [d.lower() for d in first_line.split(',')]
42
+ if 'nodetex' in directives:
43
+ docstringlines.pop(0)
44
+
45
+
46
+ def process_docstring_cython(app, what, name, obj, options, docstringlines):
47
+ """
48
+ Remove Cython's filename and location embedding.
49
+ """
50
+ if len(docstringlines) <= 1:
51
+ return
52
+
53
+ first_line = docstringlines[0]
54
+ if first_line.startswith('File:') and '(starting at' in first_line:
55
+ # Remove the first two lines
56
+ docstringlines.pop(0)
57
+ docstringlines.pop(0)
58
+
59
+
60
+ def process_docstring_module_title(app, what, name, obj, options, docstringlines):
61
+ """
62
+ Removes the first line from the beginning of the module's docstring. This
63
+ corresponds to the title of the module's documentation page.
64
+ """
65
+ if what != "module":
66
+ return
67
+
68
+ # Remove any additional blank lines at the beginning
69
+ title_removed = False
70
+ while len(docstringlines) > 1 and not title_removed:
71
+ if docstringlines[0].strip() != "":
72
+ title_removed = True
73
+ docstringlines.pop(0)
74
+
75
+ # Remove any additional blank lines at the beginning
76
+ while len(docstringlines) > 1:
77
+ if docstringlines[0].strip() == "":
78
+ docstringlines.pop(0)
79
+ else:
80
+ break
81
+
82
+
83
+ def process_dollars(app, what, name, obj, options, docstringlines):
84
+ r"""
85
+ Replace dollar signs with backticks.
86
+
87
+ See sage.misc.sagedoc.process_dollars for more information.
88
+ """
89
+ if len(docstringlines) and name.find("process_dollars") == -1:
90
+ from sage.misc.sagedoc import process_dollars as sagedoc_dollars
91
+ s = sagedoc_dollars("\n".join(docstringlines))
92
+ lines = s.split("\n")
93
+ for i in range(len(lines)):
94
+ docstringlines[i] = lines[i]
95
+
96
+
97
+ def process_inherited(app, what, name, obj, options, docstringlines):
98
+ """
99
+ If we're including inherited members, omit their docstrings.
100
+ """
101
+ if not options.get('inherited-members'):
102
+ return
103
+
104
+ if what in ['class', 'data', 'exception', 'function', 'module']:
105
+ return
106
+
107
+ name = name.split('.')[-1]
108
+
109
+ if what == 'method' and hasattr(obj, 'im_class'):
110
+ if name in obj.im_class.__dict__.keys():
111
+ return
112
+
113
+ if what == 'attribute' and hasattr(obj, '__objclass__'):
114
+ if name in obj.__objclass__.__dict__.keys():
115
+ return
116
+
117
+ for i in range(len(docstringlines)):
118
+ docstringlines.pop()
119
+
120
+
121
+ def skip_TESTS_block(app, what, name, obj, options, docstringlines):
122
+ """
123
+ Skip blocks labeled "TESTS:".
124
+
125
+ See sage.misc.sagedoc.skip_TESTS_block for more information.
126
+ """
127
+ from sage.misc.sagedoc import skip_TESTS_block as sagedoc_skip_TESTS
128
+ if not docstringlines:
129
+ # No docstring, so don't do anything. See Issue #19932.
130
+ return
131
+ s = sagedoc_skip_TESTS("\n".join(docstringlines))
132
+ lines = s.split("\n")
133
+ for i in range(len(lines)):
134
+ docstringlines[i] = lines[i]
135
+ while len(docstringlines) > len(lines):
136
+ del docstringlines[len(lines)]
137
+
138
+
139
+ class SagemathTransform(Transform):
140
+ """
141
+ Transform for code-blocks.
142
+
143
+ This allows Sphinx to treat code-blocks with prompt "sage:" as
144
+ associated with the pycon lexer, and in particular, to change
145
+ "<BLANKLINE>" to a blank line.
146
+ """
147
+ default_priority = 500
148
+
149
+ def apply(self):
150
+ for node in self.document.traverse(nodes.literal_block):
151
+ if node.get('language') is None and node.astext().startswith('sage:'):
152
+ node['language'] = 'ipycon'
153
+ source = node.rawsource
154
+ source = blankline_re.sub('', source)
155
+ node.rawsource = source
156
+ node[:] = [nodes.Text(source)]
157
+
158
+ # This is only used by sage.misc.sphinxify
159
+
160
+
161
+ def setup(app):
162
+ app.connect('autodoc-process-docstring', process_docstring_cython)
163
+ app.connect('autodoc-process-docstring', process_directives)
164
+ app.connect('autodoc-process-docstring', process_docstring_module_title)
165
+ app.connect('autodoc-process-docstring', process_dollars)
166
+ app.connect('autodoc-process-docstring', process_inherited)
167
+ app.connect('autodoc-process-docstring', skip_TESTS_block)
168
+ app.add_transform(SagemathTransform)