passagemath-modules 10.6.31__cp314-cp314-macosx_13_0_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 (807) hide show
  1. passagemath_modules-10.6.31.dist-info/METADATA +281 -0
  2. passagemath_modules-10.6.31.dist-info/RECORD +807 -0
  3. passagemath_modules-10.6.31.dist-info/WHEEL +6 -0
  4. passagemath_modules-10.6.31.dist-info/top_level.txt +2 -0
  5. passagemath_modules.dylibs/libgfortran.5.dylib +0 -0
  6. passagemath_modules.dylibs/libgmp.10.dylib +0 -0
  7. passagemath_modules.dylibs/libgsl.28.dylib +0 -0
  8. passagemath_modules.dylibs/libmpc.3.dylib +0 -0
  9. passagemath_modules.dylibs/libmpfr.6.dylib +0 -0
  10. passagemath_modules.dylibs/libopenblasp-r0.3.29.dylib +0 -0
  11. passagemath_modules.dylibs/libquadmath.0.dylib +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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.so +0 -0
  74. sage/calculus/integration.pyx +698 -0
  75. sage/calculus/interpolation.cpython-314-darwin.so +0 -0
  76. sage/calculus/interpolation.pxd +13 -0
  77. sage/calculus/interpolation.pyx +387 -0
  78. sage/calculus/interpolators.cpython-314-darwin.so +0 -0
  79. sage/calculus/interpolators.pyx +326 -0
  80. sage/calculus/ode.cpython-314-darwin.so +0 -0
  81. sage/calculus/ode.pxd +5 -0
  82. sage/calculus/ode.pyx +610 -0
  83. sage/calculus/riemann.cpython-314-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.so +0 -0
  401. sage/matrix/constructor.pyx +750 -0
  402. sage/matrix/docs.py +430 -0
  403. sage/matrix/echelon_matrix.cpython-314-darwin.so +0 -0
  404. sage/matrix/echelon_matrix.pyx +155 -0
  405. sage/matrix/matrix.pxd +2 -0
  406. sage/matrix/matrix0.cpython-314-darwin.so +0 -0
  407. sage/matrix/matrix0.pxd +68 -0
  408. sage/matrix/matrix0.pyx +6324 -0
  409. sage/matrix/matrix1.cpython-314-darwin.so +0 -0
  410. sage/matrix/matrix1.pxd +8 -0
  411. sage/matrix/matrix1.pyx +2851 -0
  412. sage/matrix/matrix2.cpython-314-darwin.so +0 -0
  413. sage/matrix/matrix2.pxd +25 -0
  414. sage/matrix/matrix2.pyx +20181 -0
  415. sage/matrix/matrix_cdv.cpython-314-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.so +0 -0
  492. sage/matroids/extension.pxd +34 -0
  493. sage/matroids/extension.pyx +519 -0
  494. sage/matroids/flats_matroid.cpython-314-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.so +0 -0
  701. sage/rings/function_field/hermite_form_polynomial.pyx +188 -0
  702. sage/rings/function_field/khuri_makdisi.cpython-314-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.so +0 -0
  771. sage/stats/hmm/chmm.pyx +1595 -0
  772. sage/stats/hmm/distributions.cpython-314-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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/lattice.py ADDED
@@ -0,0 +1,312 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ # sage.doctest: needs sage.modules
3
+ """
4
+ Hard Lattice Generator
5
+
6
+ This module contains lattice related functions relevant in
7
+ cryptography.
8
+
9
+ Feel free to add more functionality.
10
+
11
+ AUTHORS:
12
+
13
+ - Richard Lindner <rlindner@cdc.informatik.tu-darmstadt.de>
14
+
15
+ - Michael Schneider <mischnei@cdc.informatik.tu-darmstadt.de>
16
+ """
17
+
18
+ #*****************************************************************************
19
+ # This program is free software: you can redistribute it and/or modify
20
+ # it under the terms of the GNU General Public License as published by
21
+ # the Free Software Foundation, either version 2 of the License, or
22
+ # (at your option) any later version.
23
+ # http://www.gnu.org/licenses/
24
+ #*****************************************************************************
25
+
26
+ from sage.rings.polynomial.polynomial_ring import PolynomialRing_generic
27
+
28
+
29
+ def gen_lattice(type='modular', n=4, m=8, q=11, seed=None,
30
+ quotient=None, dual=False, ntl=False, lattice=False):
31
+ r"""
32
+ This function generates different types of integral lattice bases
33
+ of row vectors relevant in cryptography.
34
+
35
+ Randomness can be set either with ``seed``, or by using
36
+ :func:`sage.misc.randstate.set_random_seed`.
37
+
38
+ INPUT:
39
+
40
+ - ``type`` -- one of the following strings
41
+
42
+ - ``'modular'`` -- default; a class of lattices for which
43
+ asymptotic worst-case to average-case connections hold. For
44
+ more refer to [Aj1996]_
45
+ - ``'random'`` -- special case of modular (n=1); a dense class
46
+ of lattice used for testing basis reduction algorithms
47
+ proposed by Goldstein and Mayer [GM2002]_
48
+ - ``'ideal'`` -- special case of modular; allows for a more
49
+ compact representation proposed by [LM2006]_
50
+ - ``'cyclotomic'`` -- special case of ideal; allows for
51
+ efficient processing proposed by [LM2006]_
52
+
53
+ - ``n`` -- determinant size, primal: `det(L) = q^n`, dual: `det(L) = q^{m-n}`.
54
+ For ideal lattices this is also the degree of the quotient polynomial.
55
+
56
+ - ``m`` -- lattice dimension, `L \subseteq Z^m`
57
+
58
+ - ``q`` -- coefficient size, `q-Z^m \subseteq L`
59
+
60
+ - ``seed`` -- randomness seed
61
+
62
+ - ``quotient`` -- for the type ``'ideal'``, this determines the quotient
63
+ polynomial. Ignored for all other types
64
+
65
+ - ``dual`` -- set this flag if you want a basis for `q-dual(L)`, for example
66
+ for Regev's LWE bases [Reg2005]_
67
+
68
+ - ``ntl`` -- set this flag if you want the lattice basis in NTL readable
69
+ format
70
+
71
+ - ``lattice`` -- set this flag if you want a
72
+ :class:`FreeModule_submodule_with_basis_integer` object instead
73
+ of an integer matrix representing the basis
74
+
75
+ OUTPUT: ``B`` a unique size-reduced triangular (primal: lower_left,
76
+ dual: lower_right) basis of row vectors for the lattice in question
77
+
78
+ EXAMPLES:
79
+
80
+ Modular basis::
81
+
82
+ sage: sage.crypto.gen_lattice(m=10, seed=42)
83
+ [11 0 0 0 0 0 0 0 0 0]
84
+ [ 0 11 0 0 0 0 0 0 0 0]
85
+ [ 0 0 11 0 0 0 0 0 0 0]
86
+ [ 0 0 0 11 0 0 0 0 0 0]
87
+ [ 2 4 3 5 1 0 0 0 0 0]
88
+ [ 1 -5 -4 2 0 1 0 0 0 0]
89
+ [-4 3 -1 1 0 0 1 0 0 0]
90
+ [-2 -3 -4 -1 0 0 0 1 0 0]
91
+ [-5 -5 3 3 0 0 0 0 1 0]
92
+ [-4 -3 2 -5 0 0 0 0 0 1]
93
+
94
+ Random basis::
95
+
96
+ sage: sage.crypto.gen_lattice(type='random', n=1, m=10, q=11^4, seed=42)
97
+ [14641 0 0 0 0 0 0 0 0 0]
98
+ [ 431 1 0 0 0 0 0 0 0 0]
99
+ [-4792 0 1 0 0 0 0 0 0 0]
100
+ [ 1015 0 0 1 0 0 0 0 0 0]
101
+ [-3086 0 0 0 1 0 0 0 0 0]
102
+ [-5378 0 0 0 0 1 0 0 0 0]
103
+ [ 4769 0 0 0 0 0 1 0 0 0]
104
+ [-1159 0 0 0 0 0 0 1 0 0]
105
+ [ 3082 0 0 0 0 0 0 0 1 0]
106
+ [-4580 0 0 0 0 0 0 0 0 1]
107
+
108
+ Ideal bases with quotient `x^n-1`, `m=2*n` are NTRU bases::
109
+
110
+ sage: sage.crypto.gen_lattice(type='ideal', seed=42, quotient=x^4 - 1) # needs sage.symbolic
111
+ [11 0 0 0 0 0 0 0]
112
+ [ 0 11 0 0 0 0 0 0]
113
+ [ 0 0 11 0 0 0 0 0]
114
+ [ 0 0 0 11 0 0 0 0]
115
+ [-3 -3 -2 4 1 0 0 0]
116
+ [ 4 -3 -3 -2 0 1 0 0]
117
+ [-2 4 -3 -3 0 0 1 0]
118
+ [-3 -2 4 -3 0 0 0 1]
119
+
120
+ Ideal bases also work with polynomials::
121
+
122
+ sage: R.<t> = PolynomialRing(ZZ)
123
+ sage: sage.crypto.gen_lattice(type='ideal', seed=1234, quotient=t^4 - 1) # needs sage.libs.pari
124
+ [11 0 0 0 0 0 0 0]
125
+ [ 0 11 0 0 0 0 0 0]
126
+ [ 0 0 11 0 0 0 0 0]
127
+ [ 0 0 0 11 0 0 0 0]
128
+ [-3 4 1 4 1 0 0 0]
129
+ [ 4 -3 4 1 0 1 0 0]
130
+ [ 1 4 -3 4 0 0 1 0]
131
+ [ 4 1 4 -3 0 0 0 1]
132
+
133
+ Cyclotomic bases with n=2^k are SWIFFT bases::
134
+
135
+ sage: sage.crypto.gen_lattice(type='cyclotomic', seed=42) # needs sage.libs.pari
136
+ [11 0 0 0 0 0 0 0]
137
+ [ 0 11 0 0 0 0 0 0]
138
+ [ 0 0 11 0 0 0 0 0]
139
+ [ 0 0 0 11 0 0 0 0]
140
+ [-3 -3 -2 4 1 0 0 0]
141
+ [-4 -3 -3 -2 0 1 0 0]
142
+ [ 2 -4 -3 -3 0 0 1 0]
143
+ [ 3 2 -4 -3 0 0 0 1]
144
+
145
+ Dual modular bases are related to Regev's famous public-key
146
+ encryption [Reg2005]_::
147
+
148
+ sage: sage.crypto.gen_lattice(type='modular', m=10, seed=42, dual=True)
149
+ [ 0 0 0 0 0 0 0 0 0 11]
150
+ [ 0 0 0 0 0 0 0 0 11 0]
151
+ [ 0 0 0 0 0 0 0 11 0 0]
152
+ [ 0 0 0 0 0 0 11 0 0 0]
153
+ [ 0 0 0 0 0 11 0 0 0 0]
154
+ [ 0 0 0 0 11 0 0 0 0 0]
155
+ [ 0 0 0 1 -5 -2 -1 1 -3 5]
156
+ [ 0 0 1 0 -3 4 1 4 -3 -2]
157
+ [ 0 1 0 0 -4 5 -3 3 5 3]
158
+ [ 1 0 0 0 -2 -1 4 2 5 4]
159
+
160
+ Relation of primal and dual bases::
161
+
162
+ sage: B_primal = sage.crypto.gen_lattice(m=10, q=11, seed=42)
163
+ sage: B_dual = sage.crypto.gen_lattice(m=10, q=11, seed=42, dual=True)
164
+ sage: B_dual_alt = transpose(11*B_primal.inverse()).change_ring(ZZ)
165
+ sage: B_dual_alt.hermite_form() == B_dual.hermite_form()
166
+ True
167
+
168
+ TESTS:
169
+
170
+ Test some bad quotient polynomials::
171
+
172
+ sage: sage.crypto.gen_lattice(type='ideal', seed=1234, quotient=cos(x)) # needs sage.symbolic
173
+ Traceback (most recent call last):
174
+ ...
175
+ TypeError: self must be a numeric expression
176
+ sage: sage.crypto.gen_lattice(type='ideal', seed=1234, quotient=x^23-1) # needs sage.symbolic
177
+ Traceback (most recent call last):
178
+ ...
179
+ ValueError: ideal basis requires n = quotient.degree()
180
+ sage: R.<u,v> = ZZ[]
181
+ sage: sage.crypto.gen_lattice(type='ideal', seed=1234, quotient=u+v)
182
+ Traceback (most recent call last):
183
+ ...
184
+ TypeError: quotient should be a univariate polynomial
185
+
186
+ We are testing output format choices::
187
+
188
+ sage: sage.crypto.gen_lattice(m=10, q=11, seed=42)
189
+ [11 0 0 0 0 0 0 0 0 0]
190
+ [ 0 11 0 0 0 0 0 0 0 0]
191
+ [ 0 0 11 0 0 0 0 0 0 0]
192
+ [ 0 0 0 11 0 0 0 0 0 0]
193
+ [ 2 4 3 5 1 0 0 0 0 0]
194
+ [ 1 -5 -4 2 0 1 0 0 0 0]
195
+ [-4 3 -1 1 0 0 1 0 0 0]
196
+ [-2 -3 -4 -1 0 0 0 1 0 0]
197
+ [-5 -5 3 3 0 0 0 0 1 0]
198
+ [-4 -3 2 -5 0 0 0 0 0 1]
199
+
200
+ sage: sage.crypto.gen_lattice(m=10, q=11, seed=42, ntl=True)
201
+ [
202
+ [11 0 0 0 0 0 0 0 0 0]
203
+ [0 11 0 0 0 0 0 0 0 0]
204
+ [0 0 11 0 0 0 0 0 0 0]
205
+ [0 0 0 11 0 0 0 0 0 0]
206
+ [2 4 3 5 1 0 0 0 0 0]
207
+ [1 -5 -4 2 0 1 0 0 0 0]
208
+ [-4 3 -1 1 0 0 1 0 0 0]
209
+ [-2 -3 -4 -1 0 0 0 1 0 0]
210
+ [-5 -5 3 3 0 0 0 0 1 0]
211
+ [-4 -3 2 -5 0 0 0 0 0 1]
212
+ ]
213
+
214
+ sage: sage.crypto.gen_lattice(m=10, q=11, seed=42, lattice=True) # needs fpylll
215
+ Free module of degree 10 and rank 10 over Integer Ring
216
+ User basis matrix:
217
+ [ 0 0 1 1 0 -1 -1 -1 1 0]
218
+ [-1 1 0 1 0 1 1 0 1 1]
219
+ [-1 0 0 0 -1 1 1 -2 0 0]
220
+ [-1 -1 0 1 1 0 0 1 1 -1]
221
+ [ 1 0 -1 0 0 0 -2 -2 0 0]
222
+ [ 2 -1 0 0 1 0 1 0 0 -1]
223
+ [-1 1 -1 0 1 -1 1 0 -1 -2]
224
+ [ 0 0 -1 3 0 0 0 -1 -1 -1]
225
+ [ 0 -1 0 -1 2 0 -1 0 0 2]
226
+ [ 0 1 1 0 1 1 -2 1 -1 -2]
227
+ """
228
+ from sage.rings.finite_rings.integer_mod_ring import IntegerModRing
229
+ from sage.matrix.constructor import identity_matrix, block_matrix
230
+ from sage.matrix.matrix_space import MatrixSpace
231
+ from sage.rings.integer_ring import ZZ
232
+ if seed is not None:
233
+ from sage.misc.randstate import set_random_seed
234
+ set_random_seed(seed)
235
+
236
+ if type == 'random':
237
+ if n != 1:
238
+ raise ValueError('random bases require n = 1')
239
+
240
+ ZZ_q = IntegerModRing(q)
241
+ A = identity_matrix(ZZ_q, n)
242
+
243
+ if type == 'random' or type == 'modular':
244
+ R = MatrixSpace(ZZ_q, m-n, n)
245
+ A = A.stack(R.random_element())
246
+
247
+ elif type == 'ideal':
248
+ if quotient is None:
249
+ raise ValueError('ideal bases require a quotient polynomial')
250
+ try:
251
+ quotient = quotient.change_ring(ZZ_q)
252
+ except (AttributeError, TypeError):
253
+ quotient = quotient.polynomial(base_ring=ZZ_q)
254
+
255
+ P = quotient.parent()
256
+ # P should be a univariate polynomial ring over ZZ_q
257
+ if not isinstance(P, PolynomialRing_generic):
258
+ raise TypeError("quotient should be a univariate polynomial")
259
+ assert P.base_ring() is ZZ_q
260
+
261
+ if quotient.degree() != n:
262
+ raise ValueError('ideal basis requires n = quotient.degree()')
263
+ R = P.quotient(quotient)
264
+ for i in range(m//n):
265
+ A = A.stack(R.random_element().matrix())
266
+
267
+ elif type == 'cyclotomic':
268
+ from sage.arith.misc import euler_phi
269
+ from sage.misc.functional import cyclotomic_polynomial
270
+
271
+ # we assume that n+1 <= min( euler_phi^{-1}(n) ) <= 2*n
272
+ found = False
273
+ for k in range(2*n,n,-1):
274
+ if euler_phi(k) == n:
275
+ found = True
276
+ break
277
+ if not found:
278
+ raise ValueError("cyclotomic bases require that n "
279
+ "is an image of Euler's totient function")
280
+
281
+ R = ZZ_q['x'].quotient(cyclotomic_polynomial(k, 'x'), 'x')
282
+ for i in range(m//n):
283
+ A = A.stack(R.random_element().matrix())
284
+
285
+ # switch from representatives 0,...,(q-1) to (1-q)/2,....,(q-1)/2
286
+ def minrep(a):
287
+ if abs(a-q) < abs(a):
288
+ return a-q
289
+ else:
290
+ return a
291
+ A_prime = A[n:m].lift().apply_map(minrep)
292
+
293
+ if not dual:
294
+ B = block_matrix([[ZZ(q), ZZ.zero()], [A_prime, ZZ.one()] ],
295
+ subdivide=False)
296
+ else:
297
+ B = block_matrix([[ZZ.one(), -A_prime.transpose()],
298
+ [ZZ.zero(), ZZ(q)]], subdivide=False)
299
+ for i in range(m//2):
300
+ B.swap_rows(i,m-i-1)
301
+
302
+ if ntl and lattice:
303
+ raise ValueError("Cannot specify ntl=True and lattice=True "
304
+ "at the same time")
305
+
306
+ if ntl:
307
+ return B._ntl_()
308
+ elif lattice:
309
+ from sage.modules.free_module_integer import IntegerLattice
310
+ return IntegerLattice(B)
311
+ else:
312
+ return B
sage/crypto/lfsr.py ADDED
@@ -0,0 +1,295 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ # sage.doctest: needs sage.rings.finite_rings
3
+ r"""
4
+ Linear feedback shift register (LFSR) sequence commands
5
+
6
+ Stream ciphers have been used for a long time as a source of pseudo-random
7
+ number generators.
8
+
9
+ S. Golomb [Go1967]_ gives a list of three statistical properties that a sequence of
10
+ numbers `{\bf a}=\{a_n\}_{n=1}^\infty`, `a_n\in \{0,1\}` should display to be
11
+ considered "random". Define the autocorrelation of `{\bf a}` to be
12
+
13
+ .. MATH::
14
+
15
+ C(k)=C(k,{\bf a})=\lim_{N\rightarrow \infty} \frac{1}{N}\sum_{n=1}^N (-1)^{a_n+a_{n+k}}.
16
+
17
+ In the case where `{\bf a}` is periodic with period `P`, then this reduces to
18
+
19
+ .. MATH::
20
+
21
+ C(k)=\frac{1}{P}\sum_{n=1}^P (-1)^{a_n+a_{n+k}}.
22
+
23
+ Assume `{\bf a}` is periodic with period `P`.
24
+
25
+ - balance: `|\sum_{n=1}^P(-1)^{a_n}|\leq 1`.
26
+
27
+ - low autocorrelation:
28
+
29
+ .. MATH::
30
+
31
+ C(k)= \left\{ \begin{array}{cc} 1,& k=0,\\ \epsilon, & k\not= 0. \end{array} \right.
32
+
33
+ (For sequences satisfying these first two properties, it is known that
34
+ `\epsilon=-1/P` must hold.)
35
+
36
+ - proportional runs property: In each period, half the runs have length `1`,
37
+ one-fourth have length `2`, etc. Moreover, there are as many runs of `1`'s as
38
+ there are of `0`'s.
39
+
40
+ A general feedback shift register is a map `f:{\bf F}_q^d\rightarrow {\bf
41
+ F}_q^d` of the form
42
+
43
+ .. MATH::
44
+
45
+ \begin{array}{c} f(x_0,...,x_{n-1})=(x_1,x_2,...,x_n),\\ x_n=C(x_0,...,x_{n-1}), \end{array}
46
+
47
+
48
+ where `C:{\bf F}_q^d\rightarrow {\bf F}_q` is a given function. When `C` is of
49
+ the form
50
+
51
+ .. MATH::
52
+
53
+ C(x_0,...,x_{n-1})=a_0x_0+...+a_{n-1}x_{n-1},
54
+
55
+ for some given constants `a_i\in {\bf F}_q`, the map is called a linear
56
+ feedback shift register (LFSR).
57
+
58
+ Example of an LFSR: Let
59
+
60
+ .. MATH::
61
+
62
+ f(x)=a_{{0}}+a_{{1}}x+...+a_{{n}}{x}^n+...,
63
+
64
+ .. MATH::
65
+
66
+ g(x)=b_{{0}}+b_{{1}}x+...+b_{{n}}{x}^n+...,
67
+
68
+ be given polynomials in `{\bf F}_2[x]` and let
69
+
70
+ .. MATH::
71
+
72
+ h(x)=\frac{f(x)}{g(x)}=c_0+c_1x+...+c_nx^n+... \ .
73
+
74
+ We can compute a recursion formula which allows us to rapidly compute the
75
+ coefficients of `h(x)` (take `f(x)=1`):
76
+
77
+ .. MATH::
78
+
79
+ c_{n}=\sum_{i=1}^n {\frac{-b_i}{b_0}c_{n-i}}.
80
+
81
+ The coefficients of `h(x)` can, under certain conditions on `f(x)` and `g(x)`,
82
+ be considered "random" from certain statistical points of view.
83
+
84
+ Example: For instance, if
85
+
86
+ .. MATH::
87
+
88
+ f(x)=1,\ \ \ \ g(x)=x^4+x+1,
89
+
90
+ then
91
+
92
+ .. MATH::
93
+
94
+ h(x)=1+x+x^2+x^3+x^5+x^7+x^8+...\ .
95
+
96
+ The coefficients of `h` are
97
+
98
+ .. MATH::
99
+
100
+ \begin{array}{c} 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, \\
101
+ 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, ...\ . \end{array}
102
+
103
+ The sequence of `0,1`'s is periodic with period `P=2^4-1=15` and satisfies
104
+ Golomb's three randomness conditions. However, this sequence of period 15 can
105
+ be "cracked" (i.e., a procedure to reproduce `g(x)`) by knowing only 8 terms!
106
+ This is the function of the Berlekamp-Massey algorithm [Mas1969]_, implemented
107
+ in ``berlekamp_massey.py``.
108
+
109
+ AUTHORS:
110
+
111
+ - David Joyner (2005-11-24): initial creation.
112
+
113
+ - Timothy Brock (2005-11): added ``lfsr_sequence`` with code modified from
114
+ Python Cookbook, http://aspn.activestate.com/ASPN/Python/Cookbook/
115
+
116
+ - Timothy Brock (2006-04-17): added ``lfsr_autocorrelation`` and
117
+ ``lfsr_connection_polynomial``.
118
+ """
119
+
120
+ ###########################################################################
121
+ # Copyright (C) 2006 Timothy Brock
122
+ # and William Stein <wstein@gmail.com>
123
+ #
124
+ # Distributed under the terms of the GNU General Public License (GPL)
125
+ #
126
+ # https://www.gnu.org/licenses/
127
+ ###########################################################################
128
+
129
+ import copy
130
+
131
+ from sage.structure.all import Sequence
132
+ from sage.rings.finite_rings.finite_field_base import FiniteField
133
+ from sage.rings.integer import Integer
134
+ from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
135
+
136
+
137
+ def lfsr_sequence(key, fill, n):
138
+ r"""
139
+ Create an LFSR sequence.
140
+
141
+ INPUT:
142
+
143
+ - ``key`` -- list of finite field elements, `[c_0, c_1,\dots, c_k]`
144
+
145
+ - ``fill`` -- the list of the initial terms of the LFSR sequence, `[x_0,x_1,\dots,x_k]`
146
+
147
+ - ``n`` -- number of terms of the sequence that the function returns
148
+
149
+ OUTPUT:
150
+
151
+ The LFSR sequence defined by `x_{n+1} = c_kx_n+...+c_0x_{n-k}` for `n \geq k`.
152
+
153
+ EXAMPLES::
154
+
155
+ sage: F = GF(2); l = F(1); o = F(0)
156
+ sage: F = GF(2); S = LaurentSeriesRing(F,'x'); x = S.gen()
157
+ sage: fill = [l,l,o,l]; key = [1,o,o,l]; n = 20
158
+ sage: L = lfsr_sequence(key,fill,20); L
159
+ [1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0]
160
+ sage: from sage.matrix.berlekamp_massey import berlekamp_massey
161
+ sage: g = berlekamp_massey(L); g
162
+ x^4 + x^3 + 1
163
+ sage: (1)/(g.reverse()+O(x^20))
164
+ 1 + x + x^2 + x^3 + x^5 + x^7 + x^8 + x^11 + x^15 + x^16 + x^17 + x^18 + O(x^20)
165
+ sage: (1+x^2)/(g.reverse()+O(x^20))
166
+ 1 + x + x^4 + x^8 + x^9 + x^10 + x^11 + x^13 + x^15 + x^16 + x^19 + O(x^20)
167
+ sage: (1+x^2+x^3)/(g.reverse()+O(x^20))
168
+ 1 + x + x^3 + x^5 + x^6 + x^9 + x^13 + x^14 + x^15 + x^16 + x^18 + O(x^20)
169
+ sage: fill = [l,l,o,l]; key = [l,o,o,o]; n = 20
170
+ sage: L = lfsr_sequence(key,fill,20); L
171
+ [1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1]
172
+ sage: g = berlekamp_massey(L); g
173
+ x^4 + 1
174
+ sage: (1+x)/(g.reverse()+O(x^20))
175
+ 1 + x + x^4 + x^5 + x^8 + x^9 + x^12 + x^13 + x^16 + x^17 + O(x^20)
176
+ sage: (1+x+x^3)/(g.reverse()+O(x^20))
177
+ 1 + x + x^3 + x^4 + x^5 + x^7 + x^8 + x^9 + x^11 + x^12 + x^13 + x^15 + x^16 + x^17 + x^19 + O(x^20)
178
+ """
179
+ if not isinstance(key, list):
180
+ raise TypeError("key must be a list")
181
+ key = Sequence(key)
182
+ F = key.universe()
183
+ if not isinstance(F, FiniteField):
184
+ raise TypeError("universe of sequence must be a finite field")
185
+
186
+ s = fill
187
+ k = len(fill)
188
+ L = []
189
+ for i in range(n):
190
+ s0 = copy.copy(s)
191
+ L.append(s[0])
192
+ s = s[1:k]
193
+ s.append(sum([key[i] * s0[i] for i in range(k)]))
194
+ return L
195
+
196
+
197
+ def lfsr_autocorrelation(L, p, k):
198
+ """
199
+ INPUT:
200
+
201
+ - ``L`` -- a periodic sequence of elements of ZZ or GF(2); must have length `p`
202
+
203
+ - ``p`` -- the period of `L`
204
+
205
+ - ``k`` -- integer between `0` and `p`
206
+
207
+ OUTPUT: autocorrelation sequence of `L`
208
+
209
+ EXAMPLES::
210
+
211
+ sage: F = GF(2)
212
+ sage: o = F(0)
213
+ sage: l = F(1)
214
+ sage: key = [l,o,o,l]; fill = [l,l,o,l]; n = 20
215
+ sage: s = lfsr_sequence(key,fill,n)
216
+ sage: lfsr_autocorrelation(s,15,7)
217
+ 4/15
218
+ sage: lfsr_autocorrelation(s,int(15),7)
219
+ 4/15
220
+ """
221
+ if not isinstance(L, list):
222
+ raise TypeError("L (=%s) must be a list" % L)
223
+ p = Integer(p)
224
+ _p = int(p)
225
+ k = int(k)
226
+ L0 = L[:_p] # slices makes a copy
227
+ L0 = L0 + L0[:k]
228
+ return sum([int(L0[i]) * int(L0[i + k]) / p for i in range(_p)])
229
+
230
+
231
+ def lfsr_connection_polynomial(s):
232
+ """
233
+ INPUT:
234
+
235
+ - ``s`` -- a sequence of elements of a finite field of even length
236
+
237
+ OUTPUT:
238
+
239
+ - ``C(x)`` -- the connection polynomial of the minimal LFSR
240
+
241
+ This implements the algorithm in section 3 of J. L. Massey's article
242
+ [Mas1969]_.
243
+
244
+ EXAMPLES::
245
+
246
+ sage: F = GF(2)
247
+ sage: F
248
+ Finite Field of size 2
249
+ sage: o = F(0); l = F(1)
250
+ sage: key = [l,o,o,l]; fill = [l,l,o,l]; n = 20
251
+ sage: s = lfsr_sequence(key,fill,n); s
252
+ [1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0]
253
+ sage: lfsr_connection_polynomial(s)
254
+ x^4 + x + 1
255
+ sage: from sage.matrix.berlekamp_massey import berlekamp_massey
256
+ sage: berlekamp_massey(s)
257
+ x^4 + x^3 + 1
258
+
259
+ Notice that ``berlekamp_massey`` returns the reverse of the connection
260
+ polynomial (and is potentially must faster than this implementation).
261
+ """
262
+ # Initialization:
263
+ FF = s[0].base_ring()
264
+ R = PolynomialRing(FF, "x")
265
+ x = R.gen()
266
+ C = R.one()
267
+ B = R.one()
268
+ m = 1
269
+ b = FF.one()
270
+ L = 0
271
+ N = 0
272
+
273
+ while N < len(s):
274
+ if L > 0:
275
+ r = min(L + 1, C.degree() + 1)
276
+ d = s[N] + sum([(C.list())[i] * s[N - i] for i in range(1, r)])
277
+ if L == 0:
278
+ d = s[N]
279
+ if d == 0:
280
+ m += 1
281
+ N += 1
282
+ if d > 0:
283
+ if 2 * L > N:
284
+ C = C - d*b**(-1)*x**m*B
285
+ m += 1
286
+ N += 1
287
+ else:
288
+ T = C
289
+ C = C - d*b**(-1)*x**m*B
290
+ L = N + 1 - L
291
+ m = 1
292
+ b = d
293
+ B = T
294
+ N += 1
295
+ return C