passagemath-modules 10.6.31rc3__cp314-cp314-musllinux_1_2_aarch64.whl

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

Potentially problematic release.


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

Files changed (807) hide show
  1. passagemath_modules-10.6.31rc3.dist-info/METADATA +281 -0
  2. passagemath_modules-10.6.31rc3.dist-info/RECORD +807 -0
  3. passagemath_modules-10.6.31rc3.dist-info/WHEEL +5 -0
  4. passagemath_modules-10.6.31rc3.dist-info/top_level.txt +2 -0
  5. passagemath_modules.libs/libgcc_s-2d945d6c.so.1 +0 -0
  6. passagemath_modules.libs/libgfortran-67378ab2.so.5.0.0 +0 -0
  7. passagemath_modules.libs/libgmp-28992bcb.so.10.5.0 +0 -0
  8. passagemath_modules.libs/libgsl-23768756.so.28.0.0 +0 -0
  9. passagemath_modules.libs/libmpc-7897025b.so.3.3.1 +0 -0
  10. passagemath_modules.libs/libmpfr-e34bb864.so.6.2.1 +0 -0
  11. passagemath_modules.libs/libopenblasp-r0-503f0c35.3.29.so +0 -0
  12. sage/algebras/all__sagemath_modules.py +20 -0
  13. sage/algebras/catalog.py +148 -0
  14. sage/algebras/clifford_algebra.py +3107 -0
  15. sage/algebras/clifford_algebra_element.cpython-314-aarch64-linux-musl.so +0 -0
  16. sage/algebras/clifford_algebra_element.pxd +16 -0
  17. sage/algebras/clifford_algebra_element.pyx +997 -0
  18. sage/algebras/commutative_dga.py +4252 -0
  19. sage/algebras/exterior_algebra_groebner.cpython-314-aarch64-linux-musl.so +0 -0
  20. sage/algebras/exterior_algebra_groebner.pxd +55 -0
  21. sage/algebras/exterior_algebra_groebner.pyx +727 -0
  22. sage/algebras/finite_dimensional_algebras/all.py +2 -0
  23. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra.py +1029 -0
  24. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.cpython-314-aarch64-linux-musl.so +0 -0
  25. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pxd +12 -0
  26. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pyx +706 -0
  27. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_ideal.py +196 -0
  28. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_morphism.py +255 -0
  29. sage/algebras/finite_gca.py +528 -0
  30. sage/algebras/group_algebra.py +232 -0
  31. sage/algebras/lie_algebras/abelian.py +197 -0
  32. sage/algebras/lie_algebras/affine_lie_algebra.py +1213 -0
  33. sage/algebras/lie_algebras/all.py +25 -0
  34. sage/algebras/lie_algebras/all__sagemath_modules.py +1 -0
  35. sage/algebras/lie_algebras/bch.py +177 -0
  36. sage/algebras/lie_algebras/bgg_dual_module.py +1184 -0
  37. sage/algebras/lie_algebras/bgg_resolution.py +232 -0
  38. sage/algebras/lie_algebras/center_uea.py +767 -0
  39. sage/algebras/lie_algebras/classical_lie_algebra.py +2516 -0
  40. sage/algebras/lie_algebras/examples.py +683 -0
  41. sage/algebras/lie_algebras/free_lie_algebra.py +973 -0
  42. sage/algebras/lie_algebras/heisenberg.py +820 -0
  43. sage/algebras/lie_algebras/lie_algebra.py +1562 -0
  44. sage/algebras/lie_algebras/lie_algebra_element.cpython-314-aarch64-linux-musl.so +0 -0
  45. sage/algebras/lie_algebras/lie_algebra_element.pxd +68 -0
  46. sage/algebras/lie_algebras/lie_algebra_element.pyx +2122 -0
  47. sage/algebras/lie_algebras/morphism.py +661 -0
  48. sage/algebras/lie_algebras/nilpotent_lie_algebra.py +457 -0
  49. sage/algebras/lie_algebras/onsager.py +1324 -0
  50. sage/algebras/lie_algebras/poincare_birkhoff_witt.py +816 -0
  51. sage/algebras/lie_algebras/quotient.py +462 -0
  52. sage/algebras/lie_algebras/rank_two_heisenberg_virasoro.py +355 -0
  53. sage/algebras/lie_algebras/representation.py +1040 -0
  54. sage/algebras/lie_algebras/structure_coefficients.py +459 -0
  55. sage/algebras/lie_algebras/subalgebra.py +967 -0
  56. sage/algebras/lie_algebras/symplectic_derivation.py +289 -0
  57. sage/algebras/lie_algebras/verma_module.py +1630 -0
  58. sage/algebras/lie_algebras/virasoro.py +1186 -0
  59. sage/algebras/octonion_algebra.cpython-314-aarch64-linux-musl.so +0 -0
  60. sage/algebras/octonion_algebra.pxd +20 -0
  61. sage/algebras/octonion_algebra.pyx +987 -0
  62. sage/algebras/orlik_solomon.py +907 -0
  63. sage/algebras/orlik_terao.py +779 -0
  64. sage/algebras/steenrod/all.py +7 -0
  65. sage/algebras/steenrod/steenrod_algebra.py +4258 -0
  66. sage/algebras/steenrod/steenrod_algebra_bases.py +1179 -0
  67. sage/algebras/steenrod/steenrod_algebra_misc.py +1167 -0
  68. sage/algebras/steenrod/steenrod_algebra_mult.py +954 -0
  69. sage/algebras/weyl_algebra.py +1126 -0
  70. sage/all__sagemath_modules.py +62 -0
  71. sage/calculus/all__sagemath_modules.py +19 -0
  72. sage/calculus/expr.py +205 -0
  73. sage/calculus/integration.cpython-314-aarch64-linux-musl.so +0 -0
  74. sage/calculus/integration.pyx +698 -0
  75. sage/calculus/interpolation.cpython-314-aarch64-linux-musl.so +0 -0
  76. sage/calculus/interpolation.pxd +13 -0
  77. sage/calculus/interpolation.pyx +387 -0
  78. sage/calculus/interpolators.cpython-314-aarch64-linux-musl.so +0 -0
  79. sage/calculus/interpolators.pyx +326 -0
  80. sage/calculus/ode.cpython-314-aarch64-linux-musl.so +0 -0
  81. sage/calculus/ode.pxd +5 -0
  82. sage/calculus/ode.pyx +610 -0
  83. sage/calculus/riemann.cpython-314-aarch64-linux-musl.so +0 -0
  84. sage/calculus/riemann.pyx +1521 -0
  85. sage/calculus/test_sympy.py +201 -0
  86. sage/calculus/transforms/all.py +7 -0
  87. sage/calculus/transforms/dft.py +844 -0
  88. sage/calculus/transforms/dwt.cpython-314-aarch64-linux-musl.so +0 -0
  89. sage/calculus/transforms/dwt.pxd +7 -0
  90. sage/calculus/transforms/dwt.pyx +160 -0
  91. sage/calculus/transforms/fft.cpython-314-aarch64-linux-musl.so +0 -0
  92. sage/calculus/transforms/fft.pxd +12 -0
  93. sage/calculus/transforms/fft.pyx +487 -0
  94. sage/calculus/wester.py +662 -0
  95. sage/coding/abstract_code.py +1108 -0
  96. sage/coding/ag_code.py +868 -0
  97. sage/coding/ag_code_decoders.cpython-314-aarch64-linux-musl.so +0 -0
  98. sage/coding/ag_code_decoders.pyx +2639 -0
  99. sage/coding/all.py +15 -0
  100. sage/coding/bch_code.py +494 -0
  101. sage/coding/binary_code.cpython-314-aarch64-linux-musl.so +0 -0
  102. sage/coding/binary_code.pxd +124 -0
  103. sage/coding/binary_code.pyx +4139 -0
  104. sage/coding/bounds_catalog.py +43 -0
  105. sage/coding/channel.py +819 -0
  106. sage/coding/channels_catalog.py +29 -0
  107. sage/coding/code_bounds.py +755 -0
  108. sage/coding/code_constructions.py +804 -0
  109. sage/coding/codes_catalog.py +111 -0
  110. sage/coding/cyclic_code.py +1329 -0
  111. sage/coding/databases.py +316 -0
  112. sage/coding/decoder.py +373 -0
  113. sage/coding/decoders_catalog.py +88 -0
  114. sage/coding/delsarte_bounds.py +709 -0
  115. sage/coding/encoder.py +390 -0
  116. sage/coding/encoders_catalog.py +64 -0
  117. sage/coding/extended_code.py +468 -0
  118. sage/coding/gabidulin_code.py +1058 -0
  119. sage/coding/golay_code.py +404 -0
  120. sage/coding/goppa_code.py +441 -0
  121. sage/coding/grs_code.py +2371 -0
  122. sage/coding/guava.py +107 -0
  123. sage/coding/guruswami_sudan/all.py +1 -0
  124. sage/coding/guruswami_sudan/gs_decoder.py +897 -0
  125. sage/coding/guruswami_sudan/interpolation.py +409 -0
  126. sage/coding/guruswami_sudan/utils.py +176 -0
  127. sage/coding/hamming_code.py +176 -0
  128. sage/coding/information_set_decoder.py +1032 -0
  129. sage/coding/kasami_codes.cpython-314-aarch64-linux-musl.so +0 -0
  130. sage/coding/kasami_codes.pyx +351 -0
  131. sage/coding/linear_code.py +3067 -0
  132. sage/coding/linear_code_no_metric.py +1354 -0
  133. sage/coding/linear_rank_metric.py +961 -0
  134. sage/coding/parity_check_code.py +353 -0
  135. sage/coding/punctured_code.py +719 -0
  136. sage/coding/reed_muller_code.py +999 -0
  137. sage/coding/self_dual_codes.py +942 -0
  138. sage/coding/source_coding/all.py +2 -0
  139. sage/coding/source_coding/huffman.py +553 -0
  140. sage/coding/subfield_subcode.py +423 -0
  141. sage/coding/two_weight_db.py +399 -0
  142. sage/combinat/all__sagemath_modules.py +7 -0
  143. sage/combinat/cartesian_product.py +347 -0
  144. sage/combinat/family.py +11 -0
  145. sage/combinat/free_module.py +1977 -0
  146. sage/combinat/root_system/all.py +147 -0
  147. sage/combinat/root_system/ambient_space.py +527 -0
  148. sage/combinat/root_system/associahedron.py +471 -0
  149. sage/combinat/root_system/braid_move_calculator.py +143 -0
  150. sage/combinat/root_system/braid_orbit.cpython-314-aarch64-linux-musl.so +0 -0
  151. sage/combinat/root_system/braid_orbit.pyx +144 -0
  152. sage/combinat/root_system/branching_rules.py +2301 -0
  153. sage/combinat/root_system/cartan_matrix.py +1245 -0
  154. sage/combinat/root_system/cartan_type.py +3069 -0
  155. sage/combinat/root_system/coxeter_group.py +162 -0
  156. sage/combinat/root_system/coxeter_matrix.py +1261 -0
  157. sage/combinat/root_system/coxeter_type.py +681 -0
  158. sage/combinat/root_system/dynkin_diagram.py +900 -0
  159. sage/combinat/root_system/extended_affine_weyl_group.py +2993 -0
  160. sage/combinat/root_system/fundamental_group.py +795 -0
  161. sage/combinat/root_system/hecke_algebra_representation.py +1203 -0
  162. sage/combinat/root_system/integrable_representations.py +1227 -0
  163. sage/combinat/root_system/non_symmetric_macdonald_polynomials.py +1965 -0
  164. sage/combinat/root_system/pieri_factors.py +1147 -0
  165. sage/combinat/root_system/plot.py +1615 -0
  166. sage/combinat/root_system/root_lattice_realization_algebras.py +1214 -0
  167. sage/combinat/root_system/root_lattice_realizations.py +4628 -0
  168. sage/combinat/root_system/root_space.py +487 -0
  169. sage/combinat/root_system/root_system.py +882 -0
  170. sage/combinat/root_system/type_A.py +348 -0
  171. sage/combinat/root_system/type_A_affine.py +227 -0
  172. sage/combinat/root_system/type_A_infinity.py +241 -0
  173. sage/combinat/root_system/type_B.py +347 -0
  174. sage/combinat/root_system/type_BC_affine.py +287 -0
  175. sage/combinat/root_system/type_B_affine.py +216 -0
  176. sage/combinat/root_system/type_C.py +317 -0
  177. sage/combinat/root_system/type_C_affine.py +188 -0
  178. sage/combinat/root_system/type_D.py +357 -0
  179. sage/combinat/root_system/type_D_affine.py +208 -0
  180. sage/combinat/root_system/type_E.py +641 -0
  181. sage/combinat/root_system/type_E_affine.py +231 -0
  182. sage/combinat/root_system/type_F.py +387 -0
  183. sage/combinat/root_system/type_F_affine.py +137 -0
  184. sage/combinat/root_system/type_G.py +293 -0
  185. sage/combinat/root_system/type_G_affine.py +132 -0
  186. sage/combinat/root_system/type_H.py +105 -0
  187. sage/combinat/root_system/type_I.py +110 -0
  188. sage/combinat/root_system/type_Q.py +150 -0
  189. sage/combinat/root_system/type_affine.py +509 -0
  190. sage/combinat/root_system/type_dual.py +704 -0
  191. sage/combinat/root_system/type_folded.py +301 -0
  192. sage/combinat/root_system/type_marked.py +748 -0
  193. sage/combinat/root_system/type_reducible.py +601 -0
  194. sage/combinat/root_system/type_relabel.py +730 -0
  195. sage/combinat/root_system/type_super_A.py +837 -0
  196. sage/combinat/root_system/weight_lattice_realizations.py +1188 -0
  197. sage/combinat/root_system/weight_space.py +639 -0
  198. sage/combinat/root_system/weyl_characters.py +2238 -0
  199. sage/crypto/__init__.py +4 -0
  200. sage/crypto/all.py +28 -0
  201. sage/crypto/block_cipher/all.py +7 -0
  202. sage/crypto/block_cipher/des.py +1065 -0
  203. sage/crypto/block_cipher/miniaes.py +2171 -0
  204. sage/crypto/block_cipher/present.py +909 -0
  205. sage/crypto/block_cipher/sdes.py +1527 -0
  206. sage/crypto/boolean_function.cpython-314-aarch64-linux-musl.so +0 -0
  207. sage/crypto/boolean_function.pxd +10 -0
  208. sage/crypto/boolean_function.pyx +1487 -0
  209. sage/crypto/cipher.py +78 -0
  210. sage/crypto/classical.py +3668 -0
  211. sage/crypto/classical_cipher.py +569 -0
  212. sage/crypto/cryptosystem.py +387 -0
  213. sage/crypto/key_exchange/all.py +7 -0
  214. sage/crypto/key_exchange/catalog.py +24 -0
  215. sage/crypto/key_exchange/diffie_hellman.py +323 -0
  216. sage/crypto/key_exchange/key_exchange_scheme.py +107 -0
  217. sage/crypto/lattice.py +312 -0
  218. sage/crypto/lfsr.py +295 -0
  219. sage/crypto/lwe.py +840 -0
  220. sage/crypto/mq/__init__.py +4 -0
  221. sage/crypto/mq/mpolynomialsystemgenerator.py +204 -0
  222. sage/crypto/mq/rijndael_gf.py +2345 -0
  223. sage/crypto/mq/sbox.py +7 -0
  224. sage/crypto/mq/sr.py +3344 -0
  225. sage/crypto/public_key/all.py +5 -0
  226. sage/crypto/public_key/blum_goldwasser.py +776 -0
  227. sage/crypto/sbox.cpython-314-aarch64-linux-musl.so +0 -0
  228. sage/crypto/sbox.pyx +2090 -0
  229. sage/crypto/sboxes.py +2090 -0
  230. sage/crypto/stream.py +390 -0
  231. sage/crypto/stream_cipher.py +297 -0
  232. sage/crypto/util.py +519 -0
  233. sage/ext/all__sagemath_modules.py +1 -0
  234. sage/ext/interpreters/__init__.py +1 -0
  235. sage/ext/interpreters/all__sagemath_modules.py +2 -0
  236. sage/ext/interpreters/wrapper_cc.cpython-314-aarch64-linux-musl.so +0 -0
  237. sage/ext/interpreters/wrapper_cc.pxd +30 -0
  238. sage/ext/interpreters/wrapper_cc.pyx +252 -0
  239. sage/ext/interpreters/wrapper_cdf.cpython-314-aarch64-linux-musl.so +0 -0
  240. sage/ext/interpreters/wrapper_cdf.pxd +26 -0
  241. sage/ext/interpreters/wrapper_cdf.pyx +245 -0
  242. sage/ext/interpreters/wrapper_rdf.cpython-314-aarch64-linux-musl.so +0 -0
  243. sage/ext/interpreters/wrapper_rdf.pxd +23 -0
  244. sage/ext/interpreters/wrapper_rdf.pyx +221 -0
  245. sage/ext/interpreters/wrapper_rr.cpython-314-aarch64-linux-musl.so +0 -0
  246. sage/ext/interpreters/wrapper_rr.pxd +28 -0
  247. sage/ext/interpreters/wrapper_rr.pyx +335 -0
  248. sage/geometry/all__sagemath_modules.py +5 -0
  249. sage/geometry/toric_lattice.py +1745 -0
  250. sage/geometry/toric_lattice_element.cpython-314-aarch64-linux-musl.so +0 -0
  251. sage/geometry/toric_lattice_element.pyx +432 -0
  252. sage/groups/abelian_gps/abelian_group.py +1925 -0
  253. sage/groups/abelian_gps/abelian_group_element.py +164 -0
  254. sage/groups/abelian_gps/all__sagemath_modules.py +5 -0
  255. sage/groups/abelian_gps/dual_abelian_group.py +421 -0
  256. sage/groups/abelian_gps/dual_abelian_group_element.py +179 -0
  257. sage/groups/abelian_gps/element_base.py +341 -0
  258. sage/groups/abelian_gps/values.py +488 -0
  259. sage/groups/additive_abelian/additive_abelian_group.py +476 -0
  260. sage/groups/additive_abelian/additive_abelian_wrapper.py +857 -0
  261. sage/groups/additive_abelian/all.py +4 -0
  262. sage/groups/additive_abelian/qmodnz.py +231 -0
  263. sage/groups/additive_abelian/qmodnz_element.py +349 -0
  264. sage/groups/affine_gps/affine_group.py +535 -0
  265. sage/groups/affine_gps/all.py +1 -0
  266. sage/groups/affine_gps/catalog.py +17 -0
  267. sage/groups/affine_gps/euclidean_group.py +246 -0
  268. sage/groups/affine_gps/group_element.py +562 -0
  269. sage/groups/all__sagemath_modules.py +12 -0
  270. sage/groups/galois_group.py +479 -0
  271. sage/groups/matrix_gps/all.py +4 -0
  272. sage/groups/matrix_gps/all__sagemath_modules.py +13 -0
  273. sage/groups/matrix_gps/catalog.py +26 -0
  274. sage/groups/matrix_gps/coxeter_group.py +927 -0
  275. sage/groups/matrix_gps/finitely_generated.py +487 -0
  276. sage/groups/matrix_gps/group_element.cpython-314-aarch64-linux-musl.so +0 -0
  277. sage/groups/matrix_gps/group_element.pxd +11 -0
  278. sage/groups/matrix_gps/group_element.pyx +431 -0
  279. sage/groups/matrix_gps/linear.py +440 -0
  280. sage/groups/matrix_gps/matrix_group.py +617 -0
  281. sage/groups/matrix_gps/named_group.py +296 -0
  282. sage/groups/matrix_gps/orthogonal.py +544 -0
  283. sage/groups/matrix_gps/symplectic.py +251 -0
  284. sage/groups/matrix_gps/unitary.py +436 -0
  285. sage/groups/misc_gps/all__sagemath_modules.py +1 -0
  286. sage/groups/misc_gps/argument_groups.py +1905 -0
  287. sage/groups/misc_gps/imaginary_groups.py +479 -0
  288. sage/groups/perm_gps/all__sagemath_modules.py +1 -0
  289. sage/groups/perm_gps/partn_ref/all__sagemath_modules.py +1 -0
  290. sage/groups/perm_gps/partn_ref/refinement_binary.cpython-314-aarch64-linux-musl.so +0 -0
  291. sage/groups/perm_gps/partn_ref/refinement_binary.pxd +41 -0
  292. sage/groups/perm_gps/partn_ref/refinement_binary.pyx +1167 -0
  293. sage/groups/perm_gps/partn_ref/refinement_matrices.cpython-314-aarch64-linux-musl.so +0 -0
  294. sage/groups/perm_gps/partn_ref/refinement_matrices.pxd +31 -0
  295. sage/groups/perm_gps/partn_ref/refinement_matrices.pyx +385 -0
  296. sage/homology/algebraic_topological_model.py +595 -0
  297. sage/homology/all.py +2 -0
  298. sage/homology/all__sagemath_modules.py +8 -0
  299. sage/homology/chain_complex.py +2148 -0
  300. sage/homology/chain_complex_homspace.py +165 -0
  301. sage/homology/chain_complex_morphism.py +629 -0
  302. sage/homology/chain_homotopy.py +604 -0
  303. sage/homology/chains.py +653 -0
  304. sage/homology/free_resolution.py +923 -0
  305. sage/homology/graded_resolution.py +567 -0
  306. sage/homology/hochschild_complex.py +756 -0
  307. sage/homology/homology_group.py +188 -0
  308. sage/homology/homology_morphism.py +422 -0
  309. sage/homology/homology_vector_space_with_basis.py +1454 -0
  310. sage/homology/koszul_complex.py +169 -0
  311. sage/homology/matrix_utils.py +205 -0
  312. sage/libs/all__sagemath_modules.py +1 -0
  313. sage/libs/gsl/__init__.py +1 -0
  314. sage/libs/gsl/airy.pxd +56 -0
  315. sage/libs/gsl/all.pxd +66 -0
  316. sage/libs/gsl/array.cpython-314-aarch64-linux-musl.so +0 -0
  317. sage/libs/gsl/array.pxd +5 -0
  318. sage/libs/gsl/array.pyx +102 -0
  319. sage/libs/gsl/bessel.pxd +208 -0
  320. sage/libs/gsl/blas.pxd +116 -0
  321. sage/libs/gsl/blas_types.pxd +34 -0
  322. sage/libs/gsl/block.pxd +52 -0
  323. sage/libs/gsl/chebyshev.pxd +37 -0
  324. sage/libs/gsl/clausen.pxd +12 -0
  325. sage/libs/gsl/combination.pxd +47 -0
  326. sage/libs/gsl/complex.pxd +151 -0
  327. sage/libs/gsl/coulomb.pxd +30 -0
  328. sage/libs/gsl/coupling.pxd +21 -0
  329. sage/libs/gsl/dawson.pxd +12 -0
  330. sage/libs/gsl/debye.pxd +24 -0
  331. sage/libs/gsl/dilog.pxd +14 -0
  332. sage/libs/gsl/eigen.pxd +46 -0
  333. sage/libs/gsl/elementary.pxd +12 -0
  334. sage/libs/gsl/ellint.pxd +48 -0
  335. sage/libs/gsl/elljac.pxd +8 -0
  336. sage/libs/gsl/erf.pxd +32 -0
  337. sage/libs/gsl/errno.pxd +26 -0
  338. sage/libs/gsl/exp.pxd +44 -0
  339. sage/libs/gsl/expint.pxd +44 -0
  340. sage/libs/gsl/fermi_dirac.pxd +44 -0
  341. sage/libs/gsl/fft.pxd +121 -0
  342. sage/libs/gsl/fit.pxd +50 -0
  343. sage/libs/gsl/gamma.pxd +94 -0
  344. sage/libs/gsl/gegenbauer.pxd +26 -0
  345. sage/libs/gsl/histogram.pxd +176 -0
  346. sage/libs/gsl/hyperg.pxd +52 -0
  347. sage/libs/gsl/integration.pxd +69 -0
  348. sage/libs/gsl/interp.pxd +109 -0
  349. sage/libs/gsl/laguerre.pxd +24 -0
  350. sage/libs/gsl/lambert.pxd +16 -0
  351. sage/libs/gsl/legendre.pxd +90 -0
  352. sage/libs/gsl/linalg.pxd +185 -0
  353. sage/libs/gsl/log.pxd +26 -0
  354. sage/libs/gsl/math.pxd +43 -0
  355. sage/libs/gsl/matrix.pxd +143 -0
  356. sage/libs/gsl/matrix_complex.pxd +130 -0
  357. sage/libs/gsl/min.pxd +67 -0
  358. sage/libs/gsl/monte.pxd +56 -0
  359. sage/libs/gsl/ntuple.pxd +32 -0
  360. sage/libs/gsl/odeiv.pxd +70 -0
  361. sage/libs/gsl/permutation.pxd +78 -0
  362. sage/libs/gsl/poly.pxd +40 -0
  363. sage/libs/gsl/pow_int.pxd +12 -0
  364. sage/libs/gsl/psi.pxd +28 -0
  365. sage/libs/gsl/qrng.pxd +29 -0
  366. sage/libs/gsl/random.pxd +257 -0
  367. sage/libs/gsl/rng.pxd +100 -0
  368. sage/libs/gsl/roots.pxd +72 -0
  369. sage/libs/gsl/sort.pxd +36 -0
  370. sage/libs/gsl/statistics.pxd +59 -0
  371. sage/libs/gsl/sum.pxd +55 -0
  372. sage/libs/gsl/synchrotron.pxd +16 -0
  373. sage/libs/gsl/transport.pxd +24 -0
  374. sage/libs/gsl/trig.pxd +58 -0
  375. sage/libs/gsl/types.pxd +137 -0
  376. sage/libs/gsl/vector.pxd +101 -0
  377. sage/libs/gsl/vector_complex.pxd +83 -0
  378. sage/libs/gsl/wavelet.pxd +49 -0
  379. sage/libs/gsl/zeta.pxd +28 -0
  380. sage/libs/mpc/__init__.pxd +114 -0
  381. sage/libs/mpc/types.pxd +28 -0
  382. sage/libs/mpfr/__init__.pxd +299 -0
  383. sage/libs/mpfr/types.pxd +26 -0
  384. sage/libs/mpmath/__init__.py +1 -0
  385. sage/libs/mpmath/all.py +27 -0
  386. sage/libs/mpmath/all__sagemath_modules.py +1 -0
  387. sage/libs/mpmath/utils.cpython-314-aarch64-linux-musl.so +0 -0
  388. sage/libs/mpmath/utils.pxd +4 -0
  389. sage/libs/mpmath/utils.pyx +319 -0
  390. sage/matrix/action.cpython-314-aarch64-linux-musl.so +0 -0
  391. sage/matrix/action.pxd +26 -0
  392. sage/matrix/action.pyx +596 -0
  393. sage/matrix/all.py +9 -0
  394. sage/matrix/args.cpython-314-aarch64-linux-musl.so +0 -0
  395. sage/matrix/args.pxd +144 -0
  396. sage/matrix/args.pyx +1668 -0
  397. sage/matrix/benchmark.py +1258 -0
  398. sage/matrix/berlekamp_massey.py +95 -0
  399. sage/matrix/compute_J_ideal.py +926 -0
  400. sage/matrix/constructor.cpython-314-aarch64-linux-musl.so +0 -0
  401. sage/matrix/constructor.pyx +750 -0
  402. sage/matrix/docs.py +430 -0
  403. sage/matrix/echelon_matrix.cpython-314-aarch64-linux-musl.so +0 -0
  404. sage/matrix/echelon_matrix.pyx +155 -0
  405. sage/matrix/matrix.pxd +2 -0
  406. sage/matrix/matrix0.cpython-314-aarch64-linux-musl.so +0 -0
  407. sage/matrix/matrix0.pxd +68 -0
  408. sage/matrix/matrix0.pyx +6324 -0
  409. sage/matrix/matrix1.cpython-314-aarch64-linux-musl.so +0 -0
  410. sage/matrix/matrix1.pxd +8 -0
  411. sage/matrix/matrix1.pyx +2851 -0
  412. sage/matrix/matrix2.cpython-314-aarch64-linux-musl.so +0 -0
  413. sage/matrix/matrix2.pxd +25 -0
  414. sage/matrix/matrix2.pyx +20181 -0
  415. sage/matrix/matrix_cdv.cpython-314-aarch64-linux-musl.so +0 -0
  416. sage/matrix/matrix_cdv.pxd +4 -0
  417. sage/matrix/matrix_cdv.pyx +93 -0
  418. sage/matrix/matrix_complex_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
  419. sage/matrix/matrix_complex_double_dense.pxd +5 -0
  420. sage/matrix/matrix_complex_double_dense.pyx +98 -0
  421. sage/matrix/matrix_dense.cpython-314-aarch64-linux-musl.so +0 -0
  422. sage/matrix/matrix_dense.pxd +5 -0
  423. sage/matrix/matrix_dense.pyx +343 -0
  424. sage/matrix/matrix_domain_dense.pxd +5 -0
  425. sage/matrix/matrix_domain_sparse.pxd +5 -0
  426. sage/matrix/matrix_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
  427. sage/matrix/matrix_double_dense.pxd +7 -0
  428. sage/matrix/matrix_double_dense.pyx +3906 -0
  429. sage/matrix/matrix_double_sparse.cpython-314-aarch64-linux-musl.so +0 -0
  430. sage/matrix/matrix_double_sparse.pxd +6 -0
  431. sage/matrix/matrix_double_sparse.pyx +248 -0
  432. sage/matrix/matrix_generic_dense.cpython-314-aarch64-linux-musl.so +0 -0
  433. sage/matrix/matrix_generic_dense.pxd +7 -0
  434. sage/matrix/matrix_generic_dense.pyx +354 -0
  435. sage/matrix/matrix_generic_sparse.cpython-314-aarch64-linux-musl.so +0 -0
  436. sage/matrix/matrix_generic_sparse.pxd +7 -0
  437. sage/matrix/matrix_generic_sparse.pyx +461 -0
  438. sage/matrix/matrix_laurent_mpolynomial_dense.cpython-314-aarch64-linux-musl.so +0 -0
  439. sage/matrix/matrix_laurent_mpolynomial_dense.pxd +5 -0
  440. sage/matrix/matrix_laurent_mpolynomial_dense.pyx +115 -0
  441. sage/matrix/matrix_misc.py +313 -0
  442. sage/matrix/matrix_numpy_dense.cpython-314-aarch64-linux-musl.so +0 -0
  443. sage/matrix/matrix_numpy_dense.pxd +14 -0
  444. sage/matrix/matrix_numpy_dense.pyx +450 -0
  445. sage/matrix/matrix_numpy_integer_dense.cpython-314-aarch64-linux-musl.so +0 -0
  446. sage/matrix/matrix_numpy_integer_dense.pxd +7 -0
  447. sage/matrix/matrix_numpy_integer_dense.pyx +59 -0
  448. sage/matrix/matrix_polynomial_dense.cpython-314-aarch64-linux-musl.so +0 -0
  449. sage/matrix/matrix_polynomial_dense.pxd +5 -0
  450. sage/matrix/matrix_polynomial_dense.pyx +5341 -0
  451. sage/matrix/matrix_real_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
  452. sage/matrix/matrix_real_double_dense.pxd +7 -0
  453. sage/matrix/matrix_real_double_dense.pyx +122 -0
  454. sage/matrix/matrix_space.py +2848 -0
  455. sage/matrix/matrix_sparse.cpython-314-aarch64-linux-musl.so +0 -0
  456. sage/matrix/matrix_sparse.pxd +5 -0
  457. sage/matrix/matrix_sparse.pyx +1222 -0
  458. sage/matrix/matrix_window.cpython-314-aarch64-linux-musl.so +0 -0
  459. sage/matrix/matrix_window.pxd +37 -0
  460. sage/matrix/matrix_window.pyx +242 -0
  461. sage/matrix/misc_mpfr.cpython-314-aarch64-linux-musl.so +0 -0
  462. sage/matrix/misc_mpfr.pyx +80 -0
  463. sage/matrix/operation_table.py +1182 -0
  464. sage/matrix/special.py +3666 -0
  465. sage/matrix/strassen.cpython-314-aarch64-linux-musl.so +0 -0
  466. sage/matrix/strassen.pyx +851 -0
  467. sage/matrix/symplectic_basis.py +541 -0
  468. sage/matrix/template.pxd +6 -0
  469. sage/matrix/tests.py +71 -0
  470. sage/matroids/advanced.py +77 -0
  471. sage/matroids/all.py +13 -0
  472. sage/matroids/basis_exchange_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  473. sage/matroids/basis_exchange_matroid.pxd +96 -0
  474. sage/matroids/basis_exchange_matroid.pyx +2344 -0
  475. sage/matroids/basis_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  476. sage/matroids/basis_matroid.pxd +45 -0
  477. sage/matroids/basis_matroid.pyx +1217 -0
  478. sage/matroids/catalog.py +44 -0
  479. sage/matroids/chow_ring.py +473 -0
  480. sage/matroids/chow_ring_ideal.py +849 -0
  481. sage/matroids/circuit_closures_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  482. sage/matroids/circuit_closures_matroid.pxd +16 -0
  483. sage/matroids/circuit_closures_matroid.pyx +559 -0
  484. sage/matroids/circuits_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  485. sage/matroids/circuits_matroid.pxd +38 -0
  486. sage/matroids/circuits_matroid.pyx +947 -0
  487. sage/matroids/constructor.py +1086 -0
  488. sage/matroids/database_collections.py +365 -0
  489. sage/matroids/database_matroids.py +5338 -0
  490. sage/matroids/dual_matroid.py +583 -0
  491. sage/matroids/extension.cpython-314-aarch64-linux-musl.so +0 -0
  492. sage/matroids/extension.pxd +34 -0
  493. sage/matroids/extension.pyx +519 -0
  494. sage/matroids/flats_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  495. sage/matroids/flats_matroid.pxd +28 -0
  496. sage/matroids/flats_matroid.pyx +715 -0
  497. sage/matroids/gammoid.py +600 -0
  498. sage/matroids/graphic_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  499. sage/matroids/graphic_matroid.pxd +39 -0
  500. sage/matroids/graphic_matroid.pyx +2024 -0
  501. sage/matroids/lean_matrix.cpython-314-aarch64-linux-musl.so +0 -0
  502. sage/matroids/lean_matrix.pxd +126 -0
  503. sage/matroids/lean_matrix.pyx +3667 -0
  504. sage/matroids/linear_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  505. sage/matroids/linear_matroid.pxd +180 -0
  506. sage/matroids/linear_matroid.pyx +6649 -0
  507. sage/matroids/matroid.cpython-314-aarch64-linux-musl.so +0 -0
  508. sage/matroids/matroid.pxd +243 -0
  509. sage/matroids/matroid.pyx +8759 -0
  510. sage/matroids/matroids_catalog.py +190 -0
  511. sage/matroids/matroids_plot_helpers.py +890 -0
  512. sage/matroids/minor_matroid.py +480 -0
  513. sage/matroids/minorfix.h +9 -0
  514. sage/matroids/named_matroids.py +5 -0
  515. sage/matroids/rank_matroid.py +268 -0
  516. sage/matroids/set_system.cpython-314-aarch64-linux-musl.so +0 -0
  517. sage/matroids/set_system.pxd +38 -0
  518. sage/matroids/set_system.pyx +800 -0
  519. sage/matroids/transversal_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  520. sage/matroids/transversal_matroid.pxd +14 -0
  521. sage/matroids/transversal_matroid.pyx +893 -0
  522. sage/matroids/union_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  523. sage/matroids/union_matroid.pxd +20 -0
  524. sage/matroids/union_matroid.pyx +331 -0
  525. sage/matroids/unpickling.cpython-314-aarch64-linux-musl.so +0 -0
  526. sage/matroids/unpickling.pyx +843 -0
  527. sage/matroids/utilities.py +809 -0
  528. sage/misc/all__sagemath_modules.py +20 -0
  529. sage/misc/c3.cpython-314-aarch64-linux-musl.so +0 -0
  530. sage/misc/c3.pyx +238 -0
  531. sage/misc/compat.py +87 -0
  532. sage/misc/element_with_label.py +173 -0
  533. sage/misc/func_persist.py +79 -0
  534. sage/misc/pickle_old.cpython-314-aarch64-linux-musl.so +0 -0
  535. sage/misc/pickle_old.pyx +19 -0
  536. sage/misc/proof.py +7 -0
  537. sage/misc/replace_dot_all.py +472 -0
  538. sage/misc/sagedoc_conf.py +168 -0
  539. sage/misc/sphinxify.py +167 -0
  540. sage/misc/test_class_pickling.py +85 -0
  541. sage/modules/all.py +42 -0
  542. sage/modules/complex_double_vector.py +25 -0
  543. sage/modules/diamond_cutting.py +380 -0
  544. sage/modules/fg_pid/all.py +1 -0
  545. sage/modules/fg_pid/fgp_element.py +456 -0
  546. sage/modules/fg_pid/fgp_module.py +2091 -0
  547. sage/modules/fg_pid/fgp_morphism.py +550 -0
  548. sage/modules/filtered_vector_space.py +1271 -0
  549. sage/modules/finite_submodule_iter.cpython-314-aarch64-linux-musl.so +0 -0
  550. sage/modules/finite_submodule_iter.pxd +27 -0
  551. sage/modules/finite_submodule_iter.pyx +452 -0
  552. sage/modules/fp_graded/all.py +1 -0
  553. sage/modules/fp_graded/element.py +346 -0
  554. sage/modules/fp_graded/free_element.py +298 -0
  555. sage/modules/fp_graded/free_homspace.py +53 -0
  556. sage/modules/fp_graded/free_module.py +1060 -0
  557. sage/modules/fp_graded/free_morphism.py +217 -0
  558. sage/modules/fp_graded/homspace.py +563 -0
  559. sage/modules/fp_graded/module.py +1340 -0
  560. sage/modules/fp_graded/morphism.py +1990 -0
  561. sage/modules/fp_graded/steenrod/all.py +1 -0
  562. sage/modules/fp_graded/steenrod/homspace.py +65 -0
  563. sage/modules/fp_graded/steenrod/module.py +477 -0
  564. sage/modules/fp_graded/steenrod/morphism.py +404 -0
  565. sage/modules/fp_graded/steenrod/profile.py +241 -0
  566. sage/modules/free_module.py +8447 -0
  567. sage/modules/free_module_element.cpython-314-aarch64-linux-musl.so +0 -0
  568. sage/modules/free_module_element.pxd +22 -0
  569. sage/modules/free_module_element.pyx +5445 -0
  570. sage/modules/free_module_homspace.py +369 -0
  571. sage/modules/free_module_integer.py +896 -0
  572. sage/modules/free_module_morphism.py +823 -0
  573. sage/modules/free_module_pseudohomspace.py +352 -0
  574. sage/modules/free_module_pseudomorphism.py +578 -0
  575. sage/modules/free_quadratic_module.py +1706 -0
  576. sage/modules/free_quadratic_module_integer_symmetric.py +1790 -0
  577. sage/modules/matrix_morphism.py +1745 -0
  578. sage/modules/misc.py +103 -0
  579. sage/modules/module_functors.py +192 -0
  580. sage/modules/multi_filtered_vector_space.py +719 -0
  581. sage/modules/ore_module.py +2208 -0
  582. sage/modules/ore_module_element.py +178 -0
  583. sage/modules/ore_module_homspace.py +147 -0
  584. sage/modules/ore_module_morphism.py +968 -0
  585. sage/modules/quotient_module.py +699 -0
  586. sage/modules/real_double_vector.py +22 -0
  587. sage/modules/submodule.py +255 -0
  588. sage/modules/tensor_operations.py +567 -0
  589. sage/modules/torsion_quadratic_module.py +1352 -0
  590. sage/modules/tutorial_free_modules.py +248 -0
  591. sage/modules/vector_complex_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
  592. sage/modules/vector_complex_double_dense.pxd +6 -0
  593. sage/modules/vector_complex_double_dense.pyx +117 -0
  594. sage/modules/vector_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
  595. sage/modules/vector_double_dense.pxd +6 -0
  596. sage/modules/vector_double_dense.pyx +604 -0
  597. sage/modules/vector_integer_dense.cpython-314-aarch64-linux-musl.so +0 -0
  598. sage/modules/vector_integer_dense.pxd +15 -0
  599. sage/modules/vector_integer_dense.pyx +361 -0
  600. sage/modules/vector_integer_sparse.cpython-314-aarch64-linux-musl.so +0 -0
  601. sage/modules/vector_integer_sparse.pxd +29 -0
  602. sage/modules/vector_integer_sparse.pyx +406 -0
  603. sage/modules/vector_modn_dense.cpython-314-aarch64-linux-musl.so +0 -0
  604. sage/modules/vector_modn_dense.pxd +12 -0
  605. sage/modules/vector_modn_dense.pyx +394 -0
  606. sage/modules/vector_modn_sparse.cpython-314-aarch64-linux-musl.so +0 -0
  607. sage/modules/vector_modn_sparse.pxd +21 -0
  608. sage/modules/vector_modn_sparse.pyx +298 -0
  609. sage/modules/vector_numpy_dense.cpython-314-aarch64-linux-musl.so +0 -0
  610. sage/modules/vector_numpy_dense.pxd +15 -0
  611. sage/modules/vector_numpy_dense.pyx +304 -0
  612. sage/modules/vector_numpy_integer_dense.cpython-314-aarch64-linux-musl.so +0 -0
  613. sage/modules/vector_numpy_integer_dense.pxd +7 -0
  614. sage/modules/vector_numpy_integer_dense.pyx +54 -0
  615. sage/modules/vector_rational_dense.cpython-314-aarch64-linux-musl.so +0 -0
  616. sage/modules/vector_rational_dense.pxd +15 -0
  617. sage/modules/vector_rational_dense.pyx +387 -0
  618. sage/modules/vector_rational_sparse.cpython-314-aarch64-linux-musl.so +0 -0
  619. sage/modules/vector_rational_sparse.pxd +30 -0
  620. sage/modules/vector_rational_sparse.pyx +413 -0
  621. sage/modules/vector_real_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
  622. sage/modules/vector_real_double_dense.pxd +6 -0
  623. sage/modules/vector_real_double_dense.pyx +126 -0
  624. sage/modules/vector_space_homspace.py +430 -0
  625. sage/modules/vector_space_morphism.py +989 -0
  626. sage/modules/with_basis/all.py +15 -0
  627. sage/modules/with_basis/cell_module.py +494 -0
  628. sage/modules/with_basis/indexed_element.cpython-314-aarch64-linux-musl.so +0 -0
  629. sage/modules/with_basis/indexed_element.pxd +13 -0
  630. sage/modules/with_basis/indexed_element.pyx +1058 -0
  631. sage/modules/with_basis/invariant.py +1075 -0
  632. sage/modules/with_basis/morphism.py +1636 -0
  633. sage/modules/with_basis/representation.py +2939 -0
  634. sage/modules/with_basis/subquotient.py +685 -0
  635. sage/numerical/all__sagemath_modules.py +6 -0
  636. sage/numerical/gauss_legendre.cpython-314-aarch64-linux-musl.so +0 -0
  637. sage/numerical/gauss_legendre.pyx +381 -0
  638. sage/numerical/optimize.py +910 -0
  639. sage/probability/all.py +10 -0
  640. sage/probability/probability_distribution.cpython-314-aarch64-linux-musl.so +0 -0
  641. sage/probability/probability_distribution.pyx +1242 -0
  642. sage/probability/random_variable.py +411 -0
  643. sage/quadratic_forms/all.py +4 -0
  644. sage/quadratic_forms/all__sagemath_modules.py +15 -0
  645. sage/quadratic_forms/binary_qf.py +2042 -0
  646. sage/quadratic_forms/bqf_class_group.py +748 -0
  647. sage/quadratic_forms/constructions.py +93 -0
  648. sage/quadratic_forms/count_local_2.cpython-314-aarch64-linux-musl.so +0 -0
  649. sage/quadratic_forms/count_local_2.pyx +365 -0
  650. sage/quadratic_forms/extras.py +195 -0
  651. sage/quadratic_forms/quadratic_form.py +1753 -0
  652. sage/quadratic_forms/quadratic_form__count_local_2.py +221 -0
  653. sage/quadratic_forms/quadratic_form__equivalence_testing.py +708 -0
  654. sage/quadratic_forms/quadratic_form__evaluate.cpython-314-aarch64-linux-musl.so +0 -0
  655. sage/quadratic_forms/quadratic_form__evaluate.pyx +139 -0
  656. sage/quadratic_forms/quadratic_form__local_density_congruence.py +977 -0
  657. sage/quadratic_forms/quadratic_form__local_field_invariants.py +1072 -0
  658. sage/quadratic_forms/quadratic_form__neighbors.py +424 -0
  659. sage/quadratic_forms/quadratic_form__reduction_theory.py +488 -0
  660. sage/quadratic_forms/quadratic_form__split_local_covering.py +416 -0
  661. sage/quadratic_forms/quadratic_form__ternary_Tornaria.py +657 -0
  662. sage/quadratic_forms/quadratic_form__theta.py +352 -0
  663. sage/quadratic_forms/quadratic_form__variable_substitutions.py +370 -0
  664. sage/quadratic_forms/random_quadraticform.py +209 -0
  665. sage/quadratic_forms/ternary.cpython-314-aarch64-linux-musl.so +0 -0
  666. sage/quadratic_forms/ternary.pyx +1154 -0
  667. sage/quadratic_forms/ternary_qf.py +2027 -0
  668. sage/rings/all__sagemath_modules.py +28 -0
  669. sage/rings/asymptotic/all__sagemath_modules.py +1 -0
  670. sage/rings/asymptotic/misc.py +1252 -0
  671. sage/rings/cc.py +4 -0
  672. sage/rings/cfinite_sequence.py +1306 -0
  673. sage/rings/complex_conversion.cpython-314-aarch64-linux-musl.so +0 -0
  674. sage/rings/complex_conversion.pxd +8 -0
  675. sage/rings/complex_conversion.pyx +23 -0
  676. sage/rings/complex_double.cpython-314-aarch64-linux-musl.so +0 -0
  677. sage/rings/complex_double.pxd +21 -0
  678. sage/rings/complex_double.pyx +2654 -0
  679. sage/rings/complex_mpc.cpython-314-aarch64-linux-musl.so +0 -0
  680. sage/rings/complex_mpc.pxd +21 -0
  681. sage/rings/complex_mpc.pyx +2576 -0
  682. sage/rings/complex_mpfr.cpython-314-aarch64-linux-musl.so +0 -0
  683. sage/rings/complex_mpfr.pxd +18 -0
  684. sage/rings/complex_mpfr.pyx +3602 -0
  685. sage/rings/derivation.py +2334 -0
  686. sage/rings/finite_rings/all__sagemath_modules.py +1 -0
  687. sage/rings/finite_rings/maps_finite_field.py +191 -0
  688. sage/rings/function_field/all__sagemath_modules.py +8 -0
  689. sage/rings/function_field/derivations.py +102 -0
  690. sage/rings/function_field/derivations_rational.py +132 -0
  691. sage/rings/function_field/differential.py +853 -0
  692. sage/rings/function_field/divisor.py +1107 -0
  693. sage/rings/function_field/drinfeld_modules/action.py +199 -0
  694. sage/rings/function_field/drinfeld_modules/all.py +1 -0
  695. sage/rings/function_field/drinfeld_modules/charzero_drinfeld_module.py +673 -0
  696. sage/rings/function_field/drinfeld_modules/drinfeld_module.py +2087 -0
  697. sage/rings/function_field/drinfeld_modules/finite_drinfeld_module.py +1131 -0
  698. sage/rings/function_field/drinfeld_modules/homset.py +420 -0
  699. sage/rings/function_field/drinfeld_modules/morphism.py +820 -0
  700. sage/rings/function_field/hermite_form_polynomial.cpython-314-aarch64-linux-musl.so +0 -0
  701. sage/rings/function_field/hermite_form_polynomial.pyx +188 -0
  702. sage/rings/function_field/khuri_makdisi.cpython-314-aarch64-linux-musl.so +0 -0
  703. sage/rings/function_field/khuri_makdisi.pyx +935 -0
  704. sage/rings/invariants/all.py +4 -0
  705. sage/rings/invariants/invariant_theory.py +4597 -0
  706. sage/rings/invariants/reconstruction.py +395 -0
  707. sage/rings/polynomial/all__sagemath_modules.py +17 -0
  708. sage/rings/polynomial/integer_valued_polynomials.py +1230 -0
  709. sage/rings/polynomial/laurent_polynomial_mpair.cpython-314-aarch64-linux-musl.so +0 -0
  710. sage/rings/polynomial/laurent_polynomial_mpair.pxd +15 -0
  711. sage/rings/polynomial/laurent_polynomial_mpair.pyx +2023 -0
  712. sage/rings/polynomial/ore_function_element.py +952 -0
  713. sage/rings/polynomial/ore_function_field.py +1028 -0
  714. sage/rings/polynomial/ore_polynomial_element.cpython-314-aarch64-linux-musl.so +0 -0
  715. sage/rings/polynomial/ore_polynomial_element.pxd +48 -0
  716. sage/rings/polynomial/ore_polynomial_element.pyx +3145 -0
  717. sage/rings/polynomial/ore_polynomial_ring.py +1334 -0
  718. sage/rings/polynomial/polynomial_real_mpfr_dense.cpython-314-aarch64-linux-musl.so +0 -0
  719. sage/rings/polynomial/polynomial_real_mpfr_dense.pyx +788 -0
  720. sage/rings/polynomial/q_integer_valued_polynomials.py +1264 -0
  721. sage/rings/polynomial/skew_polynomial_element.cpython-314-aarch64-linux-musl.so +0 -0
  722. sage/rings/polynomial/skew_polynomial_element.pxd +9 -0
  723. sage/rings/polynomial/skew_polynomial_element.pyx +684 -0
  724. sage/rings/polynomial/skew_polynomial_finite_field.cpython-314-aarch64-linux-musl.so +0 -0
  725. sage/rings/polynomial/skew_polynomial_finite_field.pxd +19 -0
  726. sage/rings/polynomial/skew_polynomial_finite_field.pyx +1093 -0
  727. sage/rings/polynomial/skew_polynomial_finite_order.cpython-314-aarch64-linux-musl.so +0 -0
  728. sage/rings/polynomial/skew_polynomial_finite_order.pxd +10 -0
  729. sage/rings/polynomial/skew_polynomial_finite_order.pyx +567 -0
  730. sage/rings/polynomial/skew_polynomial_ring.py +908 -0
  731. sage/rings/real_double_element_gsl.cpython-314-aarch64-linux-musl.so +0 -0
  732. sage/rings/real_double_element_gsl.pxd +8 -0
  733. sage/rings/real_double_element_gsl.pyx +794 -0
  734. sage/rings/real_field.py +58 -0
  735. sage/rings/real_mpfr.cpython-314-aarch64-linux-musl.so +0 -0
  736. sage/rings/real_mpfr.pxd +29 -0
  737. sage/rings/real_mpfr.pyx +6122 -0
  738. sage/rings/ring_extension.cpython-314-aarch64-linux-musl.so +0 -0
  739. sage/rings/ring_extension.pxd +42 -0
  740. sage/rings/ring_extension.pyx +2779 -0
  741. sage/rings/ring_extension_conversion.cpython-314-aarch64-linux-musl.so +0 -0
  742. sage/rings/ring_extension_conversion.pxd +16 -0
  743. sage/rings/ring_extension_conversion.pyx +462 -0
  744. sage/rings/ring_extension_element.cpython-314-aarch64-linux-musl.so +0 -0
  745. sage/rings/ring_extension_element.pxd +21 -0
  746. sage/rings/ring_extension_element.pyx +1635 -0
  747. sage/rings/ring_extension_homset.py +64 -0
  748. sage/rings/ring_extension_morphism.cpython-314-aarch64-linux-musl.so +0 -0
  749. sage/rings/ring_extension_morphism.pxd +35 -0
  750. sage/rings/ring_extension_morphism.pyx +920 -0
  751. sage/schemes/all__sagemath_modules.py +1 -0
  752. sage/schemes/projective/all__sagemath_modules.py +1 -0
  753. sage/schemes/projective/coherent_sheaf.py +300 -0
  754. sage/schemes/projective/cohomology.py +510 -0
  755. sage/stats/all.py +15 -0
  756. sage/stats/basic_stats.py +489 -0
  757. sage/stats/distributions/all.py +7 -0
  758. sage/stats/distributions/catalog.py +34 -0
  759. sage/stats/distributions/dgs.h +50 -0
  760. sage/stats/distributions/dgs.pxd +111 -0
  761. sage/stats/distributions/dgs_bern.h +400 -0
  762. sage/stats/distributions/dgs_gauss.h +614 -0
  763. sage/stats/distributions/dgs_misc.h +104 -0
  764. sage/stats/distributions/discrete_gaussian_integer.cpython-314-aarch64-linux-musl.so +0 -0
  765. sage/stats/distributions/discrete_gaussian_integer.pxd +14 -0
  766. sage/stats/distributions/discrete_gaussian_integer.pyx +498 -0
  767. sage/stats/distributions/discrete_gaussian_lattice.py +908 -0
  768. sage/stats/distributions/discrete_gaussian_polynomial.py +141 -0
  769. sage/stats/hmm/all.py +15 -0
  770. sage/stats/hmm/chmm.cpython-314-aarch64-linux-musl.so +0 -0
  771. sage/stats/hmm/chmm.pyx +1595 -0
  772. sage/stats/hmm/distributions.cpython-314-aarch64-linux-musl.so +0 -0
  773. sage/stats/hmm/distributions.pxd +29 -0
  774. sage/stats/hmm/distributions.pyx +531 -0
  775. sage/stats/hmm/hmm.cpython-314-aarch64-linux-musl.so +0 -0
  776. sage/stats/hmm/hmm.pxd +17 -0
  777. sage/stats/hmm/hmm.pyx +1388 -0
  778. sage/stats/hmm/util.cpython-314-aarch64-linux-musl.so +0 -0
  779. sage/stats/hmm/util.pxd +7 -0
  780. sage/stats/hmm/util.pyx +165 -0
  781. sage/stats/intlist.cpython-314-aarch64-linux-musl.so +0 -0
  782. sage/stats/intlist.pxd +14 -0
  783. sage/stats/intlist.pyx +588 -0
  784. sage/stats/r.py +49 -0
  785. sage/stats/time_series.cpython-314-aarch64-linux-musl.so +0 -0
  786. sage/stats/time_series.pxd +6 -0
  787. sage/stats/time_series.pyx +2546 -0
  788. sage/tensor/all.py +2 -0
  789. sage/tensor/modules/all.py +8 -0
  790. sage/tensor/modules/alternating_contr_tensor.py +761 -0
  791. sage/tensor/modules/comp.py +5598 -0
  792. sage/tensor/modules/ext_pow_free_module.py +824 -0
  793. sage/tensor/modules/finite_rank_free_module.py +3589 -0
  794. sage/tensor/modules/format_utilities.py +333 -0
  795. sage/tensor/modules/free_module_alt_form.py +858 -0
  796. sage/tensor/modules/free_module_automorphism.py +1207 -0
  797. sage/tensor/modules/free_module_basis.py +1074 -0
  798. sage/tensor/modules/free_module_element.py +284 -0
  799. sage/tensor/modules/free_module_homset.py +652 -0
  800. sage/tensor/modules/free_module_linear_group.py +564 -0
  801. sage/tensor/modules/free_module_morphism.py +1581 -0
  802. sage/tensor/modules/free_module_tensor.py +3289 -0
  803. sage/tensor/modules/reflexive_module.py +386 -0
  804. sage/tensor/modules/tensor_free_module.py +780 -0
  805. sage/tensor/modules/tensor_free_submodule.py +538 -0
  806. sage/tensor/modules/tensor_free_submodule_basis.py +140 -0
  807. sage/tensor/modules/tensor_with_indices.py +1043 -0
@@ -0,0 +1,1167 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ # sage.doctest: optional - sage.modules sage.rings.finite_rings
3
+ """
4
+ Partition backtrack functions for binary codes
5
+
6
+ EXAMPLES::
7
+
8
+ sage: import sage.groups.perm_gps.partn_ref.refinement_binary
9
+
10
+ REFERENCE:
11
+
12
+ - [1] McKay, Brendan D. Practical Graph Isomorphism. Congressus Numerantium,
13
+ Vol. 30 (1981), pp. 45-87.
14
+
15
+ - [2] Leon, Jeffrey. Permutation Group Algorithms Based on Partitions, I:
16
+ Theory and Algorithms. J. Symbolic Computation, Vol. 12 (1991), pp.
17
+ 533-583.
18
+ """
19
+
20
+ #*****************************************************************************
21
+ # Copyright (C) 2006 - 2011 Robert L. Miller <rlmillster@gmail.com>
22
+ #
23
+ # This program is free software: you can redistribute it and/or modify
24
+ # it under the terms of the GNU General Public License as published by
25
+ # the Free Software Foundation, either version 2 of the License, or
26
+ # (at your option) any later version.
27
+ # https://www.gnu.org/licenses/
28
+ #*****************************************************************************
29
+
30
+ from sage.data_structures.bitset_base cimport *
31
+ from sage.groups.perm_gps.partn_ref.data_structures cimport *
32
+ from sage.rings.integer cimport Integer
33
+ from sage.structure.element import Matrix
34
+ from sage.groups.perm_gps.partn_ref.double_coset cimport double_coset
35
+
36
+
37
+ cdef class LinearBinaryCodeStruct(BinaryCodeStruct):
38
+
39
+ def __cinit__(self, matrix):
40
+ cdef int i,j
41
+ self.degree = matrix.ncols()
42
+ self.dimension = matrix.nrows()
43
+ if self.dimension >= <int>(sizeof(int) << 3):
44
+ raise NotImplementedError
45
+ # By the time the dimension gets this big, the computation is infeasible anyway...
46
+ self.nwords = 1<<self.dimension
47
+
48
+ self.basis = <bitset_s *> sig_malloc(self.dimension * sizeof(bitset_s))
49
+ self.scratch_bitsets = <bitset_s *> sig_malloc((2*self.dimension+2) * sizeof(bitset_s))
50
+ self.alpha_is_wd = <bitset_s *> sig_malloc(sizeof(bitset_s))
51
+ self.word_ps = PS_new(self.nwords, 1)
52
+ self.alpha = <int *> sig_malloc((self.nwords+self.degree) * sizeof(int))
53
+ self.scratch = <int *> sig_malloc((3*self.nwords+3*self.degree+2) * sizeof(int))
54
+
55
+ if self.basis is NULL or self.scratch_bitsets is NULL \
56
+ or self.alpha_is_wd is NULL or self.word_ps is NULL \
57
+ or self.alpha is NULL or self.scratch is NULL:
58
+ sig_free(self.basis)
59
+ sig_free(self.scratch_bitsets)
60
+ sig_free(self.alpha_is_wd)
61
+ PS_dealloc(self.word_ps)
62
+ sig_free(self.alpha)
63
+ sig_free(self.scratch)
64
+ raise MemoryError
65
+
66
+ cdef bint memerr = 0
67
+ for i in range(self.dimension):
68
+ try:
69
+ bitset_init(&self.basis[i], self.degree)
70
+ except MemoryError:
71
+ for j from 0 <= j < i:
72
+ bitset_free(&self.basis[j])
73
+ memerr = 1
74
+ break
75
+ if not memerr:
76
+ for i in range(2*self.dimension+2):
77
+ try:
78
+ bitset_init(&self.scratch_bitsets[i], self.degree)
79
+ except MemoryError:
80
+ for j from 0 <= j < i:
81
+ bitset_free(&self.scratch_bitsets[j])
82
+ for j from 0 <= j < self.dimension:
83
+ bitset_free(&self.basis[j])
84
+ memerr = 1
85
+ break
86
+ if not memerr:
87
+ try:
88
+ bitset_init(self.alpha_is_wd, self.nwords + self.degree)
89
+ except MemoryError:
90
+ for j from 0 <= j < 2*self.dimension+2:
91
+ bitset_free(&self.scratch_bitsets[j])
92
+ for j from 0 <= j < self.dimension:
93
+ bitset_free(&self.basis[j])
94
+ memerr = 1
95
+ if memerr:
96
+ sig_free(self.basis)
97
+ sig_free(self.scratch_bitsets)
98
+ sig_free(self.alpha_is_wd)
99
+ PS_dealloc(self.word_ps)
100
+ sig_free(self.alpha)
101
+ sig_free(self.scratch)
102
+ raise MemoryError
103
+ else:
104
+ bitset_zero(self.alpha_is_wd)
105
+ for j from 0 <= j < self.dimension:
106
+ bitset_zero(&self.basis[j])
107
+
108
+ for i, j in matrix.nonzero_positions():
109
+ bitset_set(&self.basis[i], j)
110
+
111
+ self.output = NULL
112
+ self.ith_word = &ith_word_linear
113
+
114
+ def run(self, partition=None):
115
+ """
116
+ Perform the canonical labeling and automorphism group computation,
117
+ storing results to ``self``.
118
+
119
+ INPUT:
120
+
121
+ - ``partition`` -- an optional list of lists partition of the columns;
122
+ default is the unit partition
123
+
124
+ EXAMPLES::
125
+
126
+ sage: from sage.groups.perm_gps.partn_ref.refinement_binary import LinearBinaryCodeStruct
127
+
128
+ sage: B = LinearBinaryCodeStruct(matrix(GF(2),[[1,0,1],[0,1,1]]))
129
+ sage: B.run()
130
+ sage: B.automorphism_group()
131
+ ([[0, 2, 1], [1, 0, 2]], 6, [0, 1])
132
+ sage: B.canonical_relabeling()
133
+ [0, 1, 2]
134
+
135
+ sage: B = LinearBinaryCodeStruct(matrix(GF(2),[[1,1,1,1]]))
136
+ sage: B.automorphism_group()
137
+ ([[0, 1, 3, 2], [0, 2, 1, 3], [1, 0, 2, 3]], 24, [0, 1, 2])
138
+ sage: B.canonical_relabeling()
139
+ [0, 1, 2, 3]
140
+
141
+ sage: B = LinearBinaryCodeStruct(matrix(GF(2),[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1]]))
142
+ sage: B.automorphism_group()[1] == factorial(14)
143
+ True
144
+
145
+ sage: M = Matrix(GF(2),[\
146
+ ....: [1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0],\
147
+ ....: [0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0],\
148
+ ....: [0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1],\
149
+ ....: [0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1],\
150
+ ....: [0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]])
151
+ sage: B = LinearBinaryCodeStruct(M)
152
+ sage: B.automorphism_group()[1]
153
+ 322560
154
+
155
+ sage: M = Matrix(GF(2),[\
156
+ ....: [1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0],\
157
+ ....: [0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0],\
158
+ ....: [0,0,0,0,0,1,0,1,0,0,0,1,1,1,1,1,1],\
159
+ ....: [0,0,0,1,1,0,0,0,0,1,1,0,1,1,0,1,1]])
160
+ sage: B = LinearBinaryCodeStruct(M)
161
+ sage: B.automorphism_group()[1]
162
+ 2304
163
+
164
+ sage: M = Matrix(GF(2),[\
165
+ ....: [1,0,0,1,1,1,1,0,0,1,0,0,0,0,0,0,0],\
166
+ ....: [0,1,0,0,1,1,1,1,0,0,1,0,0,0,0,0,0],\
167
+ ....: [0,0,1,0,0,1,1,1,1,0,0,1,0,0,0,0,0],\
168
+ ....: [0,0,0,1,0,0,1,1,1,1,0,0,1,0,0,0,0],\
169
+ ....: [0,0,0,0,1,0,0,1,1,1,1,0,0,1,0,0,0],\
170
+ ....: [0,0,0,0,0,1,0,0,1,1,1,1,0,0,1,0,0],\
171
+ ....: [0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,1,0],\
172
+ ....: [0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,1]])
173
+ sage: B = LinearBinaryCodeStruct(M)
174
+ sage: B.automorphism_group()[1]
175
+ 136
176
+
177
+ sage: M = Matrix(GF(2),[\
178
+ ....: [1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0],
179
+ ....: [0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0],
180
+ ....: [0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,1,1,1],
181
+ ....: [0,0,1,1,0,0,0,0,0,0,1,1,1,1,0,0,1,1],
182
+ ....: [0,0,0,1,0,0,0,1,0,1,0,1,0,1,1,1,0,1],
183
+ ....: [0,1,0,0,0,1,0,0,0,1,1,1,0,1,0,1,1,0]])
184
+ sage: B = LinearBinaryCodeStruct(M)
185
+ sage: B.automorphism_group()[1]
186
+ 2160
187
+
188
+ sage: M = Matrix(GF(2),[\
189
+ ....: [0,1,0,1,1,1,0,0,0,1,0,0,0,1,0,0,0,1,1,1,0,1],\
190
+ ....: [1,0,1,1,1,0,0,0,1,0,0,0,1,0,0,0,1,1,1,0,1,0],\
191
+ ....: [0,1,1,1,0,0,0,1,0,0,1,1,0,0,0,1,1,1,0,1,0,0],\
192
+ ....: [1,1,1,0,0,0,1,0,0,1,0,0,0,0,1,1,1,0,1,0,0,1],\
193
+ ....: [1,1,0,0,0,1,0,0,1,0,1,0,0,1,1,1,0,1,0,0,1,0],\
194
+ ....: [1,0,0,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,0,1,0,0],\
195
+ ....: [0,0,0,1,0,0,1,0,1,1,1,1,1,1,0,1,0,0,1,0,0,0],\
196
+ ....: [0,0,1,0,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,0,0,1],\
197
+ ....: [0,1,0,0,1,0,1,1,1,0,0,1,0,1,0,0,1,0,0,0,1,1],\
198
+ ....: [1,0,0,1,0,1,1,1,0,0,0,0,1,0,0,1,0,0,0,1,1,1],\
199
+ ....: [0,0,1,0,1,1,1,0,0,0,1,1,0,0,1,0,0,0,1,1,1,0]])
200
+ sage: B = LinearBinaryCodeStruct(M)
201
+ sage: B.automorphism_group()[1]
202
+ 887040
203
+
204
+ sage: M = Matrix(GF(2),[\
205
+ ....: [1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
206
+ ....: [0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
207
+ ....: [0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],
208
+ ....: [0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0],
209
+ ....: [0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0],
210
+ ....: [0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0],
211
+ ....: [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1],
212
+ ....: [1,0,1,0,1,0,1,0,1,1,0,0,0,0,0,0,1,1,0,0],
213
+ ....: [1,1,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,1,0,0],
214
+ ....: [1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,0,1,0]])
215
+ sage: B = LinearBinaryCodeStruct(M)
216
+ sage: B.automorphism_group()[1]
217
+ 294912
218
+
219
+ sage: M = Matrix(GF(2), [\
220
+ ....: [1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
221
+ ....: [0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
222
+ ....: [0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0],
223
+ ....: [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0],
224
+ ....: [0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,0],
225
+ ....: [0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0],
226
+ ....: [0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1],
227
+ ....: [0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,1,0,0,1,1,1,0,1],
228
+ ....: [0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,1,1,1,1,0,0,0,1]])
229
+ sage: B = LinearBinaryCodeStruct(M)
230
+ sage: B.automorphism_group()[1]
231
+ 442368
232
+
233
+ sage: M = Matrix(GF(2), [\
234
+ ....: [1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0],\
235
+ ....: [1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,1,0,0,0,0,1]])
236
+ sage: B = LinearBinaryCodeStruct(M)
237
+ sage: B.automorphism_group()[1]
238
+ 17868913969917295853568000000
239
+ """
240
+ cdef int n = self.degree
241
+ cdef PartitionStack *part
242
+ if partition is None:
243
+ part = PS_new(n, 1)
244
+ else:
245
+ part = PS_from_list(partition)
246
+ if part is NULL:
247
+ raise MemoryError
248
+
249
+ self.first_time = 1
250
+
251
+ self.output = get_aut_gp_and_can_lab(<void *>self, part, n, &all_children_are_equivalent, &refine_by_bip_degree, &compare_linear_codes, 1, NULL, NULL, NULL)
252
+
253
+ PS_dealloc(part)
254
+
255
+ def automorphism_group(self):
256
+ """
257
+ Return a list of generators of the automorphism group, along with its
258
+ order and a base for which the list of generators is a strong generating
259
+ set.
260
+
261
+ EXAMPLES: (For more examples, see self.run())::
262
+
263
+ sage: from sage.groups.perm_gps.partn_ref.refinement_binary import LinearBinaryCodeStruct
264
+
265
+ sage: B = LinearBinaryCodeStruct(matrix(GF(2),[[1,1,1,1]]))
266
+ sage: B.automorphism_group()
267
+ ([[0, 1, 3, 2], [0, 2, 1, 3], [1, 0, 2, 3]], 24, [0, 1, 2])
268
+ """
269
+ cdef int i, j
270
+ cdef list generators, base
271
+ cdef Integer order
272
+ if self.output is NULL:
273
+ self.run()
274
+ generators = []
275
+ for i in range(self.output.num_gens):
276
+ generators.append([self.output.generators[i*self.degree + j] for j from 0 <= j < self.degree])
277
+ order = Integer()
278
+ SC_order(self.output.group, 0, order.value)
279
+ base = [self.output.group.base_orbits[i][0] for i in range(self.output.group.base_size)]
280
+ return generators, order, base
281
+
282
+ def canonical_relabeling(self):
283
+ """
284
+ Return a canonical relabeling (in list permutation format).
285
+
286
+ EXAMPLES: (For more examples, see self.run())::
287
+
288
+ sage: from sage.groups.perm_gps.partn_ref.refinement_binary import LinearBinaryCodeStruct
289
+
290
+ sage: B = LinearBinaryCodeStruct(matrix(GF(2), [[1,1,0]]))
291
+ sage: B.automorphism_group()
292
+ ([[1, 0, 2]], 2, [0])
293
+ sage: B.canonical_relabeling()
294
+ [1, 2, 0]
295
+ sage: B = LinearBinaryCodeStruct(matrix(GF(2), [[1,0,1]]))
296
+ sage: B.automorphism_group()
297
+ ([[2, 1, 0]], 2, [0])
298
+ sage: B.canonical_relabeling()
299
+ [1, 0, 2]
300
+ """
301
+ cdef int i
302
+ if self.output is NULL:
303
+ self.run()
304
+ return [self.output.relabeling[i] for i in range(self.degree)]
305
+
306
+ def is_isomorphic(self, LinearBinaryCodeStruct other):
307
+ """
308
+ Calculate whether ``self`` is isomorphic to ``other``.
309
+
310
+ EXAMPLES::
311
+
312
+ sage: from sage.groups.perm_gps.partn_ref.refinement_binary import LinearBinaryCodeStruct
313
+
314
+ sage: B = LinearBinaryCodeStruct(Matrix(GF(2), [[1,1,1,1,0,0],[0,0,1,1,1,1]]))
315
+ sage: C = LinearBinaryCodeStruct(Matrix(GF(2), [[1,1,1,0,0,1],[1,1,0,1,1,0]]))
316
+ sage: B.is_isomorphic(C)
317
+ [0, 1, 2, 5, 3, 4]
318
+ """
319
+ cdef int i, n = self.degree
320
+ cdef int *output
321
+ cdef int *ordering
322
+ cdef PartitionStack *part
323
+ part = PS_new(n, 1)
324
+ ordering = <int *> sig_malloc(self.degree * sizeof(int))
325
+ output = <int *> sig_malloc(self.degree * sizeof(int))
326
+ if part is NULL or ordering is NULL or output is NULL:
327
+ PS_dealloc(part)
328
+ sig_free(ordering)
329
+ sig_free(output)
330
+ raise MemoryError
331
+ for i in range(n):
332
+ ordering[i] = i
333
+ self.first_time = 1
334
+ other.first_time = 1
335
+
336
+ cdef bint isomorphic = double_coset(<void *> self, <void *> other, part, ordering, n, &all_children_are_equivalent, &refine_by_bip_degree, &compare_linear_codes, NULL, NULL, output)
337
+
338
+ PS_dealloc(part)
339
+ sig_free(ordering)
340
+ if isomorphic:
341
+ output_py = [output[i] for i in range(n)]
342
+ else:
343
+ output_py = False
344
+ sig_free(output)
345
+ return output_py
346
+
347
+ def __dealloc__(self):
348
+ cdef int j
349
+ bitset_free(self.alpha_is_wd)
350
+ for j from 0 <= j < 2*self.dimension+2:
351
+ bitset_free(&self.scratch_bitsets[j])
352
+ for j from 0 <= j < self.dimension:
353
+ bitset_free(&self.basis[j])
354
+ sig_free(self.basis)
355
+ sig_free(self.scratch_bitsets)
356
+ sig_free(self.alpha_is_wd)
357
+ PS_dealloc(self.word_ps)
358
+ sig_free(self.alpha)
359
+ sig_free(self.scratch)
360
+ if self.output is not NULL:
361
+ deallocate_agcl_output(self.output)
362
+
363
+ cdef int ith_word_linear(BinaryCodeStruct self, int i, bitset_s *word) noexcept:
364
+ cdef LinearBinaryCodeStruct LBCS = <LinearBinaryCodeStruct> self
365
+ cdef int j
366
+ bitset_zero(word)
367
+ for j from 0 <= j < LBCS.dimension:
368
+ if (1<<j)&i:
369
+ bitset_xor(word, word, &LBCS.basis[j])
370
+ return 0
371
+
372
+ cdef class NonlinearBinaryCodeStruct(BinaryCodeStruct):
373
+
374
+ def __cinit__(self, arg):
375
+ cdef int i,j
376
+ if isinstance(arg, Matrix):
377
+ self.degree = arg.ncols()
378
+ self.nwords = arg.nrows()
379
+ elif isinstance(arg, tuple):
380
+ assert len(arg) == 2
381
+ self.degree, self.nwords = arg
382
+ else:
383
+ raise NotImplementedError
384
+
385
+ self.words = <bitset_s *> sig_malloc(self.nwords * sizeof(bitset_s))
386
+ self.scratch_bitsets = <bitset_s *> sig_malloc((4*self.nwords+1) * sizeof(bitset_s))
387
+ self.alpha_is_wd = <bitset_s *> sig_malloc(sizeof(bitset_s))
388
+ self.word_ps = PS_new(self.nwords, 1)
389
+ self.alpha = <int *> sig_malloc((self.nwords+self.degree) * sizeof(int))
390
+ self.scratch = <int *> sig_malloc((3*self.nwords+3*self.degree+2) * sizeof(int))
391
+ if self.words is NULL or self.scratch_bitsets is NULL \
392
+ or self.alpha_is_wd is NULL or self.word_ps is NULL \
393
+ or self.alpha is NULL or self.scratch is NULL:
394
+ sig_free(self.words)
395
+ sig_free(self.scratch_bitsets)
396
+ sig_free(self.alpha_is_wd)
397
+ PS_dealloc(self.word_ps)
398
+ sig_free(self.alpha)
399
+ sig_free(self.scratch)
400
+ raise MemoryError
401
+
402
+ cdef bint memerr = 0
403
+ for i in range(self.nwords):
404
+ try:
405
+ bitset_init(&self.words[i], self.degree)
406
+ except MemoryError:
407
+ for j from 0 <= j < i:
408
+ bitset_free(&self.words[j])
409
+ memerr = 1
410
+ break
411
+ if not memerr:
412
+ for i in range(4*self.nwords):
413
+ try:
414
+ bitset_init(&self.scratch_bitsets[i], self.degree)
415
+ except MemoryError:
416
+ for j from 0 <= j < i:
417
+ bitset_free(&self.scratch_bitsets[j])
418
+ for j from 0 <= j < self.nwords:
419
+ bitset_free(&self.words[j])
420
+ memerr = 1
421
+ break
422
+ if not memerr:
423
+ try:
424
+ bitset_init(&self.scratch_bitsets[4*self.nwords], self.nwords)
425
+ except MemoryError:
426
+ for j from 0 <= j < 4*self.nwords:
427
+ bitset_free(&self.scratch_bitsets[j])
428
+ for j from 0 <= j < self.nwords:
429
+ bitset_free(&self.words[j])
430
+ memerr = 1
431
+ if not memerr:
432
+ try:
433
+ bitset_init(self.alpha_is_wd, self.nwords + self.degree)
434
+ except MemoryError:
435
+ for j from 0 <= j < 4*self.nwords + 1:
436
+ bitset_free(&self.scratch_bitsets[j])
437
+ for j from 0 <= j < self.nwords:
438
+ bitset_free(&self.words[j])
439
+ memerr = 1
440
+ if memerr:
441
+ sig_free(self.words)
442
+ sig_free(self.scratch_bitsets)
443
+ sig_free(self.alpha_is_wd)
444
+ PS_dealloc(self.word_ps)
445
+ sig_free(self.alpha)
446
+ sig_free(self.scratch)
447
+ raise MemoryError
448
+ else:
449
+ bitset_zero(self.alpha_is_wd)
450
+ for j from 0 <= j < self.nwords:
451
+ bitset_zero(&self.words[j])
452
+
453
+ if isinstance(arg, Matrix):
454
+ for i, j in arg.nonzero_positions():
455
+ bitset_set(&self.words[i], j)
456
+
457
+ self.output = NULL
458
+ self.ith_word = &ith_word_nonlinear
459
+
460
+ def __dealloc__(self):
461
+ cdef int j
462
+ bitset_free(self.alpha_is_wd)
463
+ for j from 0 <= j < 4*self.nwords + 1:
464
+ bitset_free(&self.scratch_bitsets[j])
465
+ for j from 0 <= j < self.nwords:
466
+ bitset_free(&self.words[j])
467
+ sig_free(self.words)
468
+ sig_free(self.scratch_bitsets)
469
+ sig_free(self.alpha_is_wd)
470
+ PS_dealloc(self.word_ps)
471
+ sig_free(self.alpha)
472
+ sig_free(self.scratch)
473
+ if self.output is not NULL:
474
+ deallocate_agcl_output(self.output)
475
+
476
+ def run(self, partition=None):
477
+ """
478
+ Perform the canonical labeling and automorphism group computation,
479
+ storing results to ``self``.
480
+
481
+ INPUT:
482
+
483
+ - ``partition`` -- an optional list of lists partition of the columns
484
+ default is the unit partition
485
+
486
+ EXAMPLES::
487
+
488
+ sage: from sage.groups.perm_gps.partn_ref.refinement_binary import NonlinearBinaryCodeStruct
489
+
490
+ sage: B = NonlinearBinaryCodeStruct(Matrix(GF(2), [[1,0,0,0],[0,0,1,0]]))
491
+ sage: B.run()
492
+ sage: B.automorphism_group()
493
+ ([[2, 1, 0, 3], [0, 3, 2, 1]], 4, [1, 0])
494
+ sage: B.canonical_relabeling()
495
+ [2, 0, 3, 1]
496
+
497
+ sage: B = NonlinearBinaryCodeStruct(Matrix(GF(2), [[1,1,1,0],[1,1,0,1],[1,0,1,1],[0,1,1,1]]))
498
+ sage: B.run()
499
+ sage: B.automorphism_group()
500
+ ([[0, 1, 3, 2], [0, 2, 1, 3], [1, 0, 2, 3]], 24, [0, 1, 2])
501
+ sage: B.canonical_relabeling()
502
+ [0, 1, 2, 3]
503
+
504
+ sage: B = NonlinearBinaryCodeStruct(Matrix(GF(2), [[1,1,1,0,0,0],[1,1,0,1,0,0],[1,0,1,1,0,0],[0,1,1,1,0,0],[0,0,0,0,1,0],[0,0,0,0,0,1]]))
505
+ sage: B.run()
506
+ sage: B.automorphism_group()
507
+ ([[0, 1, 3, 2, 4, 5],
508
+ [0, 2, 1, 3, 4, 5],
509
+ [1, 0, 2, 3, 4, 5],
510
+ [0, 1, 2, 3, 5, 4]],
511
+ 48,
512
+ [4, 0, 1, 2])
513
+ sage: B.canonical_relabeling()
514
+ [2, 3, 4, 5, 0, 1]
515
+ """
516
+ cdef int n = self.degree
517
+ cdef PartitionStack *part
518
+ if partition is None:
519
+ part = PS_new(n, 1)
520
+ else:
521
+ part = PS_from_list(partition)
522
+ if part is NULL:
523
+ raise MemoryError
524
+ self.first_time = 1
525
+
526
+ self.output = get_aut_gp_and_can_lab(<void *> self, part, self.degree, &all_children_are_equivalent, &refine_by_bip_degree, &compare_nonlinear_codes, 1, NULL, NULL, NULL)
527
+
528
+ PS_dealloc(part)
529
+
530
+ def automorphism_group(self):
531
+ """
532
+ Return a list of generators of the automorphism group, along with its
533
+ order and a base for which the list of generators is a strong generating
534
+ set.
535
+
536
+ EXAMPLES: (For more examples, see self.run())::
537
+
538
+ sage: from sage.groups.perm_gps.partn_ref.refinement_binary import NonlinearBinaryCodeStruct
539
+
540
+ sage: B = NonlinearBinaryCodeStruct(Matrix(GF(2), [[1,1,1,0,0,0],[1,1,0,1,0,0],[1,0,1,1,0,0],[0,1,1,1,0,0],[0,0,0,0,1,0],[0,0,0,0,0,1]]))
541
+ sage: B.run()
542
+ sage: B.automorphism_group()
543
+ ([[0, 1, 3, 2, 4, 5],
544
+ [0, 2, 1, 3, 4, 5],
545
+ [1, 0, 2, 3, 4, 5],
546
+ [0, 1, 2, 3, 5, 4]],
547
+ 48,
548
+ [4, 0, 1, 2])
549
+ """
550
+ cdef int i, j
551
+ cdef list generators, base
552
+ cdef Integer order
553
+ if self.output is NULL:
554
+ self.run()
555
+ generators = []
556
+ for i in range(self.output.num_gens):
557
+ generators.append([self.output.generators[i*self.degree + j] for j from 0 <= j < self.degree])
558
+ order = Integer()
559
+ SC_order(self.output.group, 0, order.value)
560
+ base = [self.output.group.base_orbits[i][0] for i in range(self.output.group.base_size)]
561
+ return generators, order, base
562
+
563
+ def canonical_relabeling(self):
564
+ """
565
+ Return a canonical relabeling (in list permutation format).
566
+
567
+ EXAMPLES: (For more examples, see self.run())::
568
+
569
+ sage: from sage.groups.perm_gps.partn_ref.refinement_binary import NonlinearBinaryCodeStruct
570
+
571
+ sage: B = NonlinearBinaryCodeStruct(Matrix(GF(2), [[1,1,1,0,0,0],[1,1,0,1,0,0],[1,0,1,1,0,0],[0,1,1,1,0,0],[0,0,0,0,1,0],[0,0,0,0,0,1]]))
572
+ sage: B.run()
573
+ sage: B.canonical_relabeling()
574
+ [2, 3, 4, 5, 0, 1]
575
+ """
576
+ cdef int i
577
+ if self.output is NULL:
578
+ self.run()
579
+ return [self.output.relabeling[i] for i in range(self.degree)]
580
+
581
+ def is_isomorphic(self, NonlinearBinaryCodeStruct other):
582
+ """
583
+ Calculate whether ``self`` is isomorphic to ``other``.
584
+
585
+ EXAMPLES::
586
+
587
+ sage: from sage.groups.perm_gps.partn_ref.refinement_binary import NonlinearBinaryCodeStruct
588
+
589
+ sage: B = NonlinearBinaryCodeStruct(Matrix(GF(2), [[1,1,1,1,0,0],[0,0,1,1,1,1]]))
590
+ sage: C = NonlinearBinaryCodeStruct(Matrix(GF(2), [[1,1,0,0,1,1],[1,1,1,1,0,0]]))
591
+ sage: B.is_isomorphic(C)
592
+ [2, 3, 0, 1, 4, 5]
593
+ """
594
+ cdef int i, n = self.degree
595
+ cdef int *output
596
+ cdef int *ordering
597
+ cdef PartitionStack *part
598
+ part = PS_new(n, 1)
599
+ ordering = <int *> sig_malloc(n * sizeof(int))
600
+ output = <int *> sig_malloc(n * sizeof(int))
601
+ if part is NULL or ordering is NULL or output is NULL:
602
+ PS_dealloc(part)
603
+ sig_free(ordering)
604
+ sig_free(output)
605
+ raise MemoryError
606
+ for i in range(n):
607
+ ordering[i] = i
608
+ self.first_time = 1
609
+ other.first_time = 1
610
+
611
+ cdef bint isomorphic = double_coset(<void *> self, <void *> other, part, ordering, n, &all_children_are_equivalent, &refine_by_bip_degree, &compare_nonlinear_codes, NULL, NULL, output)
612
+
613
+ PS_dealloc(part)
614
+ sig_free(ordering)
615
+ if isomorphic:
616
+ output_py = [output[i] for i in range(n)]
617
+ else:
618
+ output_py = False
619
+ sig_free(output)
620
+ return output_py
621
+
622
+ cdef int ith_word_nonlinear(BinaryCodeStruct self, int i, bitset_s *word) noexcept:
623
+ cdef NonlinearBinaryCodeStruct NBCS = <NonlinearBinaryCodeStruct> self
624
+ bitset_copy(word, &NBCS.words[i])
625
+ return 0
626
+
627
+ cdef int refine_by_bip_degree(PartitionStack *col_ps, void *S, int *cells_to_refine_by, int ctrb_len) noexcept:
628
+ r"""
629
+ Refine the input partition by checking degrees of vertices to the given
630
+ cells in the associated bipartite graph (vertices split into columns and
631
+ words).
632
+
633
+ INPUT:
634
+
635
+ - ``col_ps`` -- a partition stack, whose finest partition is the partition to be refined
636
+ - ``S`` -- a binary code struct object
637
+ - ``cells_to_refine_by`` -- list of pointers to cells to check degrees against
638
+ in refining the other cells (updated in place)
639
+ - ``ctrb_len`` -- how many cells in cells_to_refine_by
640
+
641
+ OUTPUT:
642
+
643
+ An integer $I$ invariant under the orbits of $S_n$. That is, if $\gamma$ is a
644
+ permutation of the columns, then
645
+ $$ I(G, PS, cells_to_refine_by) = I( \gamma(G), \gamma(PS), \gamma(cells_to_refine_by) ) .$$
646
+ """
647
+ cdef BinaryCodeStruct BCS = <BinaryCodeStruct> S
648
+ cdef int current_cell_against = 0
649
+ cdef int current_cell, i, r
650
+ cdef int first_largest_subcell
651
+ cdef int invariant = 0
652
+ cdef PartitionStack *word_ps = BCS.word_ps
653
+ cdef int *ctrb = BCS.alpha
654
+ cdef bitset_s *ctrb_is_wd = BCS.alpha_is_wd
655
+
656
+ word_ps.depth = col_ps.depth
657
+ PS_clear(word_ps)
658
+ bitset_zero(ctrb_is_wd)
659
+ memcpy(ctrb, cells_to_refine_by, ctrb_len * sizeof(int))
660
+ if BCS.first_time:
661
+ BCS.first_time = 0
662
+ ctrb[ctrb_len] = 0
663
+ bitset_set(ctrb_is_wd, ctrb_len)
664
+ ctrb_len += 1
665
+ cdef int *col_degrees = BCS.scratch # len degree
666
+ cdef int *col_counts = &BCS.scratch[BCS.degree] # len nwords+1
667
+ cdef int *col_output = &BCS.scratch[BCS.degree + BCS.nwords + 1] # len degree
668
+ cdef int *word_degrees = &BCS.scratch[2*BCS.degree + BCS.nwords + 1] # len nwords
669
+ cdef int *word_counts = &BCS.scratch[2*BCS.degree + 2*BCS.nwords + 1] # len degree+1
670
+ cdef int *word_output = &BCS.scratch[3*BCS.degree + 2*BCS.nwords + 2] # len nwords
671
+ cdef bint necessary_to_split_cell
672
+ cdef int against_index
673
+ while not (PS_is_discrete(col_ps) and PS_is_discrete(word_ps)) and current_cell_against < ctrb_len:
674
+ invariant += 1
675
+ current_cell = 0
676
+ if bitset_check(ctrb_is_wd, current_cell_against):
677
+ while current_cell < col_ps.degree:
678
+ invariant += 8
679
+ i = current_cell
680
+ necessary_to_split_cell = 0
681
+ while True:
682
+ col_degrees[i-current_cell] = col_degree(col_ps, BCS, i, ctrb[current_cell_against], word_ps)
683
+ if col_degrees[i-current_cell] != col_degrees[0]:
684
+ necessary_to_split_cell = 1
685
+ i += 1
686
+ if col_ps.levels[i-1] <= col_ps.depth:
687
+ break
688
+ # now, i points to the next cell (before refinement)
689
+ if necessary_to_split_cell:
690
+ invariant += 8
691
+ first_largest_subcell = sort_by_function_codes(col_ps, current_cell, col_degrees, col_counts, col_output, BCS.nwords+1)
692
+ invariant += col_degree(col_ps, BCS, i-1, ctrb[current_cell_against], word_ps)
693
+ invariant += first_largest_subcell
694
+ against_index = current_cell_against
695
+ while against_index < ctrb_len:
696
+ if ctrb[against_index] == current_cell and not bitset_check(ctrb_is_wd, against_index):
697
+ ctrb[against_index] = first_largest_subcell
698
+ break
699
+ against_index += 1
700
+ r = current_cell
701
+ while True:
702
+ if r == current_cell or col_ps.levels[r-1] == col_ps.depth:
703
+ if r != first_largest_subcell:
704
+ ctrb[ctrb_len] = r
705
+ ctrb_len += 1
706
+ r += 1
707
+ if r >= i:
708
+ break
709
+ invariant += (i - current_cell)
710
+ current_cell = i
711
+ else:
712
+ while current_cell < word_ps.degree:
713
+ invariant += 64
714
+ i = current_cell
715
+ necessary_to_split_cell = 0
716
+ while True:
717
+ word_degrees[i-current_cell] = word_degree(word_ps, BCS, i, ctrb[current_cell_against], col_ps)
718
+ if word_degrees[i-current_cell] != word_degrees[0]:
719
+ necessary_to_split_cell = 1
720
+ i += 1
721
+ if word_ps.levels[i-1] <= col_ps.depth:
722
+ break
723
+ # now, i points to the next cell (before refinement)
724
+ if necessary_to_split_cell:
725
+ invariant += 64
726
+ first_largest_subcell = sort_by_function_codes(word_ps, current_cell, word_degrees, word_counts, word_output, BCS.degree+1)
727
+ invariant += word_degree(word_ps, BCS, i-1, ctrb[current_cell_against], col_ps)
728
+ invariant += first_largest_subcell
729
+ against_index = current_cell_against
730
+ while against_index < ctrb_len:
731
+ if ctrb[against_index] == current_cell and bitset_check(ctrb_is_wd, against_index):
732
+ ctrb[against_index] = first_largest_subcell
733
+ break
734
+ against_index += 1
735
+ r = current_cell
736
+ while True:
737
+ if r == current_cell or word_ps.levels[r-1] == col_ps.depth:
738
+ if r != first_largest_subcell:
739
+ ctrb[ctrb_len] = r
740
+ bitset_set(ctrb_is_wd, ctrb_len)
741
+ ctrb_len += 1
742
+ r += 1
743
+ if r >= i:
744
+ break
745
+ invariant += (i - current_cell)
746
+ current_cell = i
747
+ current_cell_against += 1
748
+ return invariant
749
+
750
+ cdef int compare_linear_codes(int *gamma_1, int *gamma_2, void *S1, void *S2, int degree) noexcept:
751
+ r"""
752
+ Compare gamma_1(S1) and gamma_2(S2).
753
+
754
+ This returns:
755
+
756
+ - -1 if gamma_1(S1) < gamma_2(S2),
757
+ - 0 if gamma_1(S1) == gamma_2(S2),
758
+ - 1 if gamma_1(S1) > gamma_2(S2).
759
+
760
+ Abstractly, what this function does is relabel the basis of B by gamma_1 and
761
+ gamma_2, run a row reduction on each, and verify that the matrices are the
762
+ same, which holds if and only if the rowspan is the same. In practice, if
763
+ the codes are not equal, the reductions (which are carried out in an
764
+ interleaved way) will terminate as soon as this is discovered, and whichever
765
+ code has a 1 in the entry in which they differ is reported as larger.
766
+
767
+ INPUT:
768
+
769
+ - gamma_1, gamma_2 -- list permutations (inverse)
770
+ - S1, S2 -- binary code struct objects
771
+ """
772
+ cdef int i, piv_loc_1, piv_loc_2, cur_col, cur_row=0
773
+ cdef bint is_pivot_1, is_pivot_2
774
+ cdef LinearBinaryCodeStruct BCS1 = <LinearBinaryCodeStruct> S1
775
+ cdef LinearBinaryCodeStruct BCS2 = <LinearBinaryCodeStruct> S2
776
+ cdef bitset_s *basis_1 = BCS1.scratch_bitsets # len = dim
777
+ cdef bitset_s *basis_2 = &BCS1.scratch_bitsets[BCS1.dimension] # len = dim
778
+ cdef bitset_s *pivots = &BCS1.scratch_bitsets[2*BCS1.dimension] # len 1
779
+ cdef bitset_s *temp = &BCS1.scratch_bitsets[2*BCS1.dimension+1] # len 1
780
+ for i from 0 <= i < BCS1.dimension:
781
+ bitset_copy(&basis_1[i], &BCS1.basis[i])
782
+ bitset_copy(&basis_2[i], &BCS2.basis[i])
783
+ bitset_zero(pivots)
784
+ for cur_col from 0 <= cur_col < BCS1.degree:
785
+ is_pivot_1 = 0
786
+ is_pivot_2 = 0
787
+ for i from cur_row <= i < BCS1.dimension:
788
+ if bitset_check(&basis_1[i], gamma_1[cur_col]):
789
+ is_pivot_1 = 1
790
+ piv_loc_1 = i
791
+ break
792
+ for i from cur_row <= i < BCS1.dimension:
793
+ if bitset_check(&basis_2[i], gamma_2[cur_col]):
794
+ is_pivot_2 = 1
795
+ piv_loc_2 = i
796
+ break
797
+ if is_pivot_1 != is_pivot_2:
798
+ return <int>is_pivot_2 - <int>is_pivot_1
799
+ if is_pivot_1:
800
+ bitset_set(pivots, cur_col)
801
+ if piv_loc_1 != cur_row:
802
+ bitset_copy(temp, &basis_1[piv_loc_1])
803
+ bitset_copy(&basis_1[piv_loc_1], &basis_1[cur_row])
804
+ bitset_copy(&basis_1[cur_row], temp)
805
+ if piv_loc_2 != cur_row:
806
+ bitset_copy(temp, &basis_2[piv_loc_2])
807
+ bitset_copy(&basis_2[piv_loc_2], &basis_2[cur_row])
808
+ bitset_copy(&basis_2[cur_row], temp)
809
+ for i from 0 <= i < cur_row:
810
+ if bitset_check(&basis_1[i], gamma_1[cur_col]):
811
+ bitset_xor(&basis_1[i], &basis_1[i], &basis_1[cur_row])
812
+ if bitset_check(&basis_2[i], gamma_2[cur_col]):
813
+ bitset_xor(&basis_2[i], &basis_2[i], &basis_2[cur_row])
814
+ for i from cur_row < i < BCS1.dimension:
815
+ if bitset_check(&basis_1[i], gamma_1[cur_col]):
816
+ bitset_xor(&basis_1[i], &basis_1[i], &basis_1[cur_row])
817
+ if bitset_check(&basis_2[i], gamma_2[cur_col]):
818
+ bitset_xor(&basis_2[i], &basis_2[i], &basis_2[cur_row])
819
+ cur_row += 1
820
+ else:
821
+ for i from 0 <= i < cur_row:
822
+ if bitset_check(&basis_1[i], gamma_1[cur_col]) != bitset_check(&basis_2[i], gamma_2[cur_col]):
823
+ return <int>bitset_check(&basis_2[i], gamma_2[cur_col]) - <int>bitset_check(&basis_1[i], gamma_1[cur_col])
824
+ return 0
825
+
826
+ cdef int compare_nonlinear_codes(int *gamma_1, int *gamma_2, void *S1, void *S2, int degree) noexcept:
827
+ r"""
828
+ Compare gamma_1(S1) and gamma_2(S2).
829
+
830
+ This returns:
831
+
832
+ - -1 if gamma_1(S1) < gamma_2(S2),
833
+ - 0 if gamma_1(S1) == gamma_2(S2),
834
+ - 1 if gamma_1(S1) > gamma_2(S2).
835
+
836
+ INPUT:
837
+
838
+ - gamma_1, gamma_2 -- list permutations (inverse)
839
+ - S1, S2 -- a binary code struct object
840
+ """
841
+ cdef int side=0, i, start, end, n_one_1, n_one_2, cur_col
842
+ cdef int where_0, where_1
843
+ cdef NonlinearBinaryCodeStruct BCS1 = <NonlinearBinaryCodeStruct> S1
844
+ cdef NonlinearBinaryCodeStruct BCS2 = <NonlinearBinaryCodeStruct> S2
845
+ cdef bitset_s *B_1_0 = BCS1.scratch_bitsets # nwords of len degree
846
+ cdef bitset_s *B_1_1 = &BCS1.scratch_bitsets[BCS1.nwords] # nwords of len degree
847
+ cdef bitset_s *B_2_0 = &BCS1.scratch_bitsets[2*BCS1.nwords] # nwords of len degree
848
+ cdef bitset_s *B_2_1 = &BCS1.scratch_bitsets[3*BCS1.nwords] # nwords of len degree
849
+ cdef bitset_s *dividers = &BCS1.scratch_bitsets[4*BCS1.nwords] # 1 of len nwords
850
+ cdef bitset_s *B_1_this
851
+ cdef bitset_s *B_1_other
852
+ cdef bitset_s *B_2_this
853
+ cdef bitset_s *B_2_other
854
+ for i from 0 <= i < BCS1.nwords:
855
+ bitset_copy(&B_1_0[i], &BCS1.words[i])
856
+ bitset_copy(&B_2_0[i], &BCS2.words[i])
857
+ bitset_zero(dividers)
858
+ bitset_set(dividers, BCS1.nwords-1)
859
+
860
+ for cur_col from 0 <= cur_col < BCS1.degree:
861
+ if side == 0:
862
+ B_1_this = B_1_0
863
+ B_1_other = B_1_1
864
+ B_2_this = B_2_0
865
+ B_2_other = B_2_1
866
+ else:
867
+ B_1_this = B_1_1
868
+ B_1_other = B_1_0
869
+ B_2_this = B_2_1
870
+ B_2_other = B_2_0
871
+ side ^= 1
872
+ start = 0
873
+ while start < BCS1.nwords:
874
+ end = start
875
+ while not bitset_check(dividers, end):
876
+ end += 1
877
+ end += 1
878
+ n_one_1 = 0
879
+ n_one_2 = 0
880
+ for i from start <= i < end:
881
+ n_one_1 += bitset_check(&B_1_this[i], gamma_1[cur_col])
882
+ n_one_2 += bitset_check(&B_2_this[i], gamma_2[cur_col])
883
+ if n_one_1 != n_one_2:
884
+ if n_one_1 > n_one_2:
885
+ return 1
886
+ else:
887
+ return -1
888
+ where_0 = start
889
+ where_1 = end - n_one_1
890
+ if start < where_1 and where_1 < end:
891
+ bitset_set(dividers, where_1 - 1)
892
+ for i from start <= i < end:
893
+ if bitset_check(&B_1_this[i], gamma_1[cur_col]):
894
+ bitset_copy(&B_1_other[where_1], &B_1_this[i])
895
+ where_1 += 1
896
+ else:
897
+ bitset_copy(&B_1_other[where_0], &B_1_this[i])
898
+ where_0 += 1
899
+ where_0 = start
900
+ where_1 = end - n_one_2
901
+ for i from start <= i < end:
902
+ if bitset_check(&B_2_this[i], gamma_2[cur_col]):
903
+ bitset_copy(&B_2_other[where_1], &B_2_this[i])
904
+ where_1 += 1
905
+ else:
906
+ bitset_copy(&B_2_other[where_0], &B_2_this[i])
907
+ where_0 += 1
908
+ start = end
909
+
910
+ return 0
911
+
912
+ cdef bint all_children_are_equivalent(PartitionStack *col_ps, void *S) noexcept:
913
+ """
914
+ Return ``True`` if any refinement of the current partition results in the
915
+ same structure.
916
+
917
+ INPUT:
918
+
919
+ - ``col_ps`` -- the partition stack to be checked
920
+ - ``S`` -- a binary code struct object
921
+
922
+ .. WARNING::
923
+
924
+ Converse does not hold in general! See Lemma 2.25 of [1] for details, noting
925
+ that the binary code is interpreted as a bipartite graph (see module docs
926
+ for details).
927
+ """
928
+ cdef BinaryCodeStruct BCS = <BinaryCodeStruct> S
929
+ cdef PartitionStack *word_ps = BCS.word_ps
930
+ cdef int i, n = col_ps.degree + BCS.nwords
931
+ cdef bint in_cell = 0
932
+ cdef int nontrivial_cells = 0
933
+ cdef int total_cells = PS_num_cells(col_ps) + PS_num_cells(word_ps)
934
+ if n <= total_cells + 4:
935
+ return 1
936
+ for i from 0 <= i < BCS.nwords:
937
+ if word_ps.levels[i] <= col_ps.depth:
938
+ if in_cell:
939
+ nontrivial_cells += 1
940
+ in_cell = 0
941
+ else:
942
+ in_cell = 1
943
+ in_cell = 0
944
+ for i from 0 <= i < BCS.degree:
945
+ if col_ps.levels[i] <= col_ps.depth:
946
+ if in_cell:
947
+ nontrivial_cells += 1
948
+ in_cell = 0
949
+ else:
950
+ in_cell = 1
951
+ if n == total_cells + nontrivial_cells:
952
+ return 1
953
+ if n == total_cells + nontrivial_cells + 1:
954
+ return 1
955
+ return 0
956
+
957
+ cdef inline int word_degree(PartitionStack *word_ps, BinaryCodeStruct BCS, int entry, int cell_index, PartitionStack *col_ps) noexcept:
958
+ """
959
+ Return the number of edges from the vertex corresponding to entry to
960
+ vertices in the cell corresponding to cell_index.
961
+
962
+ INPUT:
963
+
964
+ - ``word_ps`` -- the partition stack to be checked
965
+ - ``col_ps`` -- corresponding partition stack on columns
966
+ - ``BCS`` -- a binary code struct object
967
+ - ``entry`` -- the position of the vertex in question in the entries of word_ps
968
+ - ``cell_index`` -- the starting position of the cell in question in the entries of PS
969
+ """
970
+ cdef bitset_t cell, word
971
+ cdef int h
972
+ bitset_init(cell, BCS.degree)
973
+ bitset_zero(cell)
974
+ bitset_init(word, BCS.degree)
975
+ entry = word_ps.entries[entry]
976
+ bitset_set(cell, col_ps.entries[cell_index])
977
+ while col_ps.levels[cell_index] > col_ps.depth:
978
+ cell_index += 1
979
+ bitset_set(cell, col_ps.entries[cell_index])
980
+ BCS.ith_word(BCS, entry, word)
981
+ bitset_and(cell, word, cell)
982
+ h = bitset_hamming_weight(cell)
983
+ bitset_free(cell)
984
+ bitset_free(word)
985
+ return h
986
+
987
+ cdef inline int col_degree(PartitionStack *col_ps, BinaryCodeStruct BCS, int entry, int cell_index, PartitionStack *word_ps) noexcept:
988
+ """
989
+ Return the number of edges from the vertex corresponding to entry to
990
+ vertices in the cell corresponding to cell_index.
991
+
992
+ INPUT:
993
+
994
+ - ``col_ps`` -- the partition stack to be checked
995
+ - ``word_ps`` -- corresponding partition stack on words
996
+ - ``BCS`` -- a binary code struct object
997
+ - ``entry`` -- the position of the vertex in question in the entries of word_ps
998
+ - ``cell_index`` -- the starting position of the cell in question in the entries of PS
999
+ """
1000
+ cdef bitset_t word
1001
+ bitset_init(word, BCS.degree)
1002
+ cdef int degree = 0
1003
+ entry = col_ps.entries[entry]
1004
+ while True:
1005
+ BCS.ith_word(BCS, word_ps.entries[cell_index], word)
1006
+ degree += bitset_check(word, entry)
1007
+ if not word_ps.levels[cell_index] > col_ps.depth:
1008
+ break
1009
+ cell_index += 1
1010
+ bitset_free(word)
1011
+ return degree
1012
+
1013
+ cdef inline int sort_by_function_codes(PartitionStack *PS, int start, int *degrees, int *counts, int *output, int count_max) noexcept:
1014
+ """
1015
+ A simple counting sort, given the degrees of vertices to a certain cell.
1016
+
1017
+ INPUT:
1018
+
1019
+ - ``PS`` -- the partition stack to be checked
1020
+ - ``start`` -- beginning index of the cell to be sorted
1021
+ - ``degrees`` -- the values to be sorted by
1022
+ - count, count_max, output -- scratch space
1023
+ """
1024
+ cdef int i, j, max, max_location
1025
+ for j in range(count_max):
1026
+ counts[j] = 0
1027
+ i = 0
1028
+ while PS.levels[i+start] > PS.depth:
1029
+ counts[degrees[i]] += 1
1030
+ i += 1
1031
+ counts[degrees[i]] += 1
1032
+ # i+start is the right endpoint of the cell now
1033
+ max = counts[0]
1034
+ max_location = 0
1035
+ for j from 0 < j < count_max:
1036
+ if counts[j] > max:
1037
+ max = counts[j]
1038
+ max_location = j
1039
+ counts[j] += counts[j - 1]
1040
+ for j from i >= j >= 0:
1041
+ counts[degrees[j]] -= 1
1042
+ output[counts[degrees[j]]] = PS.entries[start+j]
1043
+ max_location = counts[max_location]+start
1044
+ for j from 0 <= j <= i:
1045
+ PS.entries[start+j] = output[j]
1046
+ j = 1
1047
+ while j < count_max and counts[j] <= i:
1048
+ if counts[j] > 0:
1049
+ PS.levels[start + counts[j] - 1] = PS.depth
1050
+ PS_move_min_to_front(PS, start + counts[j-1], start + counts[j] - 1)
1051
+ j += 1
1052
+ return max_location
1053
+
1054
+
1055
+ def random_tests(num=50, n_max=50, k_max=6, nwords_max=200, perms_per_code=10, density_range=(.1,.9)):
1056
+ """
1057
+ Test to make sure that ``C(gamma(B)) == C(B)`` for random permutations ``gamma``
1058
+ and random codes ``B``, and that :meth:`is_isomorphic` returns an isomorphism.
1059
+
1060
+ INPUT:
1061
+
1062
+ - ``num`` -- run tests for this many codes
1063
+ - ``n_max`` -- test codes with at most this many columns
1064
+ - ``k_max`` -- test codes with at most this for dimension
1065
+ - ``perms_per_code`` -- test each code with this many random permutations
1066
+
1067
+ DISCUSSION:
1068
+
1069
+ This code generates num random linear codes B on at most n_max columns with
1070
+ dimension at most k_max, and a random nonlinear code B2 on at most n_max
1071
+ columns with number of words at most nwords_max. The density of entries in
1072
+ the basis is chosen randomly between 0 and 1.
1073
+
1074
+ For each code B (B2) generated, we uniformly generate perms_per_code random
1075
+ permutations and verify that the canonical labels of B and the image of B
1076
+ under the generated permutation are equal, and check that the double coset
1077
+ function returns an isomorphism.
1078
+
1079
+ TESTS::
1080
+
1081
+ sage: import sage.groups.perm_gps.partn_ref.refinement_binary
1082
+ sage: sage.groups.perm_gps.partn_ref.refinement_binary.random_tests() # long time (up to 5s on sage.math, 2012)
1083
+ All passed: ... random tests on ... codes.
1084
+ """
1085
+ from sage.misc.prandom import random, randint
1086
+ from sage.combinat.permutation import Permutations
1087
+ from sage.matrix.constructor import random_matrix, matrix
1088
+ from sage.rings.finite_rings.finite_field_constructor import FiniteField as GF
1089
+ cdef int h, i, j, n, k, num_tests = 0, num_codes = 0
1090
+ cdef LinearBinaryCodeStruct B, C
1091
+ cdef NonlinearBinaryCodeStruct B_n, C_n
1092
+ for mmm in range(num):
1093
+ p = random()*(density_range[1]-density_range[0]) + density_range[0]
1094
+ n = randint(2, n_max)
1095
+ k = randint(1, min(n-1,k_max) )
1096
+ nwords = randint(1, min(n-1,nwords_max) )
1097
+ S = Permutations(n)
1098
+
1099
+ M = random_matrix(GF(2), k, n, sparse=False, density=p).row_space().basis_matrix()
1100
+ M_n = random_matrix(GF(2), nwords, n, sparse=False, density=p)
1101
+ B = LinearBinaryCodeStruct( M )
1102
+ B_n = NonlinearBinaryCodeStruct( M_n )
1103
+ B.run()
1104
+ B_n.run()
1105
+
1106
+ for i from 0 <= i < perms_per_code:
1107
+ perm = [a-1 for a in list(S.random_element())]
1108
+ C = LinearBinaryCodeStruct( matrix(GF(2), B.dimension, B.degree) )
1109
+ C_n = NonlinearBinaryCodeStruct( matrix(GF(2), B_n.nwords, B_n.degree) )
1110
+ for j from 0 <= j < B.dimension:
1111
+ for h from 0 <= h < B.degree:
1112
+ bitset_set_to(&C.basis[j], <mp_bitcnt_t> perm[h], bitset_check(&B.basis[j], h))
1113
+ for j from 0 <= j < B_n.nwords:
1114
+ for h from 0 <= h < B_n.degree:
1115
+ bitset_set_to(&C_n.words[j], <mp_bitcnt_t> perm[h], bitset_check(&B_n.words[j], h))
1116
+ # now C is a random permutation of B, and C_n of B_n
1117
+ C.run()
1118
+ C_n.run()
1119
+ B_relab = B.canonical_relabeling()
1120
+ C_relab = C.canonical_relabeling()
1121
+ B_n_relab = B_n.canonical_relabeling()
1122
+ C_n_relab = C_n.canonical_relabeling()
1123
+ B_M = matrix(GF(2), B.dimension, B.degree)
1124
+ C_M = matrix(GF(2), B.dimension, B.degree)
1125
+ B_n_M = matrix(GF(2), B_n.nwords, B_n.degree)
1126
+ C_n_M = matrix(GF(2), B_n.nwords, B_n.degree)
1127
+ for j from 0 <= j < B.dimension:
1128
+ for h from 0 <= h < B.degree:
1129
+ B_M[j,B_relab[h]] = bitset_check(&B.basis[j], h)
1130
+ C_M[j,C_relab[h]] = bitset_check(&C.basis[j], h)
1131
+ for j from 0 <= j < B_n.nwords:
1132
+ for h from 0 <= h < B_n.degree:
1133
+ B_n_M[j,B_n_relab[h]] = bitset_check(&B_n.words[j], h)
1134
+ C_n_M[j,C_n_relab[h]] = bitset_check(&C_n.words[j], h)
1135
+ if B_M.row_space() != C_M.row_space():
1136
+ print("can_lab error -- B:")
1137
+ for j from 0 <= j < B.dimension:
1138
+ print(bitset_string(&B.basis[j]))
1139
+ print(perm)
1140
+ return
1141
+ if sorted(B_n_M.rows()) != sorted(C_n_M.rows()):
1142
+ print("can_lab error -- B_n:")
1143
+ for j from 0 <= j < B_n.nwords:
1144
+ print(bitset_string(&B_n.words[j]))
1145
+ print(perm)
1146
+ return
1147
+ isom = B.is_isomorphic(C)
1148
+ if not isom:
1149
+ print("isom -- B:")
1150
+ for j from 0 <= j < B.dimension:
1151
+ print(bitset_string(&B.basis[j]))
1152
+ print(perm)
1153
+ print(isom)
1154
+ return
1155
+ isom = B_n.is_isomorphic(C_n)
1156
+ if not isom:
1157
+ print("isom -- B_n:")
1158
+ for j from 0 <= j < B_n.nwords:
1159
+ print(bitset_string(&B_n.words[j]))
1160
+ print(perm)
1161
+ print(isom)
1162
+ return
1163
+
1164
+ num_tests += 4*perms_per_code
1165
+ num_codes += 2
1166
+
1167
+ print("All passed: %d random tests on %d codes." % (num_tests, num_codes))