passagemath-modules 10.6.31rc3__cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

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

Potentially problematic release.


This version of passagemath-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 +6 -0
  4. passagemath_modules-10.6.31rc3.dist-info/top_level.txt +2 -0
  5. passagemath_modules.libs/libgfortran-83c28eba.so.5.0.0 +0 -0
  6. passagemath_modules.libs/libgmp-6e109695.so.10.5.0 +0 -0
  7. passagemath_modules.libs/libgsl-cda90e79.so.28.0.0 +0 -0
  8. passagemath_modules.libs/libmpc-7f678fcf.so.3.3.1 +0 -0
  9. passagemath_modules.libs/libmpfr-82690d50.so.6.2.1 +0 -0
  10. passagemath_modules.libs/libopenblasp-r0-6dcb67f9.3.29.so +0 -0
  11. passagemath_modules.libs/libquadmath-2284e583.so.0.0.0 +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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.so +0 -0
  74. sage/calculus/integration.pyx +698 -0
  75. sage/calculus/interpolation.cpython-314-x86_64-linux-gnu.so +0 -0
  76. sage/calculus/interpolation.pxd +13 -0
  77. sage/calculus/interpolation.pyx +387 -0
  78. sage/calculus/interpolators.cpython-314-x86_64-linux-gnu.so +0 -0
  79. sage/calculus/interpolators.pyx +326 -0
  80. sage/calculus/ode.cpython-314-x86_64-linux-gnu.so +0 -0
  81. sage/calculus/ode.pxd +5 -0
  82. sage/calculus/ode.pyx +610 -0
  83. sage/calculus/riemann.cpython-314-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.so +0 -0
  401. sage/matrix/constructor.pyx +750 -0
  402. sage/matrix/docs.py +430 -0
  403. sage/matrix/echelon_matrix.cpython-314-x86_64-linux-gnu.so +0 -0
  404. sage/matrix/echelon_matrix.pyx +155 -0
  405. sage/matrix/matrix.pxd +2 -0
  406. sage/matrix/matrix0.cpython-314-x86_64-linux-gnu.so +0 -0
  407. sage/matrix/matrix0.pxd +68 -0
  408. sage/matrix/matrix0.pyx +6324 -0
  409. sage/matrix/matrix1.cpython-314-x86_64-linux-gnu.so +0 -0
  410. sage/matrix/matrix1.pxd +8 -0
  411. sage/matrix/matrix1.pyx +2851 -0
  412. sage/matrix/matrix2.cpython-314-x86_64-linux-gnu.so +0 -0
  413. sage/matrix/matrix2.pxd +25 -0
  414. sage/matrix/matrix2.pyx +20181 -0
  415. sage/matrix/matrix_cdv.cpython-314-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.so +0 -0
  492. sage/matroids/extension.pxd +34 -0
  493. sage/matroids/extension.pyx +519 -0
  494. sage/matroids/flats_matroid.cpython-314-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.so +0 -0
  701. sage/rings/function_field/hermite_form_polynomial.pyx +188 -0
  702. sage/rings/function_field/khuri_makdisi.cpython-314-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.so +0 -0
  771. sage/stats/hmm/chmm.pyx +1595 -0
  772. sage/stats/hmm/distributions.cpython-314-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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
@@ -0,0 +1,896 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ # sage.doctest: needs fpylll
3
+ """
4
+ Discrete subgroups of `\\ZZ^n`
5
+
6
+ AUTHORS:
7
+
8
+ - Martin Albrecht (2014-03): initial version
9
+
10
+ - Jan Pöschko (2012-08): some code in this module was taken from Jan Pöschko's
11
+ 2012 GSoC project
12
+
13
+ TESTS::
14
+
15
+ sage: from sage.modules.free_module_integer import IntegerLattice
16
+ sage: L = IntegerLattice(random_matrix(ZZ, 10, 10))
17
+ sage: TestSuite(L).run()
18
+ """
19
+
20
+ ##############################################################################
21
+ # Copyright (C) 2012 Jan Poeschko <jan@poeschko.com>
22
+ # Copyright (C) 2014 Martin Albrecht <martinralbrecht@googlemail.com>
23
+ #
24
+ # Distributed under the terms of the GNU General Public License (GPL)
25
+ #
26
+ # This code is distributed in the hope that it will be useful,
27
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
28
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
29
+ # General Public License for more details.
30
+ #
31
+ # The full text of the GPL is available at:
32
+ #
33
+ # https://www.gnu.org/licenses/
34
+ ##############################################################################
35
+
36
+ from sage.rings.integer_ring import ZZ
37
+ from sage.rings.rational_field import QQ
38
+ from sage.matrix.constructor import matrix
39
+ from sage.misc.cachefunc import cached_method
40
+ from sage.modules.free_module import FreeModule_submodule_with_basis_pid, FreeModule_ambient_pid
41
+ from sage.modules.free_module_element import vector
42
+
43
+ try:
44
+ from sage.rings.number_field.number_field_element import OrderElement_absolute
45
+ except ImportError:
46
+ OrderElement_absolute = ()
47
+
48
+
49
+ def IntegerLattice(basis, lll_reduce=True):
50
+ r"""
51
+ Construct a new integer lattice from ``basis``.
52
+
53
+ INPUT:
54
+
55
+ - ``basis`` -- can be one of the following:
56
+
57
+ - a list of vectors
58
+
59
+ - a matrix over the integers
60
+
61
+ - an element of an absolute order
62
+
63
+ - ``lll_reduce`` -- boolean (default: ``True``); run LLL reduction on the basis
64
+ on construction
65
+
66
+ EXAMPLES:
67
+
68
+ We construct a lattice from a list of rows::
69
+
70
+ sage: from sage.modules.free_module_integer import IntegerLattice
71
+ sage: IntegerLattice([[1,0,3], [0,2,1], [0,2,7]])
72
+ Free module of degree 3 and rank 3 over Integer Ring
73
+ User basis matrix:
74
+ [-2 0 0]
75
+ [ 0 2 1]
76
+ [ 1 -2 2]
77
+
78
+ Sage includes a generator for hard lattices from cryptography::
79
+
80
+ sage: from sage.modules.free_module_integer import IntegerLattice
81
+ sage: A = sage.crypto.gen_lattice(type='modular', m=10, seed=1337, dual=True)
82
+ sage: IntegerLattice(A)
83
+ Free module of degree 10 and rank 10 over Integer Ring
84
+ User basis matrix:
85
+ [-1 1 2 -2 0 1 0 -1 2 1]
86
+ [ 1 0 0 -1 -2 1 -2 3 -1 0]
87
+ [ 1 2 0 2 -1 1 -2 2 2 0]
88
+ [ 1 0 -1 0 2 3 0 0 -1 -2]
89
+ [ 1 -3 0 0 2 1 -2 -1 0 0]
90
+ [-3 0 -1 0 -1 2 -2 0 0 2]
91
+ [ 0 0 0 1 0 2 -3 -3 -2 -1]
92
+ [ 0 -1 -4 -1 -1 1 2 -1 0 1]
93
+ [ 1 1 -2 1 1 2 1 1 -2 3]
94
+ [ 2 -1 1 2 -3 2 2 1 0 1]
95
+
96
+ You can also construct the lattice directly::
97
+
98
+ sage: from sage.modules.free_module_integer import IntegerLattice
99
+ sage: sage.crypto.gen_lattice(type='modular', m=10, seed=1337, dual=True, lattice=True)
100
+ Free module of degree 10 and rank 10 over Integer Ring
101
+ User basis matrix:
102
+ [-1 1 2 -2 0 1 0 -1 2 1]
103
+ [ 1 0 0 -1 -2 1 -2 3 -1 0]
104
+ [ 1 2 0 2 -1 1 -2 2 2 0]
105
+ [ 1 0 -1 0 2 3 0 0 -1 -2]
106
+ [ 1 -3 0 0 2 1 -2 -1 0 0]
107
+ [-3 0 -1 0 -1 2 -2 0 0 2]
108
+ [ 0 0 0 1 0 2 -3 -3 -2 -1]
109
+ [ 0 -1 -4 -1 -1 1 2 -1 0 1]
110
+ [ 1 1 -2 1 1 2 1 1 -2 3]
111
+ [ 2 -1 1 2 -3 2 2 1 0 1]
112
+
113
+ We construct an ideal lattice from an element of an absolute order::
114
+
115
+ sage: # needs sage.rings.number_field
116
+ sage: K.<a> = CyclotomicField(17)
117
+ sage: O = K.ring_of_integers()
118
+ sage: f = O(-a^15 + a^13 + 4*a^12 - 12*a^11 - 256*a^10 + a^9 - a^7
119
+ ....: - 4*a^6 + a^5 + 210*a^4 + 2*a^3 - 2*a^2 + 2*a - 2)
120
+ sage: from sage.modules.free_module_integer import IntegerLattice
121
+ sage: IntegerLattice(f)
122
+ Free module of degree 16 and rank 16 over Integer Ring
123
+ User basis matrix:
124
+ [ -2 2 -2 2 210 1 -4 -1 0 1 -256 -12 4 1 0 -1]
125
+ [ 33 48 44 48 256 -209 28 51 45 49 -1 35 44 48 44 48]
126
+ [ 1 -1 3 -1 3 211 2 -3 0 1 2 -255 -11 5 2 1]
127
+ [-223 34 50 47 258 0 29 45 46 47 2 -11 33 48 44 48]
128
+ [ -13 31 46 42 46 -2 -225 32 48 45 256 -2 27 43 44 45]
129
+ [ -16 33 42 46 254 1 -19 32 44 45 0 -13 -225 32 48 45]
130
+ [ -15 -223 30 50 255 1 -20 32 42 47 -2 -11 -15 33 44 44]
131
+ [ -11 -11 33 48 256 3 -17 -222 32 53 1 -9 -14 35 44 48]
132
+ [ -12 -13 32 45 257 0 -16 -13 32 48 -1 -10 -14 -222 31 51]
133
+ [ -9 -13 -221 32 52 1 -11 -12 33 46 258 1 -15 -12 33 49]
134
+ [ -5 -2 -1 0 -257 -13 3 0 -1 -2 -1 -3 1 -3 1 209]
135
+ [ -15 -11 -15 33 256 -1 -17 -14 -225 33 4 -12 -13 -14 31 44]
136
+ [ 11 11 11 11 -245 -3 17 10 13 220 12 5 12 9 14 -35]
137
+ [ -18 -15 -20 29 250 -3 -23 -16 -19 30 -4 -17 -17 -17 -229 28]
138
+ [ -15 -11 -15 -223 242 5 -18 -12 -16 34 -2 -11 -15 -11 -15 33]
139
+ [ 378 120 92 147 152 462 136 96 99 144 -52 412 133 91 -107 138]
140
+
141
+ We construct `\ZZ^n`::
142
+
143
+ sage: from sage.modules.free_module_integer import IntegerLattice
144
+ sage: IntegerLattice(ZZ^10)
145
+ Free module of degree 10 and rank 10 over Integer Ring
146
+ User basis matrix:
147
+ [1 0 0 0 0 0 0 0 0 0]
148
+ [0 1 0 0 0 0 0 0 0 0]
149
+ [0 0 1 0 0 0 0 0 0 0]
150
+ [0 0 0 1 0 0 0 0 0 0]
151
+ [0 0 0 0 1 0 0 0 0 0]
152
+ [0 0 0 0 0 1 0 0 0 0]
153
+ [0 0 0 0 0 0 1 0 0 0]
154
+ [0 0 0 0 0 0 0 1 0 0]
155
+ [0 0 0 0 0 0 0 0 1 0]
156
+ [0 0 0 0 0 0 0 0 0 1]
157
+
158
+
159
+ Sage also interfaces with fpylll's lattice generator::
160
+
161
+ sage: # needs fpylll
162
+ sage: from sage.modules.free_module_integer import IntegerLattice
163
+ sage: from fpylll import IntegerMatrix
164
+ sage: A = IntegerMatrix.random(8, "simdioph", bits=20, bits2=10)
165
+ sage: A = A.to_matrix(matrix(ZZ, 8, 8))
166
+ sage: IntegerLattice(A, lll_reduce=False)
167
+ Free module of degree 8 and rank 8 over Integer Ring
168
+ User basis matrix:
169
+ [ 1024 829556 161099 11567 521155 769480 639201 689979]
170
+ [ 0 1048576 0 0 0 0 0 0]
171
+ [ 0 0 1048576 0 0 0 0 0]
172
+ [ 0 0 0 1048576 0 0 0 0]
173
+ [ 0 0 0 0 1048576 0 0 0]
174
+ [ 0 0 0 0 0 1048576 0 0]
175
+ [ 0 0 0 0 0 0 1048576 0]
176
+ [ 0 0 0 0 0 0 0 1048576]
177
+ """
178
+
179
+ if isinstance(basis, OrderElement_absolute):
180
+ basis = basis.matrix()
181
+ elif isinstance(basis, FreeModule_ambient_pid):
182
+ basis = basis.basis_matrix()
183
+
184
+ try:
185
+ basis = matrix(ZZ, basis)
186
+ except TypeError:
187
+ raise NotImplementedError("only integer lattices supported")
188
+
189
+ return FreeModule_submodule_with_basis_integer(ZZ**basis.ncols(),
190
+ basis=basis,
191
+ lll_reduce=lll_reduce)
192
+
193
+
194
+ class FreeModule_submodule_with_basis_integer(FreeModule_submodule_with_basis_pid):
195
+ r"""
196
+ This class represents submodules of `\ZZ^n` with a distinguished basis.
197
+
198
+ However, most functionality in excess of standard submodules over PID
199
+ is for these submodules considered as discrete subgroups of `\ZZ^n`, i.e.
200
+ as lattices. That is, this class provides functions for computing LLL
201
+ and BKZ reduced bases for this free module with respect to the standard
202
+ Euclidean norm.
203
+
204
+ EXAMPLES::
205
+
206
+ sage: from sage.modules.free_module_integer import IntegerLattice
207
+ sage: L = IntegerLattice(sage.crypto.gen_lattice(type='modular', m=10,
208
+ ....: seed=1337, dual=True)); L
209
+ Free module of degree 10 and rank 10 over Integer Ring
210
+ User basis matrix:
211
+ [-1 1 2 -2 0 1 0 -1 2 1]
212
+ [ 1 0 0 -1 -2 1 -2 3 -1 0]
213
+ [ 1 2 0 2 -1 1 -2 2 2 0]
214
+ [ 1 0 -1 0 2 3 0 0 -1 -2]
215
+ [ 1 -3 0 0 2 1 -2 -1 0 0]
216
+ [-3 0 -1 0 -1 2 -2 0 0 2]
217
+ [ 0 0 0 1 0 2 -3 -3 -2 -1]
218
+ [ 0 -1 -4 -1 -1 1 2 -1 0 1]
219
+ [ 1 1 -2 1 1 2 1 1 -2 3]
220
+ [ 2 -1 1 2 -3 2 2 1 0 1]
221
+ sage: L.shortest_vector()
222
+ (-1, 1, 2, -2, 0, 1, 0, -1, 2, 1)
223
+ """
224
+ def __init__(self, ambient, basis, check=True, echelonize=False,
225
+ echelonized_basis=None, already_echelonized=False,
226
+ lll_reduce=True):
227
+ r"""
228
+ Construct a new submodule of `\ZZ^n` with a distinguished basis.
229
+
230
+ INPUT:
231
+
232
+ - ``ambient`` -- ambient free module over a principal ideal domain
233
+ `\ZZ`, i.e. `\ZZ^n`
234
+
235
+ - ``basis`` -- either a list of vectors or a matrix over the integers
236
+
237
+ - ``check`` -- boolean (default: ``True``); if ``False``, correctness
238
+ of the input will not be checked and type conversion may be omitted,
239
+ use with care
240
+
241
+ - ``echelonize`` -- (default: ``False``) if ``True``, ``basis`` will be
242
+ echelonized and the result will be used as the default basis of the
243
+ constructed submodule
244
+
245
+ - ``echelonized_basis`` -- (default: ``None``) if not ``None``, must
246
+ be the echelonized basis spanning the same submodule as ``basis``
247
+
248
+ - ``already_echelonized`` -- boolean (default: ``False``); if ``True``,
249
+ ``basis`` must be already given in the echelonized form
250
+
251
+ - ``lll_reduce`` -- boolean (default: ``True``); run LLL reduction on the basis
252
+ on construction
253
+
254
+ EXAMPLES::
255
+
256
+ sage: from sage.modules.free_module_integer import IntegerLattice
257
+ sage: IntegerLattice([[1,0,-2], [0,2,5], [0,0,7]])
258
+ Free module of degree 3 and rank 3 over Integer Ring
259
+ User basis matrix:
260
+ [ 1 0 -2]
261
+ [ 1 -2 0]
262
+ [ 2 2 1]
263
+
264
+ sage: M = random_matrix(ZZ, 5, 5, x=-2^20, y=2^20)
265
+ sage: L = IntegerLattice(M)
266
+ sage: M.row_space() == L.matrix().row_space()
267
+ True
268
+
269
+ sage: # needs sage.rings.number_field
270
+ sage: x = polygen(ZZ, 'x')
271
+ sage: K.<a> = NumberField(x^8 + 1)
272
+ sage: O = K.ring_of_integers()
273
+ sage: f = O(a^7 - a^6 + 4*a^5 - a^4 + a^3 + 1)
274
+ sage: IntegerLattice(f)
275
+ Free module of degree 8 and rank 8 over Integer Ring
276
+ User basis matrix:
277
+ [ 0 1 0 1 0 3 3 0]
278
+ [ 1 0 0 1 -1 4 -1 1]
279
+ [ 0 0 1 0 1 0 3 3]
280
+ [-4 1 -1 1 0 0 1 -1]
281
+ [ 1 -3 0 0 0 3 0 -2]
282
+ [ 0 -1 1 -4 1 -1 1 0]
283
+ [ 2 0 -3 -1 0 -3 0 0]
284
+ [-1 0 -1 0 -3 -3 0 0]
285
+ """
286
+ basis = matrix(ZZ, basis)
287
+ self._basis_is_LLL_reduced = False
288
+
289
+ if lll_reduce:
290
+ basis = matrix([v for v in basis.LLL() if v])
291
+ self._basis_is_LLL_reduced = True
292
+
293
+ basis.set_immutable()
294
+ FreeModule_submodule_with_basis_pid.__init__(self,
295
+ ambient=ambient,
296
+ basis=basis,
297
+ check=check,
298
+ echelonize=echelonize,
299
+ echelonized_basis=echelonized_basis,
300
+ already_echelonized=already_echelonized)
301
+
302
+ self._reduced_basis = basis.change_ring(ZZ)
303
+
304
+ @property
305
+ def reduced_basis(self):
306
+ """
307
+ This attribute caches the currently best known reduced basis for
308
+ ``self``, where "best" is defined by the Euclidean norm of the
309
+ first row vector.
310
+
311
+ EXAMPLES::
312
+
313
+ sage: from sage.modules.free_module_integer import IntegerLattice
314
+ sage: M = random_matrix(ZZ, 10, 10)
315
+ sage: while M.rank() < 10:
316
+ ....: M = random_matrix(ZZ, 10, 10)
317
+ sage: L = IntegerLattice(M, lll_reduce=False)
318
+ sage: L.reduced_basis == M
319
+ True
320
+
321
+ sage: LLL = L.LLL()
322
+ sage: LLL == L.reduced_basis or bool(LLL[0].norm() >= M[0].norm()) # needs sage.symbolic
323
+ True
324
+ """
325
+ return self._reduced_basis
326
+
327
+ def LLL(self, *args, **kwds):
328
+ r"""
329
+ Return an LLL reduced basis for ``self``.
330
+
331
+ A lattice basis `(b_1, b_2, ..., b_d)` is `(\delta, \eta)`-LLL-reduced
332
+ if the two following conditions hold:
333
+
334
+ - For any `i > j`, we have `\lvert \mu_{i, j} \rvert \leq \eta`.
335
+
336
+ - For any `i < d`, we have
337
+ `\delta \lvert b_i^* \rvert^2 \leq \lvert b_{i+1}^* +
338
+ \mu_{i+1, i} b_i^* \rvert^2`,
339
+
340
+ where `\mu_{i,j} = \langle b_i, b_j^* \rangle / \langle b_j^*,b_j^*
341
+ \rangle` and `b_i^*` is the `i`-th vector of the Gram-Schmidt
342
+ orthogonalisation of `(b_1, b_2, \ldots, b_d)`.
343
+
344
+ The default reduction parameters are `\delta = 0.99` and
345
+ `\eta = 0.501`.
346
+
347
+ The parameters `\delta` and `\eta` must satisfy:
348
+ `0.25 < \delta \leq 1.0` and `0.5 \leq \eta < \sqrt{\delta}`.
349
+ Polynomial time complexity is only guaranteed for `\delta < 1`.
350
+ Not every algorithm admits the case `\delta = 1`.
351
+
352
+ INPUT:
353
+
354
+ - ``*args`` -- passed through to
355
+ :meth:`sage.matrix.matrix_integer_dense.Matrix_integer_dense.LLL`
356
+
357
+ - ``**kwds`` -- passed through to
358
+ :meth:`sage.matrix.matrix_integer_dense.Matrix_integer_dense.LLL`
359
+
360
+ OUTPUT: integer matrix which is an LLL-reduced basis for this lattice
361
+
362
+ EXAMPLES::
363
+
364
+ sage: from sage.modules.free_module_integer import IntegerLattice
365
+ sage: A = random_matrix(ZZ, 10, 10, x=-2000, y=2000)
366
+ sage: while A.rank() < 10:
367
+ ....: A = random_matrix(ZZ, 10, 10)
368
+ sage: L = IntegerLattice(A, lll_reduce=False); L
369
+ Free module of degree 10 and rank 10 over Integer Ring
370
+ User basis matrix:
371
+ ...
372
+ sage: L.reduced_basis == A
373
+ True
374
+ sage: old = L.reduced_basis[0].norm().n() # needs sage.symbolic
375
+ sage: _ = L.LLL()
376
+ sage: new = L.reduced_basis[0].norm().n() # needs sage.symbolic
377
+ sage: new <= old # needs sage.symbolic
378
+ True
379
+ """
380
+ basis = self.reduced_basis
381
+ basis = [v for v in basis.LLL(*args, **kwds) if v]
382
+ basis = matrix(ZZ, len(basis), len(basis[0]), basis)
383
+ basis.set_immutable()
384
+
385
+ b0 = basis[0]
386
+ rb0 = self.reduced_basis[0]
387
+
388
+ if rb0.dot_product(rb0) > b0.dot_product(b0):
389
+ self._reduced_basis = basis
390
+ return basis
391
+
392
+ def BKZ(self, *args, **kwds):
393
+ """
394
+ Return a Block Korkine-Zolotareff reduced basis for ``self``.
395
+
396
+ INPUT:
397
+
398
+ - ``*args`` -- passed through to
399
+ :meth:`sage.matrix.matrix_integer_dense.Matrix_integer_dense.BKZ`
400
+
401
+ - ``*kwds`` -- passed through to
402
+ :meth:`sage.matrix.matrix_integer_dense.Matrix_integer_dense.BKZ`
403
+
404
+ OUTPUT: integer matrix which is a BKZ-reduced basis for this lattice
405
+
406
+ EXAMPLES::
407
+
408
+ sage: # needs sage.libs.linbox (o/w timeout)
409
+ sage: from sage.modules.free_module_integer import IntegerLattice
410
+ sage: A = sage.crypto.gen_lattice(type='random', n=1, m=60, q=2^60, seed=42)
411
+ sage: L = IntegerLattice(A, lll_reduce=False)
412
+ sage: min(v.norm().n() for v in L.reduced_basis) # needs sage.symbolic
413
+ 4.17330740711759e15
414
+ sage: L.LLL()
415
+ 60 x 60 dense matrix over Integer Ring (use the '.str()' method to see the entries)
416
+ sage: min(v.norm().n() for v in L.reduced_basis) # needs sage.symbolic
417
+ 5.19615242270663
418
+ sage: L.BKZ(block_size=10)
419
+ 60 x 60 dense matrix over Integer Ring (use the '.str()' method to see the entries)
420
+ sage: min(v.norm().n() for v in L.reduced_basis) # needs sage.symbolic
421
+ 4.12310562561766
422
+
423
+ .. NOTE::
424
+
425
+ If ``block_size == L.rank()`` where ``L`` is this lattice, then
426
+ this function performs Hermite-Korkine-Zolotareff (HKZ) reduction.
427
+ """
428
+ basis = self.reduced_basis
429
+ basis = [v for v in basis.BKZ(*args, **kwds) if v]
430
+ basis = matrix(ZZ, len(basis), len(basis[0]), basis)
431
+ basis.set_immutable()
432
+
433
+ if self.reduced_basis[0].dot_product(self.reduced_basis[0]) > basis[0].dot_product(basis[0]):
434
+ self._reduced_basis = basis
435
+ return basis
436
+
437
+ def HKZ(self, *args, **kwds):
438
+ r"""
439
+ Hermite-Korkine-Zolotarev (HKZ) reduce the basis.
440
+
441
+ A basis `B` of a lattice `L`, with orthogonalized basis `B^*` such
442
+ that `B = M \cdot B^*` is HKZ reduced, if and only if, the following
443
+ properties are satisfied:
444
+
445
+ #. The basis `B` is size-reduced, i.e., all off-diagonal
446
+ coefficients of `M` satisfy `|\mu_{i,j}| \leq 1/2`
447
+
448
+ #. The vector `b_1` realizes the first minimum `\lambda_1(L)`.
449
+
450
+ #. The projection of the vectors `b_2, \ldots,b_r` orthogonally to
451
+ `b_1` form an HKZ reduced basis.
452
+
453
+ .. NOTE::
454
+
455
+ This is realized by calling
456
+ :func:`sage.modules.free_module_integer.FreeModule_submodule_with_basis_integer.BKZ` with
457
+ ``block_size == self.rank()``.
458
+
459
+ INPUT:
460
+
461
+ - ``*args`` -- passed through to :meth:`BKZ`
462
+
463
+ - ``*kwds`` -- passed through to :meth:`BKZ`
464
+
465
+ OUTPUT: integer matrix which is a HKZ-reduced basis for this lattice
466
+
467
+ EXAMPLES::
468
+
469
+ sage: from sage.modules.free_module_integer import IntegerLattice
470
+ sage: L = sage.crypto.gen_lattice(type='random', n=1, m=40, q=2^60, seed=1337, lattice=True)
471
+ sage: L.HKZ()
472
+ 40 x 40 dense matrix over Integer Ring (use the '.str()' method to see the entries)
473
+
474
+ sage: L.reduced_basis[0]
475
+ (0, 0, -1, -1, 0, 0, -1, 1, 0, 0, -1, 1, 1, 0, 0, 1, 1, 1, -1, 0, 0, 1, -1, 0, 0, -1, 0, 0, 1, 0, 0, -1, 0, 0, 0, 1, 1, 0, 0, -2)
476
+ """
477
+ return self.BKZ(block_size=self.rank())
478
+
479
+ @cached_method
480
+ def volume(self):
481
+ r"""
482
+ Return `vol(L)` which is `\sqrt{\det(B \cdot B^T)}` for any basis `B`.
483
+
484
+ OUTPUT: integer
485
+
486
+ EXAMPLES::
487
+
488
+ sage: L = sage.crypto.gen_lattice(m=10, seed=1337, lattice=True)
489
+ sage: L.volume()
490
+ 14641
491
+ """
492
+ if self.rank() == self.degree():
493
+ return abs(self.reduced_basis.determinant())
494
+ else:
495
+ return self.gram_matrix().determinant().sqrt()
496
+
497
+ @cached_method
498
+ def discriminant(self):
499
+ r"""
500
+ Return `|\det(G)|`, i.e. the absolute value of the determinant of the
501
+ Gram matrix `B \cdot B^T` for any basis `B`.
502
+
503
+ OUTPUT: integer
504
+
505
+ EXAMPLES::
506
+
507
+ sage: L = sage.crypto.gen_lattice(m=10, seed=1337, lattice=True)
508
+ sage: L.discriminant()
509
+ 214358881
510
+ """
511
+ return abs(self.gram_matrix().determinant())
512
+
513
+ @cached_method
514
+ def is_unimodular(self) -> bool:
515
+ """
516
+ Return ``True`` if this lattice is unimodular.
517
+
518
+ OUTPUT: boolean
519
+
520
+ EXAMPLES::
521
+
522
+ sage: from sage.modules.free_module_integer import IntegerLattice
523
+ sage: L = IntegerLattice([[1, 0], [0, 1]])
524
+ sage: L.is_unimodular()
525
+ True
526
+ sage: IntegerLattice([[2, 0], [0, 3]]).is_unimodular()
527
+ False
528
+ """
529
+ return self.volume() == 1
530
+
531
+ @cached_method
532
+ def shortest_vector(self, update_reduced_basis=True, algorithm='fplll', *args, **kwds):
533
+ r"""
534
+ Return a shortest vector.
535
+
536
+ INPUT:
537
+
538
+ - ``update_reduced_basis`` -- boolean (default: ``True``); set this
539
+ flag if the found vector should be used to improve the basis
540
+
541
+ - ``algorithm`` -- (default: ``'fplll'``) either ``'fplll'`` or
542
+ ``'pari'``
543
+
544
+ - ``*args`` -- passed through to underlying implementation
545
+
546
+ - ``**kwds`` -- passed through to underlying implementation
547
+
548
+ OUTPUT: a shortest nonzero vector for this lattice
549
+
550
+ EXAMPLES::
551
+
552
+ sage: from sage.modules.free_module_integer import IntegerLattice
553
+ sage: A = sage.crypto.gen_lattice(type='random', n=1, m=30, q=2^40, seed=42)
554
+ sage: L = IntegerLattice(A, lll_reduce=False)
555
+ sage: min(v.norm().n() for v in L.reduced_basis) # needs sage.symbolic
556
+ 6.03890756700000e10
557
+
558
+ sage: L.shortest_vector().norm().n() # needs sage.symbolic
559
+ 3.74165738677394
560
+
561
+ sage: L = IntegerLattice(A, lll_reduce=False)
562
+ sage: min(v.norm().n() for v in L.reduced_basis) # needs sage.symbolic
563
+ 6.03890756700000e10
564
+
565
+ sage: L.shortest_vector(algorithm='pari').norm().n() # needs sage.symbolic
566
+ 3.74165738677394
567
+
568
+ sage: L = IntegerLattice(A, lll_reduce=True)
569
+ sage: L.shortest_vector(algorithm='pari').norm().n() # needs sage.symbolic
570
+ 3.74165738677394
571
+ """
572
+ if algorithm == "pari":
573
+ if self._basis_is_LLL_reduced:
574
+ B = self.basis_matrix().change_ring(ZZ)
575
+ qf = self.gram_matrix()
576
+ else:
577
+ B = self.reduced_basis.LLL()
578
+ qf = B*B.transpose()
579
+
580
+ count, length, vectors = qf.__pari__().qfminim()
581
+ v = vectors.sage().columns()[0]
582
+ w = v*B
583
+ elif algorithm == "fplll":
584
+ from fpylll import IntegerMatrix, SVP
585
+ L = IntegerMatrix.from_matrix(self.reduced_basis)
586
+ w = vector(ZZ, SVP.shortest_vector(L, *args, **kwds))
587
+
588
+ else:
589
+ raise ValueError("algorithm '{}' unknown".format(algorithm))
590
+
591
+ if update_reduced_basis:
592
+ self.update_reduced_basis(w)
593
+ return w
594
+
595
+ def update_reduced_basis(self, w):
596
+ """
597
+ Inject the vector ``w`` and run LLL to update the basis.
598
+
599
+ INPUT:
600
+
601
+ - ``w`` -- a vector
602
+
603
+ OUTPUT: nothing is returned but the internal state is modified
604
+
605
+ EXAMPLES::
606
+
607
+ sage: from sage.modules.free_module_integer import IntegerLattice
608
+ sage: A = sage.crypto.gen_lattice(type='random', n=1, m=30, q=2^40, seed=42)
609
+ sage: L = IntegerLattice(A)
610
+ sage: B = L.reduced_basis
611
+ sage: v = L.shortest_vector(update_reduced_basis=False)
612
+ sage: L.update_reduced_basis(v)
613
+ sage: bool(L.reduced_basis[0].norm() < B[0].norm()) # needs sage.symbolic
614
+ True
615
+ """
616
+ w = matrix(ZZ, w)
617
+ L = w.stack(self.reduced_basis).LLL()
618
+ assert L[0] == 0
619
+ self._reduced_basis = L.matrix_from_rows(range(1, L.nrows()))
620
+
621
+ @cached_method
622
+ def voronoi_cell(self, radius=None):
623
+ """
624
+ Compute the Voronoi cell of a lattice, returning a Polyhedron.
625
+
626
+ INPUT:
627
+
628
+ - ``radius`` -- (default: automatic determination) radius of ball
629
+ containing considered vertices
630
+
631
+ OUTPUT: the Voronoi cell as a Polyhedron instance
632
+
633
+ The result is cached so that subsequent calls to this function
634
+ return instantly.
635
+
636
+ EXAMPLES::
637
+
638
+ sage: from sage.modules.free_module_integer import IntegerLattice
639
+ sage: L = IntegerLattice([[1, 0], [0, 1]])
640
+ sage: V = L.voronoi_cell()
641
+ sage: V.Vrepresentation()
642
+ (A vertex at (1/2, -1/2),
643
+ A vertex at (1/2, 1/2),
644
+ A vertex at (-1/2, 1/2),
645
+ A vertex at (-1/2, -1/2))
646
+
647
+ The volume of the Voronoi cell is the square root of the
648
+ discriminant of the lattice::
649
+
650
+ sage: L = IntegerLattice(Matrix(ZZ, 4, 4, [[0,0,1,-1], [1,-1,2,1],
651
+ ....: [-6,0,3,3,], [-6,-24,-6,-5]])); L
652
+ Free module of degree 4 and rank 4 over Integer Ring
653
+ User basis matrix:
654
+ [ 0 0 1 -1]
655
+ [ 1 -1 2 1]
656
+ [ -6 0 3 3]
657
+ [ -6 -24 -6 -5]
658
+ sage: V = L.voronoi_cell() # long time
659
+ sage: V.volume() # long time
660
+ 678
661
+ sage: sqrt(L.discriminant())
662
+ 678
663
+
664
+ Lattices not having full dimension are handled as well::
665
+
666
+ sage: L = IntegerLattice([[2, 0, 0], [0, 2, 0]])
667
+ sage: V = L.voronoi_cell()
668
+ sage: V.Hrepresentation()
669
+ (An inequality (-1, 0, 0) x + 1 >= 0,
670
+ An inequality (0, -1, 0) x + 1 >= 0,
671
+ An inequality (1, 0, 0) x + 1 >= 0,
672
+ An inequality (0, 1, 0) x + 1 >= 0)
673
+
674
+ ALGORITHM:
675
+
676
+ Uses parts of the algorithm from [VB1996]_.
677
+ """
678
+ if not self._basis_is_LLL_reduced:
679
+ self.LLL()
680
+
681
+ B = self.reduced_basis
682
+
683
+ from .diamond_cutting import calculate_voronoi_cell
684
+ return calculate_voronoi_cell(B, radius=radius)
685
+
686
+ def voronoi_relevant_vectors(self):
687
+ """
688
+ Compute the embedded vectors inducing the Voronoi cell.
689
+
690
+ OUTPUT: the list of Voronoi relevant vectors
691
+
692
+ EXAMPLES::
693
+
694
+ sage: from sage.modules.free_module_integer import IntegerLattice
695
+ sage: L = IntegerLattice([[3, 0], [4, 0]])
696
+ sage: L.voronoi_relevant_vectors()
697
+ [(-1, 0), (1, 0)]
698
+ """
699
+ V = self.voronoi_cell()
700
+
701
+ def defining_point(ieq):
702
+ """
703
+ Compute the point defining an inequality.
704
+
705
+ INPUT:
706
+
707
+ - ``ieq`` -- an inequality in the form [c, a1, a2, ...]
708
+ meaning a1 * x1 + a2 * x2 + ... ≦ c
709
+
710
+ OUTPUT:
711
+
712
+ The point orthogonal to the hyperplane defined by ``ieq``
713
+ in twice the distance from the origin.
714
+ """
715
+ c = ieq[0]
716
+ a = ieq[1:]
717
+ n = sum(y ** 2 for y in a)
718
+ return vector([2 * y * c / n for y in a])
719
+
720
+ return [defining_point(ieq) for ieq in V.inequality_generator()]
721
+
722
+ def closest_vector(self, t):
723
+ """
724
+ Compute the closest vector in the embedded lattice to a given vector.
725
+
726
+ INPUT:
727
+
728
+ - ``t`` -- the target vector to compute the closest vector to
729
+
730
+ OUTPUT: the vector in the lattice closest to ``t``
731
+
732
+ EXAMPLES::
733
+
734
+ sage: from sage.modules.free_module_integer import IntegerLattice
735
+ sage: L = IntegerLattice([[1, 0], [0, 1]])
736
+ sage: L.closest_vector((-6, 5/3))
737
+ (-6, 2)
738
+
739
+ ALGORITHM:
740
+
741
+ Uses the algorithm from [MV2010]_.
742
+
743
+ TESTS:
744
+
745
+ Check that the example from :issue:`29866` works::
746
+
747
+ sage: from sage.modules.free_module_integer import IntegerLattice
748
+ sage: M = matrix(ZZ, [[20957228, -4966110], [9411844, 19625639]])
749
+ sage: L = IntegerLattice(M)
750
+ sage: u = vector([-423434678248195, -18882583298608161305227077482])
751
+ sage: L.closest_vector(u) in L
752
+ True
753
+
754
+ Check that the example, of non-maximal rank, from :issue:`32486` works::
755
+
756
+ from sage.modules.free_module_integer import IntegerLattice
757
+ L = IntegerLattice([[-1, 0, 1],[1,0,2]])
758
+ L.closest_vector((1,1,1))
759
+ (2, 0, 1)
760
+ """
761
+ voronoi_cell = self.voronoi_cell()
762
+
763
+ def projection(M, v):
764
+ Mt = M.transpose()
765
+ P = Mt * (M * Mt) ** (-1) * M
766
+ return P * v
767
+
768
+ t = projection(matrix(self.reduced_basis), vector(t))
769
+
770
+ def CVPP_2V(t, V, voronoi_cell):
771
+ t_new = t
772
+ while not voronoi_cell.contains(t_new.list()):
773
+ v = max(V, key=lambda v: t_new * v / v.dot_product(v))
774
+ t_new = t_new - v
775
+ return t - t_new
776
+
777
+ V = self.voronoi_relevant_vectors()
778
+ t = vector(t)
779
+ p = 0
780
+ while not (ZZ(2 ** p) * voronoi_cell).contains(t):
781
+ p += 1
782
+ t_new = t
783
+ i = p
784
+ while i >= 1:
785
+ V_scaled = [v * (2 ** (i - 1)) for v in V]
786
+ t_new = t_new - CVPP_2V(t_new, V_scaled, ZZ(2 ** (i - 1)) * voronoi_cell)
787
+ i -= 1
788
+ return t - t_new
789
+
790
+ def approximate_closest_vector(self, t, delta=None, algorithm='embedding', *args, **kwargs):
791
+ r"""
792
+ Compute a vector `w` in this lattice which is close to the target vector `t`.
793
+ The ratio `\frac{|t-w|}{|t-u|}`, where `u` is the closest lattice vector to `t`,
794
+ is exponential in the dimension of the lattice.
795
+
796
+ This will check whether the basis is already `\delta`-LLL-reduced
797
+ and otherwise it will run LLL to make sure that it is. For more
798
+ information about ``delta`` see :meth:`LLL`.
799
+
800
+ INPUT:
801
+
802
+ - ``t`` -- the target vector to compute a close vector to
803
+
804
+ - ``delta`` -- (default: ``0.99``) the LLL reduction parameter
805
+
806
+ - ``algorithm`` -- string (default: 'embedding'):
807
+
808
+ - ``'embedding'`` -- embeds the lattice in a d+1 dimensional space
809
+ and seeks short vectors using LLL. This calls LLL twice but is
810
+ usually still quick.
811
+
812
+ - ``'nearest_plane'`` -- uses the "NEAREST PLANE" algorithm from [Bab86]_
813
+
814
+ - ``'rounding_off'`` -- uses the "ROUNDING OFF" algorithm from [Bab86]_.
815
+ This yields slightly worse results than the other algorithms but is
816
+ at least faster than ``'nearest_plane'``.
817
+
818
+ - ``*args`` -- passed through to :meth:`LLL`
819
+
820
+ - ``**kwds`` -- passed through to :meth:`LLL`
821
+
822
+ OUTPUT: the vector `w` described above
823
+
824
+ EXAMPLES::
825
+
826
+ sage: from sage.modules.free_module_integer import IntegerLattice
827
+ sage: L = IntegerLattice([[1, 0], [0, 1]])
828
+ sage: L.approximate_closest_vector((-6, 5/3))
829
+ (-6, 2)
830
+
831
+ The quality of the approximation depends on ``delta``::
832
+
833
+ sage: from sage.modules.free_module_integer import IntegerLattice
834
+ sage: L = IntegerLattice([[101, 0, 0, 0], [0, 101, 0, 0],
835
+ ....: [0, 0, 101, 0], [-28, 39, 45, 1]], lll_reduce=False)
836
+ sage: t = vector([1337]*4)
837
+ sage: L.approximate_closest_vector(t, delta=0.26)
838
+ (1331, 1324, 1349, 1334)
839
+ sage: L.approximate_closest_vector(t, delta=0.99)
840
+ (1326, 1349, 1339, 1345)
841
+ sage: L.closest_vector(t)
842
+ (1326, 1349, 1339, 1345)
843
+
844
+ sage: # Checking that the other algorithms work
845
+ sage: L.approximate_closest_vector(t, algorithm='nearest_plane')
846
+ (1326, 1349, 1339, 1345)
847
+ sage: L.approximate_closest_vector(t, algorithm='rounding_off')
848
+ (1331, 1324, 1349, 1334)
849
+ """
850
+ if delta is None:
851
+ delta = ZZ(99)/ZZ(100)
852
+
853
+ # Bound checks on delta are performed in is_LLL_reduced
854
+ if not self._reduced_basis.is_LLL_reduced(delta=delta):
855
+ self.LLL(*args, delta=delta, **kwargs)
856
+
857
+ B = self._reduced_basis
858
+ t = vector(t)
859
+
860
+ if algorithm == 'embedding':
861
+ L = matrix(QQ, B.nrows()+1, B.ncols()+1)
862
+ L.set_block(0, 0, B)
863
+ L.set_block(B.nrows(), 0, matrix(t))
864
+ weight = (B[-1]*B[-1]).isqrt()+1 # Norm of the largest vector
865
+ L[-1, -1] = weight
866
+
867
+ # The vector should be the last row but we iterate just in case
868
+ for v in reversed(L.LLL(delta=delta, *args, **kwargs).rows()):
869
+ if abs(v[-1]) == weight:
870
+ return t - v[:-1]*v[-1].sign()
871
+ raise ValueError('No suitable vector found in basis.'
872
+ 'This is a bug, please report it.')
873
+
874
+ elif algorithm == 'nearest_plane':
875
+ G = B.gram_schmidt()[0]
876
+
877
+ b = t
878
+ for i in reversed(range(G.nrows())):
879
+ b -= B[i] * ((b * G[i]) / (G[i] * G[i])).round("even")
880
+ return (t - b).change_ring(ZZ)
881
+
882
+ elif algorithm == 'rounding_off':
883
+ # t = x*B might not have a solution over QQ so we instead solve
884
+ # the system x*B*B^T = t*B^T which will be the "closest" solution
885
+ # if it does not exist, same effect as using the psuedo-inverse
886
+ sol = (B*B.T).solve_left(t*B.T)
887
+ return vector(ZZ, [QQ(x).round('even') for x in sol])*B
888
+
889
+ else:
890
+ raise ValueError("algorithm must be one of 'embedding', 'nearest_plane' or 'rounding_off'")
891
+
892
+ def babai(self, *args, **kwargs):
893
+ """
894
+ Alias for :meth:`approximate_closest_vector`.
895
+ """
896
+ return self.approximate_closest_vector(*args, **kwargs)