passagemath-modules 10.6.31rc3__cp314-cp314-musllinux_1_2_aarch64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of passagemath-modules might be problematic. Click here for more details.

Files changed (807) hide show
  1. passagemath_modules-10.6.31rc3.dist-info/METADATA +281 -0
  2. passagemath_modules-10.6.31rc3.dist-info/RECORD +807 -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-2d945d6c.so.1 +0 -0
  6. passagemath_modules.libs/libgfortran-67378ab2.so.5.0.0 +0 -0
  7. passagemath_modules.libs/libgmp-28992bcb.so.10.5.0 +0 -0
  8. passagemath_modules.libs/libgsl-23768756.so.28.0.0 +0 -0
  9. passagemath_modules.libs/libmpc-7897025b.so.3.3.1 +0 -0
  10. passagemath_modules.libs/libmpfr-e34bb864.so.6.2.1 +0 -0
  11. passagemath_modules.libs/libopenblasp-r0-503f0c35.3.29.so +0 -0
  12. sage/algebras/all__sagemath_modules.py +20 -0
  13. sage/algebras/catalog.py +148 -0
  14. sage/algebras/clifford_algebra.py +3107 -0
  15. sage/algebras/clifford_algebra_element.cpython-314-aarch64-linux-musl.so +0 -0
  16. sage/algebras/clifford_algebra_element.pxd +16 -0
  17. sage/algebras/clifford_algebra_element.pyx +997 -0
  18. sage/algebras/commutative_dga.py +4252 -0
  19. sage/algebras/exterior_algebra_groebner.cpython-314-aarch64-linux-musl.so +0 -0
  20. sage/algebras/exterior_algebra_groebner.pxd +55 -0
  21. sage/algebras/exterior_algebra_groebner.pyx +727 -0
  22. sage/algebras/finite_dimensional_algebras/all.py +2 -0
  23. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra.py +1029 -0
  24. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.cpython-314-aarch64-linux-musl.so +0 -0
  25. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pxd +12 -0
  26. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pyx +706 -0
  27. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_ideal.py +196 -0
  28. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_morphism.py +255 -0
  29. sage/algebras/finite_gca.py +528 -0
  30. sage/algebras/group_algebra.py +232 -0
  31. sage/algebras/lie_algebras/abelian.py +197 -0
  32. sage/algebras/lie_algebras/affine_lie_algebra.py +1213 -0
  33. sage/algebras/lie_algebras/all.py +25 -0
  34. sage/algebras/lie_algebras/all__sagemath_modules.py +1 -0
  35. sage/algebras/lie_algebras/bch.py +177 -0
  36. sage/algebras/lie_algebras/bgg_dual_module.py +1184 -0
  37. sage/algebras/lie_algebras/bgg_resolution.py +232 -0
  38. sage/algebras/lie_algebras/center_uea.py +767 -0
  39. sage/algebras/lie_algebras/classical_lie_algebra.py +2516 -0
  40. sage/algebras/lie_algebras/examples.py +683 -0
  41. sage/algebras/lie_algebras/free_lie_algebra.py +973 -0
  42. sage/algebras/lie_algebras/heisenberg.py +820 -0
  43. sage/algebras/lie_algebras/lie_algebra.py +1562 -0
  44. sage/algebras/lie_algebras/lie_algebra_element.cpython-314-aarch64-linux-musl.so +0 -0
  45. sage/algebras/lie_algebras/lie_algebra_element.pxd +68 -0
  46. sage/algebras/lie_algebras/lie_algebra_element.pyx +2122 -0
  47. sage/algebras/lie_algebras/morphism.py +661 -0
  48. sage/algebras/lie_algebras/nilpotent_lie_algebra.py +457 -0
  49. sage/algebras/lie_algebras/onsager.py +1324 -0
  50. sage/algebras/lie_algebras/poincare_birkhoff_witt.py +816 -0
  51. sage/algebras/lie_algebras/quotient.py +462 -0
  52. sage/algebras/lie_algebras/rank_two_heisenberg_virasoro.py +355 -0
  53. sage/algebras/lie_algebras/representation.py +1040 -0
  54. sage/algebras/lie_algebras/structure_coefficients.py +459 -0
  55. sage/algebras/lie_algebras/subalgebra.py +967 -0
  56. sage/algebras/lie_algebras/symplectic_derivation.py +289 -0
  57. sage/algebras/lie_algebras/verma_module.py +1630 -0
  58. sage/algebras/lie_algebras/virasoro.py +1186 -0
  59. sage/algebras/octonion_algebra.cpython-314-aarch64-linux-musl.so +0 -0
  60. sage/algebras/octonion_algebra.pxd +20 -0
  61. sage/algebras/octonion_algebra.pyx +987 -0
  62. sage/algebras/orlik_solomon.py +907 -0
  63. sage/algebras/orlik_terao.py +779 -0
  64. sage/algebras/steenrod/all.py +7 -0
  65. sage/algebras/steenrod/steenrod_algebra.py +4258 -0
  66. sage/algebras/steenrod/steenrod_algebra_bases.py +1179 -0
  67. sage/algebras/steenrod/steenrod_algebra_misc.py +1167 -0
  68. sage/algebras/steenrod/steenrod_algebra_mult.py +954 -0
  69. sage/algebras/weyl_algebra.py +1126 -0
  70. sage/all__sagemath_modules.py +62 -0
  71. sage/calculus/all__sagemath_modules.py +19 -0
  72. sage/calculus/expr.py +205 -0
  73. sage/calculus/integration.cpython-314-aarch64-linux-musl.so +0 -0
  74. sage/calculus/integration.pyx +698 -0
  75. sage/calculus/interpolation.cpython-314-aarch64-linux-musl.so +0 -0
  76. sage/calculus/interpolation.pxd +13 -0
  77. sage/calculus/interpolation.pyx +387 -0
  78. sage/calculus/interpolators.cpython-314-aarch64-linux-musl.so +0 -0
  79. sage/calculus/interpolators.pyx +326 -0
  80. sage/calculus/ode.cpython-314-aarch64-linux-musl.so +0 -0
  81. sage/calculus/ode.pxd +5 -0
  82. sage/calculus/ode.pyx +610 -0
  83. sage/calculus/riemann.cpython-314-aarch64-linux-musl.so +0 -0
  84. sage/calculus/riemann.pyx +1521 -0
  85. sage/calculus/test_sympy.py +201 -0
  86. sage/calculus/transforms/all.py +7 -0
  87. sage/calculus/transforms/dft.py +844 -0
  88. sage/calculus/transforms/dwt.cpython-314-aarch64-linux-musl.so +0 -0
  89. sage/calculus/transforms/dwt.pxd +7 -0
  90. sage/calculus/transforms/dwt.pyx +160 -0
  91. sage/calculus/transforms/fft.cpython-314-aarch64-linux-musl.so +0 -0
  92. sage/calculus/transforms/fft.pxd +12 -0
  93. sage/calculus/transforms/fft.pyx +487 -0
  94. sage/calculus/wester.py +662 -0
  95. sage/coding/abstract_code.py +1108 -0
  96. sage/coding/ag_code.py +868 -0
  97. sage/coding/ag_code_decoders.cpython-314-aarch64-linux-musl.so +0 -0
  98. sage/coding/ag_code_decoders.pyx +2639 -0
  99. sage/coding/all.py +15 -0
  100. sage/coding/bch_code.py +494 -0
  101. sage/coding/binary_code.cpython-314-aarch64-linux-musl.so +0 -0
  102. sage/coding/binary_code.pxd +124 -0
  103. sage/coding/binary_code.pyx +4139 -0
  104. sage/coding/bounds_catalog.py +43 -0
  105. sage/coding/channel.py +819 -0
  106. sage/coding/channels_catalog.py +29 -0
  107. sage/coding/code_bounds.py +755 -0
  108. sage/coding/code_constructions.py +804 -0
  109. sage/coding/codes_catalog.py +111 -0
  110. sage/coding/cyclic_code.py +1329 -0
  111. sage/coding/databases.py +316 -0
  112. sage/coding/decoder.py +373 -0
  113. sage/coding/decoders_catalog.py +88 -0
  114. sage/coding/delsarte_bounds.py +709 -0
  115. sage/coding/encoder.py +390 -0
  116. sage/coding/encoders_catalog.py +64 -0
  117. sage/coding/extended_code.py +468 -0
  118. sage/coding/gabidulin_code.py +1058 -0
  119. sage/coding/golay_code.py +404 -0
  120. sage/coding/goppa_code.py +441 -0
  121. sage/coding/grs_code.py +2371 -0
  122. sage/coding/guava.py +107 -0
  123. sage/coding/guruswami_sudan/all.py +1 -0
  124. sage/coding/guruswami_sudan/gs_decoder.py +897 -0
  125. sage/coding/guruswami_sudan/interpolation.py +409 -0
  126. sage/coding/guruswami_sudan/utils.py +176 -0
  127. sage/coding/hamming_code.py +176 -0
  128. sage/coding/information_set_decoder.py +1032 -0
  129. sage/coding/kasami_codes.cpython-314-aarch64-linux-musl.so +0 -0
  130. sage/coding/kasami_codes.pyx +351 -0
  131. sage/coding/linear_code.py +3067 -0
  132. sage/coding/linear_code_no_metric.py +1354 -0
  133. sage/coding/linear_rank_metric.py +961 -0
  134. sage/coding/parity_check_code.py +353 -0
  135. sage/coding/punctured_code.py +719 -0
  136. sage/coding/reed_muller_code.py +999 -0
  137. sage/coding/self_dual_codes.py +942 -0
  138. sage/coding/source_coding/all.py +2 -0
  139. sage/coding/source_coding/huffman.py +553 -0
  140. sage/coding/subfield_subcode.py +423 -0
  141. sage/coding/two_weight_db.py +399 -0
  142. sage/combinat/all__sagemath_modules.py +7 -0
  143. sage/combinat/cartesian_product.py +347 -0
  144. sage/combinat/family.py +11 -0
  145. sage/combinat/free_module.py +1977 -0
  146. sage/combinat/root_system/all.py +147 -0
  147. sage/combinat/root_system/ambient_space.py +527 -0
  148. sage/combinat/root_system/associahedron.py +471 -0
  149. sage/combinat/root_system/braid_move_calculator.py +143 -0
  150. sage/combinat/root_system/braid_orbit.cpython-314-aarch64-linux-musl.so +0 -0
  151. sage/combinat/root_system/braid_orbit.pyx +144 -0
  152. sage/combinat/root_system/branching_rules.py +2301 -0
  153. sage/combinat/root_system/cartan_matrix.py +1245 -0
  154. sage/combinat/root_system/cartan_type.py +3069 -0
  155. sage/combinat/root_system/coxeter_group.py +162 -0
  156. sage/combinat/root_system/coxeter_matrix.py +1261 -0
  157. sage/combinat/root_system/coxeter_type.py +681 -0
  158. sage/combinat/root_system/dynkin_diagram.py +900 -0
  159. sage/combinat/root_system/extended_affine_weyl_group.py +2993 -0
  160. sage/combinat/root_system/fundamental_group.py +795 -0
  161. sage/combinat/root_system/hecke_algebra_representation.py +1203 -0
  162. sage/combinat/root_system/integrable_representations.py +1227 -0
  163. sage/combinat/root_system/non_symmetric_macdonald_polynomials.py +1965 -0
  164. sage/combinat/root_system/pieri_factors.py +1147 -0
  165. sage/combinat/root_system/plot.py +1615 -0
  166. sage/combinat/root_system/root_lattice_realization_algebras.py +1214 -0
  167. sage/combinat/root_system/root_lattice_realizations.py +4628 -0
  168. sage/combinat/root_system/root_space.py +487 -0
  169. sage/combinat/root_system/root_system.py +882 -0
  170. sage/combinat/root_system/type_A.py +348 -0
  171. sage/combinat/root_system/type_A_affine.py +227 -0
  172. sage/combinat/root_system/type_A_infinity.py +241 -0
  173. sage/combinat/root_system/type_B.py +347 -0
  174. sage/combinat/root_system/type_BC_affine.py +287 -0
  175. sage/combinat/root_system/type_B_affine.py +216 -0
  176. sage/combinat/root_system/type_C.py +317 -0
  177. sage/combinat/root_system/type_C_affine.py +188 -0
  178. sage/combinat/root_system/type_D.py +357 -0
  179. sage/combinat/root_system/type_D_affine.py +208 -0
  180. sage/combinat/root_system/type_E.py +641 -0
  181. sage/combinat/root_system/type_E_affine.py +231 -0
  182. sage/combinat/root_system/type_F.py +387 -0
  183. sage/combinat/root_system/type_F_affine.py +137 -0
  184. sage/combinat/root_system/type_G.py +293 -0
  185. sage/combinat/root_system/type_G_affine.py +132 -0
  186. sage/combinat/root_system/type_H.py +105 -0
  187. sage/combinat/root_system/type_I.py +110 -0
  188. sage/combinat/root_system/type_Q.py +150 -0
  189. sage/combinat/root_system/type_affine.py +509 -0
  190. sage/combinat/root_system/type_dual.py +704 -0
  191. sage/combinat/root_system/type_folded.py +301 -0
  192. sage/combinat/root_system/type_marked.py +748 -0
  193. sage/combinat/root_system/type_reducible.py +601 -0
  194. sage/combinat/root_system/type_relabel.py +730 -0
  195. sage/combinat/root_system/type_super_A.py +837 -0
  196. sage/combinat/root_system/weight_lattice_realizations.py +1188 -0
  197. sage/combinat/root_system/weight_space.py +639 -0
  198. sage/combinat/root_system/weyl_characters.py +2238 -0
  199. sage/crypto/__init__.py +4 -0
  200. sage/crypto/all.py +28 -0
  201. sage/crypto/block_cipher/all.py +7 -0
  202. sage/crypto/block_cipher/des.py +1065 -0
  203. sage/crypto/block_cipher/miniaes.py +2171 -0
  204. sage/crypto/block_cipher/present.py +909 -0
  205. sage/crypto/block_cipher/sdes.py +1527 -0
  206. sage/crypto/boolean_function.cpython-314-aarch64-linux-musl.so +0 -0
  207. sage/crypto/boolean_function.pxd +10 -0
  208. sage/crypto/boolean_function.pyx +1487 -0
  209. sage/crypto/cipher.py +78 -0
  210. sage/crypto/classical.py +3668 -0
  211. sage/crypto/classical_cipher.py +569 -0
  212. sage/crypto/cryptosystem.py +387 -0
  213. sage/crypto/key_exchange/all.py +7 -0
  214. sage/crypto/key_exchange/catalog.py +24 -0
  215. sage/crypto/key_exchange/diffie_hellman.py +323 -0
  216. sage/crypto/key_exchange/key_exchange_scheme.py +107 -0
  217. sage/crypto/lattice.py +312 -0
  218. sage/crypto/lfsr.py +295 -0
  219. sage/crypto/lwe.py +840 -0
  220. sage/crypto/mq/__init__.py +4 -0
  221. sage/crypto/mq/mpolynomialsystemgenerator.py +204 -0
  222. sage/crypto/mq/rijndael_gf.py +2345 -0
  223. sage/crypto/mq/sbox.py +7 -0
  224. sage/crypto/mq/sr.py +3344 -0
  225. sage/crypto/public_key/all.py +5 -0
  226. sage/crypto/public_key/blum_goldwasser.py +776 -0
  227. sage/crypto/sbox.cpython-314-aarch64-linux-musl.so +0 -0
  228. sage/crypto/sbox.pyx +2090 -0
  229. sage/crypto/sboxes.py +2090 -0
  230. sage/crypto/stream.py +390 -0
  231. sage/crypto/stream_cipher.py +297 -0
  232. sage/crypto/util.py +519 -0
  233. sage/ext/all__sagemath_modules.py +1 -0
  234. sage/ext/interpreters/__init__.py +1 -0
  235. sage/ext/interpreters/all__sagemath_modules.py +2 -0
  236. sage/ext/interpreters/wrapper_cc.cpython-314-aarch64-linux-musl.so +0 -0
  237. sage/ext/interpreters/wrapper_cc.pxd +30 -0
  238. sage/ext/interpreters/wrapper_cc.pyx +252 -0
  239. sage/ext/interpreters/wrapper_cdf.cpython-314-aarch64-linux-musl.so +0 -0
  240. sage/ext/interpreters/wrapper_cdf.pxd +26 -0
  241. sage/ext/interpreters/wrapper_cdf.pyx +245 -0
  242. sage/ext/interpreters/wrapper_rdf.cpython-314-aarch64-linux-musl.so +0 -0
  243. sage/ext/interpreters/wrapper_rdf.pxd +23 -0
  244. sage/ext/interpreters/wrapper_rdf.pyx +221 -0
  245. sage/ext/interpreters/wrapper_rr.cpython-314-aarch64-linux-musl.so +0 -0
  246. sage/ext/interpreters/wrapper_rr.pxd +28 -0
  247. sage/ext/interpreters/wrapper_rr.pyx +335 -0
  248. sage/geometry/all__sagemath_modules.py +5 -0
  249. sage/geometry/toric_lattice.py +1745 -0
  250. sage/geometry/toric_lattice_element.cpython-314-aarch64-linux-musl.so +0 -0
  251. sage/geometry/toric_lattice_element.pyx +432 -0
  252. sage/groups/abelian_gps/abelian_group.py +1925 -0
  253. sage/groups/abelian_gps/abelian_group_element.py +164 -0
  254. sage/groups/abelian_gps/all__sagemath_modules.py +5 -0
  255. sage/groups/abelian_gps/dual_abelian_group.py +421 -0
  256. sage/groups/abelian_gps/dual_abelian_group_element.py +179 -0
  257. sage/groups/abelian_gps/element_base.py +341 -0
  258. sage/groups/abelian_gps/values.py +488 -0
  259. sage/groups/additive_abelian/additive_abelian_group.py +476 -0
  260. sage/groups/additive_abelian/additive_abelian_wrapper.py +857 -0
  261. sage/groups/additive_abelian/all.py +4 -0
  262. sage/groups/additive_abelian/qmodnz.py +231 -0
  263. sage/groups/additive_abelian/qmodnz_element.py +349 -0
  264. sage/groups/affine_gps/affine_group.py +535 -0
  265. sage/groups/affine_gps/all.py +1 -0
  266. sage/groups/affine_gps/catalog.py +17 -0
  267. sage/groups/affine_gps/euclidean_group.py +246 -0
  268. sage/groups/affine_gps/group_element.py +562 -0
  269. sage/groups/all__sagemath_modules.py +12 -0
  270. sage/groups/galois_group.py +479 -0
  271. sage/groups/matrix_gps/all.py +4 -0
  272. sage/groups/matrix_gps/all__sagemath_modules.py +13 -0
  273. sage/groups/matrix_gps/catalog.py +26 -0
  274. sage/groups/matrix_gps/coxeter_group.py +927 -0
  275. sage/groups/matrix_gps/finitely_generated.py +487 -0
  276. sage/groups/matrix_gps/group_element.cpython-314-aarch64-linux-musl.so +0 -0
  277. sage/groups/matrix_gps/group_element.pxd +11 -0
  278. sage/groups/matrix_gps/group_element.pyx +431 -0
  279. sage/groups/matrix_gps/linear.py +440 -0
  280. sage/groups/matrix_gps/matrix_group.py +617 -0
  281. sage/groups/matrix_gps/named_group.py +296 -0
  282. sage/groups/matrix_gps/orthogonal.py +544 -0
  283. sage/groups/matrix_gps/symplectic.py +251 -0
  284. sage/groups/matrix_gps/unitary.py +436 -0
  285. sage/groups/misc_gps/all__sagemath_modules.py +1 -0
  286. sage/groups/misc_gps/argument_groups.py +1905 -0
  287. sage/groups/misc_gps/imaginary_groups.py +479 -0
  288. sage/groups/perm_gps/all__sagemath_modules.py +1 -0
  289. sage/groups/perm_gps/partn_ref/all__sagemath_modules.py +1 -0
  290. sage/groups/perm_gps/partn_ref/refinement_binary.cpython-314-aarch64-linux-musl.so +0 -0
  291. sage/groups/perm_gps/partn_ref/refinement_binary.pxd +41 -0
  292. sage/groups/perm_gps/partn_ref/refinement_binary.pyx +1167 -0
  293. sage/groups/perm_gps/partn_ref/refinement_matrices.cpython-314-aarch64-linux-musl.so +0 -0
  294. sage/groups/perm_gps/partn_ref/refinement_matrices.pxd +31 -0
  295. sage/groups/perm_gps/partn_ref/refinement_matrices.pyx +385 -0
  296. sage/homology/algebraic_topological_model.py +595 -0
  297. sage/homology/all.py +2 -0
  298. sage/homology/all__sagemath_modules.py +8 -0
  299. sage/homology/chain_complex.py +2148 -0
  300. sage/homology/chain_complex_homspace.py +165 -0
  301. sage/homology/chain_complex_morphism.py +629 -0
  302. sage/homology/chain_homotopy.py +604 -0
  303. sage/homology/chains.py +653 -0
  304. sage/homology/free_resolution.py +923 -0
  305. sage/homology/graded_resolution.py +567 -0
  306. sage/homology/hochschild_complex.py +756 -0
  307. sage/homology/homology_group.py +188 -0
  308. sage/homology/homology_morphism.py +422 -0
  309. sage/homology/homology_vector_space_with_basis.py +1454 -0
  310. sage/homology/koszul_complex.py +169 -0
  311. sage/homology/matrix_utils.py +205 -0
  312. sage/libs/all__sagemath_modules.py +1 -0
  313. sage/libs/gsl/__init__.py +1 -0
  314. sage/libs/gsl/airy.pxd +56 -0
  315. sage/libs/gsl/all.pxd +66 -0
  316. sage/libs/gsl/array.cpython-314-aarch64-linux-musl.so +0 -0
  317. sage/libs/gsl/array.pxd +5 -0
  318. sage/libs/gsl/array.pyx +102 -0
  319. sage/libs/gsl/bessel.pxd +208 -0
  320. sage/libs/gsl/blas.pxd +116 -0
  321. sage/libs/gsl/blas_types.pxd +34 -0
  322. sage/libs/gsl/block.pxd +52 -0
  323. sage/libs/gsl/chebyshev.pxd +37 -0
  324. sage/libs/gsl/clausen.pxd +12 -0
  325. sage/libs/gsl/combination.pxd +47 -0
  326. sage/libs/gsl/complex.pxd +151 -0
  327. sage/libs/gsl/coulomb.pxd +30 -0
  328. sage/libs/gsl/coupling.pxd +21 -0
  329. sage/libs/gsl/dawson.pxd +12 -0
  330. sage/libs/gsl/debye.pxd +24 -0
  331. sage/libs/gsl/dilog.pxd +14 -0
  332. sage/libs/gsl/eigen.pxd +46 -0
  333. sage/libs/gsl/elementary.pxd +12 -0
  334. sage/libs/gsl/ellint.pxd +48 -0
  335. sage/libs/gsl/elljac.pxd +8 -0
  336. sage/libs/gsl/erf.pxd +32 -0
  337. sage/libs/gsl/errno.pxd +26 -0
  338. sage/libs/gsl/exp.pxd +44 -0
  339. sage/libs/gsl/expint.pxd +44 -0
  340. sage/libs/gsl/fermi_dirac.pxd +44 -0
  341. sage/libs/gsl/fft.pxd +121 -0
  342. sage/libs/gsl/fit.pxd +50 -0
  343. sage/libs/gsl/gamma.pxd +94 -0
  344. sage/libs/gsl/gegenbauer.pxd +26 -0
  345. sage/libs/gsl/histogram.pxd +176 -0
  346. sage/libs/gsl/hyperg.pxd +52 -0
  347. sage/libs/gsl/integration.pxd +69 -0
  348. sage/libs/gsl/interp.pxd +109 -0
  349. sage/libs/gsl/laguerre.pxd +24 -0
  350. sage/libs/gsl/lambert.pxd +16 -0
  351. sage/libs/gsl/legendre.pxd +90 -0
  352. sage/libs/gsl/linalg.pxd +185 -0
  353. sage/libs/gsl/log.pxd +26 -0
  354. sage/libs/gsl/math.pxd +43 -0
  355. sage/libs/gsl/matrix.pxd +143 -0
  356. sage/libs/gsl/matrix_complex.pxd +130 -0
  357. sage/libs/gsl/min.pxd +67 -0
  358. sage/libs/gsl/monte.pxd +56 -0
  359. sage/libs/gsl/ntuple.pxd +32 -0
  360. sage/libs/gsl/odeiv.pxd +70 -0
  361. sage/libs/gsl/permutation.pxd +78 -0
  362. sage/libs/gsl/poly.pxd +40 -0
  363. sage/libs/gsl/pow_int.pxd +12 -0
  364. sage/libs/gsl/psi.pxd +28 -0
  365. sage/libs/gsl/qrng.pxd +29 -0
  366. sage/libs/gsl/random.pxd +257 -0
  367. sage/libs/gsl/rng.pxd +100 -0
  368. sage/libs/gsl/roots.pxd +72 -0
  369. sage/libs/gsl/sort.pxd +36 -0
  370. sage/libs/gsl/statistics.pxd +59 -0
  371. sage/libs/gsl/sum.pxd +55 -0
  372. sage/libs/gsl/synchrotron.pxd +16 -0
  373. sage/libs/gsl/transport.pxd +24 -0
  374. sage/libs/gsl/trig.pxd +58 -0
  375. sage/libs/gsl/types.pxd +137 -0
  376. sage/libs/gsl/vector.pxd +101 -0
  377. sage/libs/gsl/vector_complex.pxd +83 -0
  378. sage/libs/gsl/wavelet.pxd +49 -0
  379. sage/libs/gsl/zeta.pxd +28 -0
  380. sage/libs/mpc/__init__.pxd +114 -0
  381. sage/libs/mpc/types.pxd +28 -0
  382. sage/libs/mpfr/__init__.pxd +299 -0
  383. sage/libs/mpfr/types.pxd +26 -0
  384. sage/libs/mpmath/__init__.py +1 -0
  385. sage/libs/mpmath/all.py +27 -0
  386. sage/libs/mpmath/all__sagemath_modules.py +1 -0
  387. sage/libs/mpmath/utils.cpython-314-aarch64-linux-musl.so +0 -0
  388. sage/libs/mpmath/utils.pxd +4 -0
  389. sage/libs/mpmath/utils.pyx +319 -0
  390. sage/matrix/action.cpython-314-aarch64-linux-musl.so +0 -0
  391. sage/matrix/action.pxd +26 -0
  392. sage/matrix/action.pyx +596 -0
  393. sage/matrix/all.py +9 -0
  394. sage/matrix/args.cpython-314-aarch64-linux-musl.so +0 -0
  395. sage/matrix/args.pxd +144 -0
  396. sage/matrix/args.pyx +1668 -0
  397. sage/matrix/benchmark.py +1258 -0
  398. sage/matrix/berlekamp_massey.py +95 -0
  399. sage/matrix/compute_J_ideal.py +926 -0
  400. sage/matrix/constructor.cpython-314-aarch64-linux-musl.so +0 -0
  401. sage/matrix/constructor.pyx +750 -0
  402. sage/matrix/docs.py +430 -0
  403. sage/matrix/echelon_matrix.cpython-314-aarch64-linux-musl.so +0 -0
  404. sage/matrix/echelon_matrix.pyx +155 -0
  405. sage/matrix/matrix.pxd +2 -0
  406. sage/matrix/matrix0.cpython-314-aarch64-linux-musl.so +0 -0
  407. sage/matrix/matrix0.pxd +68 -0
  408. sage/matrix/matrix0.pyx +6324 -0
  409. sage/matrix/matrix1.cpython-314-aarch64-linux-musl.so +0 -0
  410. sage/matrix/matrix1.pxd +8 -0
  411. sage/matrix/matrix1.pyx +2851 -0
  412. sage/matrix/matrix2.cpython-314-aarch64-linux-musl.so +0 -0
  413. sage/matrix/matrix2.pxd +25 -0
  414. sage/matrix/matrix2.pyx +20181 -0
  415. sage/matrix/matrix_cdv.cpython-314-aarch64-linux-musl.so +0 -0
  416. sage/matrix/matrix_cdv.pxd +4 -0
  417. sage/matrix/matrix_cdv.pyx +93 -0
  418. sage/matrix/matrix_complex_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
  419. sage/matrix/matrix_complex_double_dense.pxd +5 -0
  420. sage/matrix/matrix_complex_double_dense.pyx +98 -0
  421. sage/matrix/matrix_dense.cpython-314-aarch64-linux-musl.so +0 -0
  422. sage/matrix/matrix_dense.pxd +5 -0
  423. sage/matrix/matrix_dense.pyx +343 -0
  424. sage/matrix/matrix_domain_dense.pxd +5 -0
  425. sage/matrix/matrix_domain_sparse.pxd +5 -0
  426. sage/matrix/matrix_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
  427. sage/matrix/matrix_double_dense.pxd +7 -0
  428. sage/matrix/matrix_double_dense.pyx +3906 -0
  429. sage/matrix/matrix_double_sparse.cpython-314-aarch64-linux-musl.so +0 -0
  430. sage/matrix/matrix_double_sparse.pxd +6 -0
  431. sage/matrix/matrix_double_sparse.pyx +248 -0
  432. sage/matrix/matrix_generic_dense.cpython-314-aarch64-linux-musl.so +0 -0
  433. sage/matrix/matrix_generic_dense.pxd +7 -0
  434. sage/matrix/matrix_generic_dense.pyx +354 -0
  435. sage/matrix/matrix_generic_sparse.cpython-314-aarch64-linux-musl.so +0 -0
  436. sage/matrix/matrix_generic_sparse.pxd +7 -0
  437. sage/matrix/matrix_generic_sparse.pyx +461 -0
  438. sage/matrix/matrix_laurent_mpolynomial_dense.cpython-314-aarch64-linux-musl.so +0 -0
  439. sage/matrix/matrix_laurent_mpolynomial_dense.pxd +5 -0
  440. sage/matrix/matrix_laurent_mpolynomial_dense.pyx +115 -0
  441. sage/matrix/matrix_misc.py +313 -0
  442. sage/matrix/matrix_numpy_dense.cpython-314-aarch64-linux-musl.so +0 -0
  443. sage/matrix/matrix_numpy_dense.pxd +14 -0
  444. sage/matrix/matrix_numpy_dense.pyx +450 -0
  445. sage/matrix/matrix_numpy_integer_dense.cpython-314-aarch64-linux-musl.so +0 -0
  446. sage/matrix/matrix_numpy_integer_dense.pxd +7 -0
  447. sage/matrix/matrix_numpy_integer_dense.pyx +59 -0
  448. sage/matrix/matrix_polynomial_dense.cpython-314-aarch64-linux-musl.so +0 -0
  449. sage/matrix/matrix_polynomial_dense.pxd +5 -0
  450. sage/matrix/matrix_polynomial_dense.pyx +5341 -0
  451. sage/matrix/matrix_real_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
  452. sage/matrix/matrix_real_double_dense.pxd +7 -0
  453. sage/matrix/matrix_real_double_dense.pyx +122 -0
  454. sage/matrix/matrix_space.py +2848 -0
  455. sage/matrix/matrix_sparse.cpython-314-aarch64-linux-musl.so +0 -0
  456. sage/matrix/matrix_sparse.pxd +5 -0
  457. sage/matrix/matrix_sparse.pyx +1222 -0
  458. sage/matrix/matrix_window.cpython-314-aarch64-linux-musl.so +0 -0
  459. sage/matrix/matrix_window.pxd +37 -0
  460. sage/matrix/matrix_window.pyx +242 -0
  461. sage/matrix/misc_mpfr.cpython-314-aarch64-linux-musl.so +0 -0
  462. sage/matrix/misc_mpfr.pyx +80 -0
  463. sage/matrix/operation_table.py +1182 -0
  464. sage/matrix/special.py +3666 -0
  465. sage/matrix/strassen.cpython-314-aarch64-linux-musl.so +0 -0
  466. sage/matrix/strassen.pyx +851 -0
  467. sage/matrix/symplectic_basis.py +541 -0
  468. sage/matrix/template.pxd +6 -0
  469. sage/matrix/tests.py +71 -0
  470. sage/matroids/advanced.py +77 -0
  471. sage/matroids/all.py +13 -0
  472. sage/matroids/basis_exchange_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  473. sage/matroids/basis_exchange_matroid.pxd +96 -0
  474. sage/matroids/basis_exchange_matroid.pyx +2344 -0
  475. sage/matroids/basis_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  476. sage/matroids/basis_matroid.pxd +45 -0
  477. sage/matroids/basis_matroid.pyx +1217 -0
  478. sage/matroids/catalog.py +44 -0
  479. sage/matroids/chow_ring.py +473 -0
  480. sage/matroids/chow_ring_ideal.py +849 -0
  481. sage/matroids/circuit_closures_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  482. sage/matroids/circuit_closures_matroid.pxd +16 -0
  483. sage/matroids/circuit_closures_matroid.pyx +559 -0
  484. sage/matroids/circuits_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  485. sage/matroids/circuits_matroid.pxd +38 -0
  486. sage/matroids/circuits_matroid.pyx +947 -0
  487. sage/matroids/constructor.py +1086 -0
  488. sage/matroids/database_collections.py +365 -0
  489. sage/matroids/database_matroids.py +5338 -0
  490. sage/matroids/dual_matroid.py +583 -0
  491. sage/matroids/extension.cpython-314-aarch64-linux-musl.so +0 -0
  492. sage/matroids/extension.pxd +34 -0
  493. sage/matroids/extension.pyx +519 -0
  494. sage/matroids/flats_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  495. sage/matroids/flats_matroid.pxd +28 -0
  496. sage/matroids/flats_matroid.pyx +715 -0
  497. sage/matroids/gammoid.py +600 -0
  498. sage/matroids/graphic_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  499. sage/matroids/graphic_matroid.pxd +39 -0
  500. sage/matroids/graphic_matroid.pyx +2024 -0
  501. sage/matroids/lean_matrix.cpython-314-aarch64-linux-musl.so +0 -0
  502. sage/matroids/lean_matrix.pxd +126 -0
  503. sage/matroids/lean_matrix.pyx +3667 -0
  504. sage/matroids/linear_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  505. sage/matroids/linear_matroid.pxd +180 -0
  506. sage/matroids/linear_matroid.pyx +6649 -0
  507. sage/matroids/matroid.cpython-314-aarch64-linux-musl.so +0 -0
  508. sage/matroids/matroid.pxd +243 -0
  509. sage/matroids/matroid.pyx +8759 -0
  510. sage/matroids/matroids_catalog.py +190 -0
  511. sage/matroids/matroids_plot_helpers.py +890 -0
  512. sage/matroids/minor_matroid.py +480 -0
  513. sage/matroids/minorfix.h +9 -0
  514. sage/matroids/named_matroids.py +5 -0
  515. sage/matroids/rank_matroid.py +268 -0
  516. sage/matroids/set_system.cpython-314-aarch64-linux-musl.so +0 -0
  517. sage/matroids/set_system.pxd +38 -0
  518. sage/matroids/set_system.pyx +800 -0
  519. sage/matroids/transversal_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  520. sage/matroids/transversal_matroid.pxd +14 -0
  521. sage/matroids/transversal_matroid.pyx +893 -0
  522. sage/matroids/union_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  523. sage/matroids/union_matroid.pxd +20 -0
  524. sage/matroids/union_matroid.pyx +331 -0
  525. sage/matroids/unpickling.cpython-314-aarch64-linux-musl.so +0 -0
  526. sage/matroids/unpickling.pyx +843 -0
  527. sage/matroids/utilities.py +809 -0
  528. sage/misc/all__sagemath_modules.py +20 -0
  529. sage/misc/c3.cpython-314-aarch64-linux-musl.so +0 -0
  530. sage/misc/c3.pyx +238 -0
  531. sage/misc/compat.py +87 -0
  532. sage/misc/element_with_label.py +173 -0
  533. sage/misc/func_persist.py +79 -0
  534. sage/misc/pickle_old.cpython-314-aarch64-linux-musl.so +0 -0
  535. sage/misc/pickle_old.pyx +19 -0
  536. sage/misc/proof.py +7 -0
  537. sage/misc/replace_dot_all.py +472 -0
  538. sage/misc/sagedoc_conf.py +168 -0
  539. sage/misc/sphinxify.py +167 -0
  540. sage/misc/test_class_pickling.py +85 -0
  541. sage/modules/all.py +42 -0
  542. sage/modules/complex_double_vector.py +25 -0
  543. sage/modules/diamond_cutting.py +380 -0
  544. sage/modules/fg_pid/all.py +1 -0
  545. sage/modules/fg_pid/fgp_element.py +456 -0
  546. sage/modules/fg_pid/fgp_module.py +2091 -0
  547. sage/modules/fg_pid/fgp_morphism.py +550 -0
  548. sage/modules/filtered_vector_space.py +1271 -0
  549. sage/modules/finite_submodule_iter.cpython-314-aarch64-linux-musl.so +0 -0
  550. sage/modules/finite_submodule_iter.pxd +27 -0
  551. sage/modules/finite_submodule_iter.pyx +452 -0
  552. sage/modules/fp_graded/all.py +1 -0
  553. sage/modules/fp_graded/element.py +346 -0
  554. sage/modules/fp_graded/free_element.py +298 -0
  555. sage/modules/fp_graded/free_homspace.py +53 -0
  556. sage/modules/fp_graded/free_module.py +1060 -0
  557. sage/modules/fp_graded/free_morphism.py +217 -0
  558. sage/modules/fp_graded/homspace.py +563 -0
  559. sage/modules/fp_graded/module.py +1340 -0
  560. sage/modules/fp_graded/morphism.py +1990 -0
  561. sage/modules/fp_graded/steenrod/all.py +1 -0
  562. sage/modules/fp_graded/steenrod/homspace.py +65 -0
  563. sage/modules/fp_graded/steenrod/module.py +477 -0
  564. sage/modules/fp_graded/steenrod/morphism.py +404 -0
  565. sage/modules/fp_graded/steenrod/profile.py +241 -0
  566. sage/modules/free_module.py +8447 -0
  567. sage/modules/free_module_element.cpython-314-aarch64-linux-musl.so +0 -0
  568. sage/modules/free_module_element.pxd +22 -0
  569. sage/modules/free_module_element.pyx +5445 -0
  570. sage/modules/free_module_homspace.py +369 -0
  571. sage/modules/free_module_integer.py +896 -0
  572. sage/modules/free_module_morphism.py +823 -0
  573. sage/modules/free_module_pseudohomspace.py +352 -0
  574. sage/modules/free_module_pseudomorphism.py +578 -0
  575. sage/modules/free_quadratic_module.py +1706 -0
  576. sage/modules/free_quadratic_module_integer_symmetric.py +1790 -0
  577. sage/modules/matrix_morphism.py +1745 -0
  578. sage/modules/misc.py +103 -0
  579. sage/modules/module_functors.py +192 -0
  580. sage/modules/multi_filtered_vector_space.py +719 -0
  581. sage/modules/ore_module.py +2208 -0
  582. sage/modules/ore_module_element.py +178 -0
  583. sage/modules/ore_module_homspace.py +147 -0
  584. sage/modules/ore_module_morphism.py +968 -0
  585. sage/modules/quotient_module.py +699 -0
  586. sage/modules/real_double_vector.py +22 -0
  587. sage/modules/submodule.py +255 -0
  588. sage/modules/tensor_operations.py +567 -0
  589. sage/modules/torsion_quadratic_module.py +1352 -0
  590. sage/modules/tutorial_free_modules.py +248 -0
  591. sage/modules/vector_complex_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
  592. sage/modules/vector_complex_double_dense.pxd +6 -0
  593. sage/modules/vector_complex_double_dense.pyx +117 -0
  594. sage/modules/vector_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
  595. sage/modules/vector_double_dense.pxd +6 -0
  596. sage/modules/vector_double_dense.pyx +604 -0
  597. sage/modules/vector_integer_dense.cpython-314-aarch64-linux-musl.so +0 -0
  598. sage/modules/vector_integer_dense.pxd +15 -0
  599. sage/modules/vector_integer_dense.pyx +361 -0
  600. sage/modules/vector_integer_sparse.cpython-314-aarch64-linux-musl.so +0 -0
  601. sage/modules/vector_integer_sparse.pxd +29 -0
  602. sage/modules/vector_integer_sparse.pyx +406 -0
  603. sage/modules/vector_modn_dense.cpython-314-aarch64-linux-musl.so +0 -0
  604. sage/modules/vector_modn_dense.pxd +12 -0
  605. sage/modules/vector_modn_dense.pyx +394 -0
  606. sage/modules/vector_modn_sparse.cpython-314-aarch64-linux-musl.so +0 -0
  607. sage/modules/vector_modn_sparse.pxd +21 -0
  608. sage/modules/vector_modn_sparse.pyx +298 -0
  609. sage/modules/vector_numpy_dense.cpython-314-aarch64-linux-musl.so +0 -0
  610. sage/modules/vector_numpy_dense.pxd +15 -0
  611. sage/modules/vector_numpy_dense.pyx +304 -0
  612. sage/modules/vector_numpy_integer_dense.cpython-314-aarch64-linux-musl.so +0 -0
  613. sage/modules/vector_numpy_integer_dense.pxd +7 -0
  614. sage/modules/vector_numpy_integer_dense.pyx +54 -0
  615. sage/modules/vector_rational_dense.cpython-314-aarch64-linux-musl.so +0 -0
  616. sage/modules/vector_rational_dense.pxd +15 -0
  617. sage/modules/vector_rational_dense.pyx +387 -0
  618. sage/modules/vector_rational_sparse.cpython-314-aarch64-linux-musl.so +0 -0
  619. sage/modules/vector_rational_sparse.pxd +30 -0
  620. sage/modules/vector_rational_sparse.pyx +413 -0
  621. sage/modules/vector_real_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
  622. sage/modules/vector_real_double_dense.pxd +6 -0
  623. sage/modules/vector_real_double_dense.pyx +126 -0
  624. sage/modules/vector_space_homspace.py +430 -0
  625. sage/modules/vector_space_morphism.py +989 -0
  626. sage/modules/with_basis/all.py +15 -0
  627. sage/modules/with_basis/cell_module.py +494 -0
  628. sage/modules/with_basis/indexed_element.cpython-314-aarch64-linux-musl.so +0 -0
  629. sage/modules/with_basis/indexed_element.pxd +13 -0
  630. sage/modules/with_basis/indexed_element.pyx +1058 -0
  631. sage/modules/with_basis/invariant.py +1075 -0
  632. sage/modules/with_basis/morphism.py +1636 -0
  633. sage/modules/with_basis/representation.py +2939 -0
  634. sage/modules/with_basis/subquotient.py +685 -0
  635. sage/numerical/all__sagemath_modules.py +6 -0
  636. sage/numerical/gauss_legendre.cpython-314-aarch64-linux-musl.so +0 -0
  637. sage/numerical/gauss_legendre.pyx +381 -0
  638. sage/numerical/optimize.py +910 -0
  639. sage/probability/all.py +10 -0
  640. sage/probability/probability_distribution.cpython-314-aarch64-linux-musl.so +0 -0
  641. sage/probability/probability_distribution.pyx +1242 -0
  642. sage/probability/random_variable.py +411 -0
  643. sage/quadratic_forms/all.py +4 -0
  644. sage/quadratic_forms/all__sagemath_modules.py +15 -0
  645. sage/quadratic_forms/binary_qf.py +2042 -0
  646. sage/quadratic_forms/bqf_class_group.py +748 -0
  647. sage/quadratic_forms/constructions.py +93 -0
  648. sage/quadratic_forms/count_local_2.cpython-314-aarch64-linux-musl.so +0 -0
  649. sage/quadratic_forms/count_local_2.pyx +365 -0
  650. sage/quadratic_forms/extras.py +195 -0
  651. sage/quadratic_forms/quadratic_form.py +1753 -0
  652. sage/quadratic_forms/quadratic_form__count_local_2.py +221 -0
  653. sage/quadratic_forms/quadratic_form__equivalence_testing.py +708 -0
  654. sage/quadratic_forms/quadratic_form__evaluate.cpython-314-aarch64-linux-musl.so +0 -0
  655. sage/quadratic_forms/quadratic_form__evaluate.pyx +139 -0
  656. sage/quadratic_forms/quadratic_form__local_density_congruence.py +977 -0
  657. sage/quadratic_forms/quadratic_form__local_field_invariants.py +1072 -0
  658. sage/quadratic_forms/quadratic_form__neighbors.py +424 -0
  659. sage/quadratic_forms/quadratic_form__reduction_theory.py +488 -0
  660. sage/quadratic_forms/quadratic_form__split_local_covering.py +416 -0
  661. sage/quadratic_forms/quadratic_form__ternary_Tornaria.py +657 -0
  662. sage/quadratic_forms/quadratic_form__theta.py +352 -0
  663. sage/quadratic_forms/quadratic_form__variable_substitutions.py +370 -0
  664. sage/quadratic_forms/random_quadraticform.py +209 -0
  665. sage/quadratic_forms/ternary.cpython-314-aarch64-linux-musl.so +0 -0
  666. sage/quadratic_forms/ternary.pyx +1154 -0
  667. sage/quadratic_forms/ternary_qf.py +2027 -0
  668. sage/rings/all__sagemath_modules.py +28 -0
  669. sage/rings/asymptotic/all__sagemath_modules.py +1 -0
  670. sage/rings/asymptotic/misc.py +1252 -0
  671. sage/rings/cc.py +4 -0
  672. sage/rings/cfinite_sequence.py +1306 -0
  673. sage/rings/complex_conversion.cpython-314-aarch64-linux-musl.so +0 -0
  674. sage/rings/complex_conversion.pxd +8 -0
  675. sage/rings/complex_conversion.pyx +23 -0
  676. sage/rings/complex_double.cpython-314-aarch64-linux-musl.so +0 -0
  677. sage/rings/complex_double.pxd +21 -0
  678. sage/rings/complex_double.pyx +2654 -0
  679. sage/rings/complex_mpc.cpython-314-aarch64-linux-musl.so +0 -0
  680. sage/rings/complex_mpc.pxd +21 -0
  681. sage/rings/complex_mpc.pyx +2576 -0
  682. sage/rings/complex_mpfr.cpython-314-aarch64-linux-musl.so +0 -0
  683. sage/rings/complex_mpfr.pxd +18 -0
  684. sage/rings/complex_mpfr.pyx +3602 -0
  685. sage/rings/derivation.py +2334 -0
  686. sage/rings/finite_rings/all__sagemath_modules.py +1 -0
  687. sage/rings/finite_rings/maps_finite_field.py +191 -0
  688. sage/rings/function_field/all__sagemath_modules.py +8 -0
  689. sage/rings/function_field/derivations.py +102 -0
  690. sage/rings/function_field/derivations_rational.py +132 -0
  691. sage/rings/function_field/differential.py +853 -0
  692. sage/rings/function_field/divisor.py +1107 -0
  693. sage/rings/function_field/drinfeld_modules/action.py +199 -0
  694. sage/rings/function_field/drinfeld_modules/all.py +1 -0
  695. sage/rings/function_field/drinfeld_modules/charzero_drinfeld_module.py +673 -0
  696. sage/rings/function_field/drinfeld_modules/drinfeld_module.py +2087 -0
  697. sage/rings/function_field/drinfeld_modules/finite_drinfeld_module.py +1131 -0
  698. sage/rings/function_field/drinfeld_modules/homset.py +420 -0
  699. sage/rings/function_field/drinfeld_modules/morphism.py +820 -0
  700. sage/rings/function_field/hermite_form_polynomial.cpython-314-aarch64-linux-musl.so +0 -0
  701. sage/rings/function_field/hermite_form_polynomial.pyx +188 -0
  702. sage/rings/function_field/khuri_makdisi.cpython-314-aarch64-linux-musl.so +0 -0
  703. sage/rings/function_field/khuri_makdisi.pyx +935 -0
  704. sage/rings/invariants/all.py +4 -0
  705. sage/rings/invariants/invariant_theory.py +4597 -0
  706. sage/rings/invariants/reconstruction.py +395 -0
  707. sage/rings/polynomial/all__sagemath_modules.py +17 -0
  708. sage/rings/polynomial/integer_valued_polynomials.py +1230 -0
  709. sage/rings/polynomial/laurent_polynomial_mpair.cpython-314-aarch64-linux-musl.so +0 -0
  710. sage/rings/polynomial/laurent_polynomial_mpair.pxd +15 -0
  711. sage/rings/polynomial/laurent_polynomial_mpair.pyx +2023 -0
  712. sage/rings/polynomial/ore_function_element.py +952 -0
  713. sage/rings/polynomial/ore_function_field.py +1028 -0
  714. sage/rings/polynomial/ore_polynomial_element.cpython-314-aarch64-linux-musl.so +0 -0
  715. sage/rings/polynomial/ore_polynomial_element.pxd +48 -0
  716. sage/rings/polynomial/ore_polynomial_element.pyx +3145 -0
  717. sage/rings/polynomial/ore_polynomial_ring.py +1334 -0
  718. sage/rings/polynomial/polynomial_real_mpfr_dense.cpython-314-aarch64-linux-musl.so +0 -0
  719. sage/rings/polynomial/polynomial_real_mpfr_dense.pyx +788 -0
  720. sage/rings/polynomial/q_integer_valued_polynomials.py +1264 -0
  721. sage/rings/polynomial/skew_polynomial_element.cpython-314-aarch64-linux-musl.so +0 -0
  722. sage/rings/polynomial/skew_polynomial_element.pxd +9 -0
  723. sage/rings/polynomial/skew_polynomial_element.pyx +684 -0
  724. sage/rings/polynomial/skew_polynomial_finite_field.cpython-314-aarch64-linux-musl.so +0 -0
  725. sage/rings/polynomial/skew_polynomial_finite_field.pxd +19 -0
  726. sage/rings/polynomial/skew_polynomial_finite_field.pyx +1093 -0
  727. sage/rings/polynomial/skew_polynomial_finite_order.cpython-314-aarch64-linux-musl.so +0 -0
  728. sage/rings/polynomial/skew_polynomial_finite_order.pxd +10 -0
  729. sage/rings/polynomial/skew_polynomial_finite_order.pyx +567 -0
  730. sage/rings/polynomial/skew_polynomial_ring.py +908 -0
  731. sage/rings/real_double_element_gsl.cpython-314-aarch64-linux-musl.so +0 -0
  732. sage/rings/real_double_element_gsl.pxd +8 -0
  733. sage/rings/real_double_element_gsl.pyx +794 -0
  734. sage/rings/real_field.py +58 -0
  735. sage/rings/real_mpfr.cpython-314-aarch64-linux-musl.so +0 -0
  736. sage/rings/real_mpfr.pxd +29 -0
  737. sage/rings/real_mpfr.pyx +6122 -0
  738. sage/rings/ring_extension.cpython-314-aarch64-linux-musl.so +0 -0
  739. sage/rings/ring_extension.pxd +42 -0
  740. sage/rings/ring_extension.pyx +2779 -0
  741. sage/rings/ring_extension_conversion.cpython-314-aarch64-linux-musl.so +0 -0
  742. sage/rings/ring_extension_conversion.pxd +16 -0
  743. sage/rings/ring_extension_conversion.pyx +462 -0
  744. sage/rings/ring_extension_element.cpython-314-aarch64-linux-musl.so +0 -0
  745. sage/rings/ring_extension_element.pxd +21 -0
  746. sage/rings/ring_extension_element.pyx +1635 -0
  747. sage/rings/ring_extension_homset.py +64 -0
  748. sage/rings/ring_extension_morphism.cpython-314-aarch64-linux-musl.so +0 -0
  749. sage/rings/ring_extension_morphism.pxd +35 -0
  750. sage/rings/ring_extension_morphism.pyx +920 -0
  751. sage/schemes/all__sagemath_modules.py +1 -0
  752. sage/schemes/projective/all__sagemath_modules.py +1 -0
  753. sage/schemes/projective/coherent_sheaf.py +300 -0
  754. sage/schemes/projective/cohomology.py +510 -0
  755. sage/stats/all.py +15 -0
  756. sage/stats/basic_stats.py +489 -0
  757. sage/stats/distributions/all.py +7 -0
  758. sage/stats/distributions/catalog.py +34 -0
  759. sage/stats/distributions/dgs.h +50 -0
  760. sage/stats/distributions/dgs.pxd +111 -0
  761. sage/stats/distributions/dgs_bern.h +400 -0
  762. sage/stats/distributions/dgs_gauss.h +614 -0
  763. sage/stats/distributions/dgs_misc.h +104 -0
  764. sage/stats/distributions/discrete_gaussian_integer.cpython-314-aarch64-linux-musl.so +0 -0
  765. sage/stats/distributions/discrete_gaussian_integer.pxd +14 -0
  766. sage/stats/distributions/discrete_gaussian_integer.pyx +498 -0
  767. sage/stats/distributions/discrete_gaussian_lattice.py +908 -0
  768. sage/stats/distributions/discrete_gaussian_polynomial.py +141 -0
  769. sage/stats/hmm/all.py +15 -0
  770. sage/stats/hmm/chmm.cpython-314-aarch64-linux-musl.so +0 -0
  771. sage/stats/hmm/chmm.pyx +1595 -0
  772. sage/stats/hmm/distributions.cpython-314-aarch64-linux-musl.so +0 -0
  773. sage/stats/hmm/distributions.pxd +29 -0
  774. sage/stats/hmm/distributions.pyx +531 -0
  775. sage/stats/hmm/hmm.cpython-314-aarch64-linux-musl.so +0 -0
  776. sage/stats/hmm/hmm.pxd +17 -0
  777. sage/stats/hmm/hmm.pyx +1388 -0
  778. sage/stats/hmm/util.cpython-314-aarch64-linux-musl.so +0 -0
  779. sage/stats/hmm/util.pxd +7 -0
  780. sage/stats/hmm/util.pyx +165 -0
  781. sage/stats/intlist.cpython-314-aarch64-linux-musl.so +0 -0
  782. sage/stats/intlist.pxd +14 -0
  783. sage/stats/intlist.pyx +588 -0
  784. sage/stats/r.py +49 -0
  785. sage/stats/time_series.cpython-314-aarch64-linux-musl.so +0 -0
  786. sage/stats/time_series.pxd +6 -0
  787. sage/stats/time_series.pyx +2546 -0
  788. sage/tensor/all.py +2 -0
  789. sage/tensor/modules/all.py +8 -0
  790. sage/tensor/modules/alternating_contr_tensor.py +761 -0
  791. sage/tensor/modules/comp.py +5598 -0
  792. sage/tensor/modules/ext_pow_free_module.py +824 -0
  793. sage/tensor/modules/finite_rank_free_module.py +3589 -0
  794. sage/tensor/modules/format_utilities.py +333 -0
  795. sage/tensor/modules/free_module_alt_form.py +858 -0
  796. sage/tensor/modules/free_module_automorphism.py +1207 -0
  797. sage/tensor/modules/free_module_basis.py +1074 -0
  798. sage/tensor/modules/free_module_element.py +284 -0
  799. sage/tensor/modules/free_module_homset.py +652 -0
  800. sage/tensor/modules/free_module_linear_group.py +564 -0
  801. sage/tensor/modules/free_module_morphism.py +1581 -0
  802. sage/tensor/modules/free_module_tensor.py +3289 -0
  803. sage/tensor/modules/reflexive_module.py +386 -0
  804. sage/tensor/modules/tensor_free_module.py +780 -0
  805. sage/tensor/modules/tensor_free_submodule.py +538 -0
  806. sage/tensor/modules/tensor_free_submodule_basis.py +140 -0
  807. sage/tensor/modules/tensor_with_indices.py +1043 -0
sage/crypto/stream.py ADDED
@@ -0,0 +1,390 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ # sage.doctest: needs sage.combinat sage.rings.finite_rings
3
+ """
4
+ Stream Cryptosystems
5
+ """
6
+
7
+ #*****************************************************************************
8
+ # Copyright (C) 2007 David Kohel <kohel@maths.usyd.edu.au>
9
+ #
10
+ # This program is free software: you can redistribute it and/or modify
11
+ # it under the terms of the GNU General Public License as published by
12
+ # the Free Software Foundation, either version 2 of the License, or
13
+ # (at your option) any later version.
14
+ # http://www.gnu.org/licenses/
15
+ #*****************************************************************************
16
+
17
+ from sage.arith.misc import gcd, power_mod
18
+ from sage.crypto.cryptosystem import SymmetricKeyCryptosystem
19
+ from sage.crypto.stream_cipher import LFSRCipher, ShrinkingGeneratorCipher
20
+ from sage.crypto.util import random_blum_prime
21
+ from sage.monoids.string_monoid import BinaryStrings
22
+ from sage.rings.finite_rings.finite_field_constructor import FiniteField
23
+ from sage.rings.finite_rings.integer_mod_ring import IntegerModFactory
24
+ from sage.rings.polynomial.polynomial_element import Polynomial
25
+
26
+
27
+ IntegerModRing = IntegerModFactory("IntegerModRing")
28
+
29
+
30
+ class LFSRCryptosystem(SymmetricKeyCryptosystem):
31
+ """
32
+ Linear feedback shift register cryptosystem class
33
+ """
34
+ def __init__(self, field=None):
35
+ """
36
+ Create a linear feedback shift cryptosystem.
37
+
38
+ INPUT:
39
+
40
+ - ``field`` -- (default: ``None``) string monoid over a binary alphabet
41
+
42
+ EXAMPLES::
43
+
44
+ sage: E = LFSRCryptosystem(FiniteField(2))
45
+ sage: E
46
+ LFSR cryptosystem over Finite Field of size 2
47
+
48
+ TESTS::
49
+
50
+ sage: E = LFSRCryptosystem(FiniteField(2))
51
+ sage: E == loads(dumps(E))
52
+ True
53
+
54
+ TODO: Implement LFSR cryptosystem for arbitrary rings. The current
55
+ implementation is limited to the finite field of 2 elements only
56
+ because of the dependence on binary strings.
57
+ """
58
+ if field is None:
59
+ field = FiniteField(2)
60
+ if field.cardinality() != 2:
61
+ raise NotImplementedError("Not yet implemented.")
62
+ S = BinaryStrings()
63
+ SymmetricKeyCryptosystem.__init__(self, S, S, None)
64
+ self._field = field
65
+
66
+ def __eq__(self, right):
67
+ return type(self) is type(right) and self._field == right._field
68
+
69
+ def __call__(self, key):
70
+ """
71
+ Create a LFSR cipher.
72
+
73
+ INPUT:
74
+
75
+ - ``key`` -- a polynomial and initial state of the LFSR
76
+ """
77
+ if not isinstance(key, (list, tuple)) and len(key) == 2:
78
+ raise TypeError("Argument key (= %s) must be a list of tuple of length 2" % key)
79
+ poly, IS = key
80
+ if not isinstance(poly, Polynomial):
81
+ raise TypeError("poly (= %s) must be a polynomial." % poly)
82
+ if not isinstance(IS, (list, tuple)):
83
+ raise TypeError("IS (= %s) must be an initial in the key space." % IS)
84
+ if len(IS) != poly.degree():
85
+ raise TypeError("The length of IS (= %s) must equal the degree of poly (= %s)" % (IS, poly))
86
+ return LFSRCipher(self, poly, IS)
87
+
88
+ def _repr_(self):
89
+ r"""
90
+ Return the string representation of this LFSR cryptosystem.
91
+
92
+ EXAMPLES::
93
+
94
+ sage: LFSRCryptosystem(FiniteField(2))
95
+ LFSR cryptosystem over Finite Field of size 2
96
+ """
97
+ return "LFSR cryptosystem over %s" % self._field
98
+
99
+ def encoding(self, M):
100
+ S = self.cipher_domain()
101
+ try:
102
+ return S.encoding(M)
103
+ except Exception:
104
+ raise TypeError("Argument M = %s does not encode in the cipher domain" % M)
105
+
106
+
107
+ class ShrinkingGeneratorCryptosystem(SymmetricKeyCryptosystem):
108
+ """
109
+ Shrinking generator cryptosystem class
110
+ """
111
+ def __init__(self, field=None):
112
+ """
113
+ Create a shrinking generator cryptosystem.
114
+
115
+ INPUT:
116
+
117
+ - ``field`` -- (default: ``None``) string monoid over a binary alphabet
118
+
119
+ EXAMPLES::
120
+
121
+ sage: E = ShrinkingGeneratorCryptosystem()
122
+ sage: E
123
+ Shrinking generator cryptosystem over Finite Field of size 2
124
+ """
125
+ if field is None:
126
+ field = FiniteField(2)
127
+ if field.cardinality() != 2:
128
+ raise NotImplementedError("Not yet implemented.")
129
+ S = BinaryStrings()
130
+ SymmetricKeyCryptosystem.__init__(self, S, S, None)
131
+ self._field = field
132
+
133
+ def __call__(self, key):
134
+ """
135
+ Create a Shrinking generator cipher.
136
+
137
+ INPUT:
138
+
139
+ - ``key`` -- list or tuple consisting of two LFSR ciphers (e1,e2)
140
+
141
+ OUTPUT: the shrinking generator cipher with key stream generator e1
142
+ and decimating cipher e2
143
+ """
144
+ if not isinstance(key, (list, tuple)) and len(key) == 2:
145
+ raise TypeError("Argument key (= %s) must be a list of tuple of length 2" % key)
146
+ e1 = key[0]
147
+ e2 = key[1]
148
+ if not isinstance(e1, LFSRCipher) or not isinstance(e2, LFSRCipher):
149
+ raise TypeError("The key (= (%s,%s)) must be a tuple of two LFSR ciphers." % key)
150
+ return ShrinkingGeneratorCipher(self, e1, e2)
151
+
152
+ def _repr_(self):
153
+ r"""
154
+ Return the string representation of this shrinking generator
155
+ cryptosystem.
156
+
157
+ EXAMPLES::
158
+
159
+ sage: ShrinkingGeneratorCryptosystem()
160
+ Shrinking generator cryptosystem over Finite Field of size 2
161
+ """
162
+ return "Shrinking generator cryptosystem over %s" % self._field
163
+
164
+ def encoding(self, M):
165
+ S = self.cipher_domain()
166
+ try:
167
+ return S.encoding(M)
168
+ except Exception:
169
+ raise TypeError("Argument M = %s does not encode in the cipher domain" % M)
170
+
171
+
172
+ def blum_blum_shub(length, seed=None, p=None, q=None,
173
+ lbound=None, ubound=None, ntries=100):
174
+ r"""
175
+ The Blum-Blum-Shub (BBS) pseudorandom bit generator.
176
+
177
+ See the original paper by Blum, Blum and Shub [BBS1986]_. The
178
+ BBS algorithm is also discussed in section 5.5.2 of [MvOV1996]_.
179
+
180
+ INPUT:
181
+
182
+ - ``length`` -- positive integer; the number of bits in the output
183
+ pseudorandom bit sequence
184
+
185
+ - ``seed`` -- (default: ``None``) if `p` and `q` are Blum primes, then
186
+ ``seed`` is a quadratic residue in the multiplicative group
187
+ `(\ZZ/n\ZZ)^{\ast}` where `n = pq`. If ``seed=None``, then the function
188
+ would generate its own random quadratic residue in `(\ZZ/n\ZZ)^{\ast}`.
189
+ If you provide a value for ``seed``, then it is your responsibility to
190
+ ensure that the seed is a quadratic residue in the multiplicative group
191
+ `(\ZZ/n\ZZ)^{\ast}`.
192
+
193
+ - ``p`` -- (default: ``None``) a large positive prime congruent to 3
194
+ modulo 4. Both ``p`` and ``q`` must be distinct. If ``p=None``, then
195
+ a value for ``p`` will be generated, where
196
+ ``0 < lower_bound <= p <= upper_bound``.
197
+
198
+ - ``q`` -- (default: ``None``) a large positive prime congruence to 3
199
+ modulo 4. Both ``p`` and ``q`` must be distinct. If ``q=None``, then
200
+ a value for ``q`` will be generated, where
201
+ ``0 < lower_bound <= q <= upper_bound``.
202
+
203
+ - ``lbound`` -- (positive integer, default: ``None``) the lower
204
+ bound on how small each random primes `p` and `q` can be. So we
205
+ have ``0 < lbound <= p, q <= ubound``. The lower bound must be
206
+ distinct from the upper bound.
207
+
208
+ - ``ubound`` -- (positive integer, default: ``None``) the upper
209
+ bound on how large each random primes `p` and `q` can be. So we have
210
+ ``0 < lbound <= p, q <= ubound``. The lower bound must be distinct
211
+ from the upper bound.
212
+
213
+ - ``ntries`` -- (default: ``100``) the number of attempts to generate
214
+ a random Blum prime. If ``ntries`` is a positive integer, then
215
+ perform that many attempts at generating a random Blum prime. This
216
+ might or might not result in a Blum prime.
217
+
218
+ OUTPUT: a pseudorandom bit sequence whose length is specified by ``length``
219
+
220
+ Here is a common use case for this function. If you want this
221
+ function to use pre-computed values for `p` and `q`, you should pass
222
+ those pre-computed values to this function. In that case, you only need
223
+ to specify values for ``length``, ``p`` and ``q``, and you do not need
224
+ to worry about doing anything with the parameters ``lbound`` and
225
+ ``ubound``. The pre-computed values `p` and `q` must be Blum primes.
226
+ It is your responsibility to check that both `p` and `q` are Blum primes.
227
+
228
+ Here is another common use case. If you want the function to generate
229
+ its own values for `p` and `q`, you must specify the lower and upper
230
+ bounds within which these two primes must lie. In that case, you must
231
+ specify values for ``length``, ``lbound`` and ``ubound``, and you do
232
+ not need to worry about values for the parameters ``p`` and ``q``. The
233
+ parameter ``ntries`` is only relevant when you want this function to
234
+ generate ``p`` and ``q``.
235
+
236
+ .. NOTE::
237
+
238
+ Beware that there might not be any primes between the lower and
239
+ upper bounds. So make sure that these two bounds are
240
+ "sufficiently" far apart from each other for there to be primes
241
+ congruent to 3 modulo 4. In particular, there should be at least
242
+ two distinct primes within these bounds, each prime being congruent
243
+ to 3 modulo 4. This function uses the function
244
+ :func:`random_blum_prime() <sage.crypto.util.random_blum_prime>` to
245
+ generate random primes that are congruent to 3 modulo 4.
246
+
247
+ ALGORITHM:
248
+
249
+ The BBS algorithm as described below is adapted from the presentation
250
+ in Algorithm 5.40, page 186 of [MvOV1996]_.
251
+
252
+ #. Let `L` be the desired number of bits in the output bit sequence.
253
+ That is, `L` is the desired length of the bit string.
254
+ #. Let `p` and `q` be two large distinct primes, each congruent to 3
255
+ modulo 4.
256
+ #. Let `n = pq` be the product of `p` and `q`.
257
+ #. Select a random seed value `s \in (\ZZ/n\ZZ)^{\ast}`, where
258
+ `(\ZZ/n\ZZ)^{\ast}` is the multiplicative group of `\ZZ/n\ZZ`.
259
+ #. Let `x_0 = s^2 \bmod n`.
260
+ #. For `i` from 1 to `L`, do
261
+
262
+ #. Let `x_i = x_{i-1}^2 \bmod n`.
263
+ #. Let `z_i` be the least significant bit of `x_i`.
264
+
265
+ #. The output pseudorandom bit sequence is `z_1, z_2, \dots, z_L`.
266
+
267
+ EXAMPLES:
268
+
269
+ A BBS pseudorandom bit sequence with a specified seed::
270
+
271
+ sage: from sage.crypto.stream import blum_blum_shub
272
+ sage: blum_blum_shub(length=6, seed=3, p=11, q=19)
273
+ 110000
274
+
275
+ You could specify the length of the bit string, with given values for
276
+ ``p`` and ``q``::
277
+
278
+ sage: blum_blum_shub(length=6, p=11, q=19) # random
279
+ 001011
280
+
281
+ Or you could specify the length of the bit string, with given values for
282
+ the lower and upper bounds::
283
+
284
+ sage: blum_blum_shub(length=6, lbound=10**4, ubound=10**5) # random
285
+ 110111
286
+
287
+ Under some reasonable hypotheses, Blum-Blum-Shub [BBS1982]_
288
+ sketch a proof that the period of the BBS stream cipher is equal to
289
+ `\lambda(\lambda(n))`, where `\lambda(n)` is the Carmichael function of
290
+ `n`. This is verified below in a few examples by using the function
291
+ :func:`lfsr_connection_polynomial() <sage.crypto.lfsr.lfsr_connection_polynomial>`
292
+ (written by Tim Brock) which computes the connection polynomial of a
293
+ linear feedback shift register sequence. The degree of that polynomial
294
+ is the period. ::
295
+
296
+ sage: from sage.crypto.stream import blum_blum_shub
297
+ sage: from sage.arith.misc import carmichael_lambda
298
+ sage: carmichael_lambda(carmichael_lambda(7*11))
299
+ 4
300
+ sage: s = [GF(2)(int(str(x))) for x in blum_blum_shub(60, p=7, q=11, seed=13)]
301
+ sage: lfsr_connection_polynomial(s)
302
+ x^3 + x^2 + x + 1
303
+ sage: carmichael_lambda(carmichael_lambda(11*23))
304
+ 20
305
+ sage: s = [GF(2)(int(str(x))) for x in blum_blum_shub(60, p=11, q=23, seed=13)]
306
+ sage: lfsr_connection_polynomial(s)
307
+ x^19 + x^18 + x^17 + x^16 + x^15 + x^14 + x^13 + x^12 + x^11 + x^10 + x^9 + x^8 + x^7 + x^6 + x^5 + x^4 + x^3 + x^2 + x + 1
308
+
309
+ TESTS:
310
+
311
+ Make sure that there is at least one Blum prime between the lower and
312
+ upper bounds. In the following example, we have ``lbound=24`` and
313
+ ``ubound=30`` with 29 being the only prime within those bounds. But 29
314
+ is not a Blum prime. ::
315
+
316
+ sage: from sage.crypto.stream import blum_blum_shub
317
+ sage: blum_blum_shub(6, lbound=24, ubound=30, ntries=10)
318
+ Traceback (most recent call last):
319
+ ...
320
+ ValueError: No Blum primes within the specified closed interval.
321
+
322
+ Both the lower and upper bounds must be greater than 2::
323
+
324
+ sage: blum_blum_shub(6, lbound=2, ubound=3)
325
+ Traceback (most recent call last):
326
+ ...
327
+ ValueError: Both the lower and upper bounds must be > 2.
328
+ sage: blum_blum_shub(6, lbound=3, ubound=2)
329
+ Traceback (most recent call last):
330
+ ...
331
+ ValueError: Both the lower and upper bounds must be > 2.
332
+ sage: blum_blum_shub(6, lbound=2, ubound=2)
333
+ Traceback (most recent call last):
334
+ ...
335
+ ValueError: Both the lower and upper bounds must be > 2.
336
+
337
+ The lower and upper bounds must be distinct from each other::
338
+
339
+ sage: blum_blum_shub(6, lbound=3, ubound=3)
340
+ Traceback (most recent call last):
341
+ ...
342
+ ValueError: The lower and upper bounds must be distinct.
343
+
344
+ The lower bound must be less than the upper bound::
345
+
346
+ sage: blum_blum_shub(6, lbound=4, ubound=3)
347
+ Traceback (most recent call last):
348
+ ...
349
+ ValueError: The lower bound must be less than the upper bound.
350
+ """
351
+ # sanity checks
352
+ if length < 0:
353
+ raise ValueError("The length of the bit string must be positive.")
354
+ if (p is None) and (p == q == lbound == ubound):
355
+ raise ValueError("Either specify values for p and q, or specify values for the lower and upper bounds.")
356
+ # Use pre-computed Blum primes. Both the parameters p and q are
357
+ # assumed to be Blum primes. No attempts are made to ensure that they
358
+ # are indeed Blum primes.
359
+ randp = 0
360
+ randq = 0
361
+ if (p is not None) and (q is not None):
362
+ randp = p
363
+ randq = q
364
+ # generate random Blum primes within specified bounds
365
+ elif (lbound is not None) and (ubound is not None):
366
+ randp = random_blum_prime(lbound, ubound, ntries=ntries)
367
+ randq = random_blum_prime(lbound, ubound, ntries=ntries)
368
+ while randp == randq:
369
+ randq = random_blum_prime(lbound, ubound, ntries=ntries)
370
+ # no pre-computed primes given, and no appropriate bounds given
371
+ else:
372
+ raise ValueError("Either specify values for p and q, or specify values for the lower and upper bounds.")
373
+ # By now, we should have two distinct Blum primes.
374
+ n = randp * randq
375
+ # If no seed is provided, select a random seed.
376
+ x0 = seed
377
+ if seed is None:
378
+ zmod = IntegerModRing(n)
379
+ s = zmod.random_element().lift()
380
+ while gcd(s, n) != 1:
381
+ s = zmod.random_element().lift()
382
+ x0 = power_mod(s, 2, n)
383
+ # start generating pseudorandom bits
384
+ z = []
385
+ for i in range(length):
386
+ x1 = power_mod(x0, 2, n)
387
+ z.append(x1 % 2)
388
+ x0 = x1
389
+ bin = BinaryStrings()
390
+ return bin(z)
@@ -0,0 +1,297 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ # sage.doctest: needs sage.combinat sage.rings.finite_rings
3
+ """
4
+ Stream Ciphers
5
+ """
6
+ #*****************************************************************************
7
+ # Copyright (C) 2007 David Kohel <kohel@maths.usyd.edu.au>
8
+ #
9
+ # Distributed under the terms of the GNU General Public License (GPL)
10
+ #
11
+ # http://www.gnu.org/licenses/
12
+ #*****************************************************************************
13
+
14
+ from .lfsr import lfsr_sequence
15
+ from .cipher import SymmetricKeyCipher
16
+ from sage.monoids.string_monoid_element import StringMonoidElement
17
+
18
+
19
+ class LFSRCipher(SymmetricKeyCipher):
20
+ def __init__(self, parent, poly, IS):
21
+ """
22
+ Create a linear feedback shift register (LFSR) cipher.
23
+
24
+ INPUT:
25
+
26
+ - ``parent`` -- parent
27
+
28
+ - ``poly`` -- connection polynomial
29
+
30
+ - ``IS`` -- initial state
31
+
32
+ EXAMPLES::
33
+
34
+ sage: FF = FiniteField(2)
35
+ sage: P.<x> = PolynomialRing(FF)
36
+ sage: E = LFSRCryptosystem(FF)
37
+ sage: E
38
+ LFSR cryptosystem over Finite Field of size 2
39
+ sage: IS = [ FF(a) for a in [0,1,1,1,0,1,1] ]
40
+ sage: g = x^7 + x + 1
41
+ sage: e = E((g,IS))
42
+ sage: B = BinaryStrings()
43
+ sage: m = B.encoding("THECATINTHEHAT")
44
+ sage: e(m)
45
+ 0010001101111010111010101010001100000000110100010101011100001011110010010000011111100100100011001101101000001111
46
+ sage: FF = FiniteField(2)
47
+ sage: P.<x> = PolynomialRing(FF)
48
+ sage: LFSR = LFSRCryptosystem(FF)
49
+ sage: e = LFSR((x^2+x+1,[FF(0),FF(1)]))
50
+ sage: B = e.domain()
51
+ sage: m = B.encoding("The cat in the hat.")
52
+ sage: e(m)
53
+ 00111001110111101011111001001101110101011011101000011001100101101011001000000011100101101010111100000101110100111111101100000101110101111010111101000011
54
+ sage: m == e(e(m))
55
+ True
56
+
57
+ TESTS::
58
+
59
+ sage: FF = FiniteField(2)
60
+ sage: P.<x> = PolynomialRing(FF)
61
+ sage: E = LFSRCryptosystem(FF)
62
+ sage: E == loads(dumps(E))
63
+ True
64
+ """
65
+ SymmetricKeyCipher.__init__(self, parent, key=(poly, IS))
66
+
67
+ def __call__(self, M, mode='ECB'):
68
+ r"""
69
+ Generate key stream from the binary string ``M``.
70
+
71
+ INPUT:
72
+
73
+ - ``M`` -- a StringMonoidElement
74
+
75
+ - ``mode`` -- ignored (default: ``'ECB'``)
76
+
77
+ EXAMPLES::
78
+
79
+ sage: k = GF(2)
80
+ sage: P.<x> = PolynomialRing( k )
81
+ sage: LFSR = LFSRCryptosystem( k )
82
+ sage: e = LFSR((x^2+x+1,[k(0), k(1)]))
83
+ sage: B = e.domain()
84
+ sage: m = B.encoding('The cat in the hat.')
85
+ sage: e(m)
86
+ 00111001110111101011111001001101110101011011101000011001100101101011001000000011100101101010111100000101110100111111101100000101110101111010111101000011
87
+ """
88
+ B = self.domain() # = plaintext_space = ciphertext_space
89
+ if not isinstance(M, StringMonoidElement) and M.parent() == B:
90
+ raise TypeError("Argument M (= %s) must be a string in the plaintext space." % M)
91
+ (poly, IS) = self.key()
92
+ n = B.ngens() # two for binary strings
93
+ N = len(M)
94
+ Melt = M._element_list
95
+ Kelt = lfsr_sequence(poly.list(), IS, N)
96
+ return B([ (Melt[i]+int(Kelt[i])) % n for i in range(N) ])
97
+
98
+ def _repr_(self):
99
+ r"""
100
+ Return the string representation of this LFSR cipher.
101
+
102
+ EXAMPLES::
103
+
104
+ sage: FF = FiniteField(2)
105
+ sage: P.<x> = PolynomialRing(FF)
106
+ sage: LFSR = LFSRCryptosystem(FF)
107
+ sage: IS_1 = [ FF(a) for a in [0,1,0,1,0,0,0] ]
108
+ sage: e1 = LFSR((x^7 + x + 1,IS_1))
109
+ sage: IS_2 = [ FF(a) for a in [0,0,1,0,0,0,1,0,1] ]
110
+ sage: e2 = LFSR((x^9 + x^3 + 1,IS_2))
111
+ sage: E = ShrinkingGeneratorCryptosystem()
112
+ sage: e = E((e1,e2))
113
+ sage: e.keystream_cipher()
114
+ LFSR cipher on Free binary string monoid
115
+ """
116
+ return "LFSR cipher on %s" % self.domain()
117
+
118
+ def connection_polynomial(self):
119
+ """
120
+ The connection polynomial defining the LFSR of the cipher.
121
+
122
+ EXAMPLES::
123
+
124
+ sage: k = GF(2)
125
+ sage: P.<x> = PolynomialRing( k )
126
+ sage: LFSR = LFSRCryptosystem( k )
127
+ sage: e = LFSR((x^2+x+1,[k(0), k(1)]))
128
+ sage: e.connection_polynomial()
129
+ x^2 + x + 1
130
+ """
131
+ return self.key()[0]
132
+
133
+ def initial_state(self):
134
+ """
135
+ The initial state of the LFSR cipher.
136
+
137
+ EXAMPLES::
138
+
139
+ sage: k = GF(2)
140
+ sage: P.<x> = PolynomialRing( k )
141
+ sage: LFSR = LFSRCryptosystem( k )
142
+ sage: e = LFSR((x^2+x+1,[k(0), k(1)]))
143
+ sage: e.initial_state()
144
+ [0, 1]
145
+ """
146
+ return self.key()[1]
147
+
148
+
149
+ class ShrinkingGeneratorCipher(SymmetricKeyCipher):
150
+ def __init__(self, parent, e1, e2):
151
+ """
152
+ Create a shrinking generator cipher.
153
+
154
+ INPUT:
155
+
156
+ - ``parent`` -- parent
157
+
158
+ - ``poly`` -- connection polynomial
159
+
160
+ - ``IS`` -- initial state
161
+
162
+ EXAMPLES::
163
+
164
+ sage: FF = FiniteField(2)
165
+ sage: P.<x> = PolynomialRing(FF)
166
+ sage: LFSR = LFSRCryptosystem(FF)
167
+ sage: IS_1 = [ FF(a) for a in [0,1,0,1,0,0,0] ]
168
+ sage: e1 = LFSR((x^7 + x + 1,IS_1))
169
+ sage: IS_2 = [ FF(a) for a in [0,0,1,0,0,0,1,0,1] ]
170
+ sage: e2 = LFSR((x^9 + x^3 + 1,IS_2))
171
+ sage: E = ShrinkingGeneratorCryptosystem()
172
+ sage: e = E((e1,e2))
173
+ sage: e
174
+ Shrinking generator cipher on Free binary string monoid
175
+ """
176
+ if not isinstance(e1, LFSRCipher):
177
+ raise TypeError("Argument e1 (= %s) must be a LFSR cipher." % e1)
178
+ if not isinstance(e2, LFSRCipher):
179
+ raise TypeError("Argument e2 (= %s) must be a LFSR cipher." % e2)
180
+ SymmetricKeyCipher.__init__(self, parent, key=(e1, e2))
181
+
182
+ def keystream_cipher(self):
183
+ """
184
+ The LFSR cipher generating the output key stream.
185
+
186
+ EXAMPLES::
187
+
188
+ sage: FF = FiniteField(2)
189
+ sage: P.<x> = PolynomialRing(FF)
190
+ sage: LFSR = LFSRCryptosystem(FF)
191
+ sage: IS_1 = [ FF(a) for a in [0,1,0,1,0,0,0] ]
192
+ sage: e1 = LFSR((x^7 + x + 1,IS_1))
193
+ sage: IS_2 = [ FF(a) for a in [0,0,1,0,0,0,1,0,1] ]
194
+ sage: e2 = LFSR((x^9 + x^3 + 1,IS_2))
195
+ sage: E = ShrinkingGeneratorCryptosystem()
196
+ sage: e = E((e1,e2))
197
+ sage: e.keystream_cipher()
198
+ LFSR cipher on Free binary string monoid
199
+ """
200
+ return self.key()[0]
201
+
202
+ def decimating_cipher(self):
203
+ """
204
+ The LFSR cipher generating the decimating key stream.
205
+
206
+ EXAMPLES::
207
+
208
+ sage: FF = FiniteField(2)
209
+ sage: P.<x> = PolynomialRing(FF)
210
+ sage: LFSR = LFSRCryptosystem(FF)
211
+ sage: IS_1 = [ FF(a) for a in [0,1,0,1,0,0,0] ]
212
+ sage: e1 = LFSR((x^7 + x + 1,IS_1))
213
+ sage: IS_2 = [ FF(a) for a in [0,0,1,0,0,0,1,0,1] ]
214
+ sage: e2 = LFSR((x^9 + x^3 + 1,IS_2))
215
+ sage: E = ShrinkingGeneratorCryptosystem()
216
+ sage: e = E((e1,e2))
217
+ sage: e.decimating_cipher()
218
+ LFSR cipher on Free binary string monoid
219
+ """
220
+ return self.key()[1]
221
+
222
+ def __call__(self, M, mode='ECB'):
223
+ r"""
224
+ INPUT:
225
+
226
+ - ``M`` -- a StringMonoidElement
227
+
228
+ - ``mode`` -- ignored (default: ``'ECB'``)
229
+
230
+ EXAMPLES::
231
+
232
+ sage: FF = FiniteField(2)
233
+ sage: P.<x> = PolynomialRing(FF)
234
+ sage: LFSR = LFSRCryptosystem(FF)
235
+ sage: IS_1 = [ FF(a) for a in [0,1,0,1,0,0,0] ]
236
+ sage: e1 = LFSR((x^7 + x + 1,IS_1))
237
+ sage: IS_2 = [ FF(a) for a in [0,0,1,0,0,0,1,0,1] ]
238
+ sage: e2 = LFSR((x^9 + x^3 + 1,IS_2))
239
+ sage: E = ShrinkingGeneratorCryptosystem()
240
+ sage: e = E((e1,e2))
241
+ sage: B = BinaryStrings()
242
+ sage: m = B.encoding("THECATINTHEHAT")
243
+ sage: c = e(m)
244
+ sage: c.decoding()
245
+ "t\xb6\xc1'\x83\x17\xae\xc9ZO\x84V\x7fX"
246
+ sage: e(e(m)) == m
247
+ True
248
+ sage: m.decoding()
249
+ 'THECATINTHEHAT'
250
+ """
251
+ B = self.domain() # = plaintext_space = ciphertext_space
252
+ if not isinstance(M, StringMonoidElement) and M.parent() == B:
253
+ raise TypeError("Argument M (= %s) must be a string in the plaintext space." % M)
254
+ (e1, e2) = self.key()
255
+ MStream = M._element_list
256
+ g1 = e1.connection_polynomial()
257
+ n1 = g1.degree()
258
+ IS_1 = e1.initial_state()
259
+ g2 = e2.connection_polynomial()
260
+ n2 = g2.degree()
261
+ IS_2 = e2.initial_state()
262
+ k = 0
263
+ N = len(M)
264
+ n = max(n1, n2)
265
+ CStream = []
266
+ while k < N:
267
+ r = max(N-k,2*n)
268
+ KStream = lfsr_sequence(g1.list(), IS_1, r)
269
+ DStream = lfsr_sequence(g2.list(), IS_2, r)
270
+ for i in range(r - n):
271
+ if DStream[i] != 0:
272
+ CStream.append(int(MStream[k] + KStream[i]))
273
+ k += 1
274
+ if k == N:
275
+ break
276
+ IS_1 = KStream[r-n-1:r-n+n1]
277
+ IS_2 = DStream[r-n-1:r-n+n2]
278
+ return B(CStream)
279
+
280
+ def _repr_(self):
281
+ r"""
282
+ Return the string representation of this shrinking generator cipher.
283
+
284
+ EXAMPLES::
285
+
286
+ sage: FF = FiniteField(2)
287
+ sage: P.<x> = PolynomialRing(FF)
288
+ sage: LFSR = LFSRCryptosystem(FF)
289
+ sage: IS_1 = [ FF(a) for a in [0,1,0,1,0,0,0] ]
290
+ sage: e1 = LFSR((x^7 + x + 1,IS_1))
291
+ sage: IS_2 = [ FF(a) for a in [0,0,1,0,0,0,1,0,1] ]
292
+ sage: e2 = LFSR((x^9 + x^3 + 1,IS_2))
293
+ sage: E = ShrinkingGeneratorCryptosystem()
294
+ sage: e = E((e1,e2)); e
295
+ Shrinking generator cipher on Free binary string monoid
296
+ """
297
+ return "Shrinking generator cipher on %s" % self.domain()