passagemath-modules 10.5.46__cp310-cp310-macosx_14_0_arm64.whl → 10.6.20__cp310-cp310-macosx_14_0_arm64.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 (320) hide show
  1. {passagemath_modules-10.5.46.dist-info → passagemath_modules-10.6.20.dist-info}/METADATA +49 -44
  2. {passagemath_modules-10.5.46.dist-info → passagemath_modules-10.6.20.dist-info}/RECORD +320 -314
  3. passagemath_modules.dylibs/libmpc.3.dylib +0 -0
  4. passagemath_modules.dylibs/libopenblasp-r0.3.29.dylib +0 -0
  5. sage/algebras/clifford_algebra.py +2 -2
  6. sage/algebras/clifford_algebra_element.cpython-310-darwin.so +0 -0
  7. sage/algebras/clifford_algebra_element.pyx +4 -2
  8. sage/algebras/exterior_algebra_groebner.cpython-310-darwin.so +0 -0
  9. sage/algebras/exterior_algebra_groebner.pyx +2 -0
  10. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra.py +83 -5
  11. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.cpython-310-darwin.so +0 -0
  12. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pxd +2 -0
  13. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pyx +28 -3
  14. sage/algebras/finite_gca.py +1 -1
  15. sage/algebras/lie_algebras/bgg_dual_module.py +18 -11
  16. sage/algebras/lie_algebras/classical_lie_algebra.py +3 -3
  17. sage/algebras/lie_algebras/examples.py +2 -2
  18. sage/algebras/lie_algebras/free_lie_algebra.py +1 -1
  19. sage/algebras/lie_algebras/heisenberg.py +4 -4
  20. sage/algebras/lie_algebras/lie_algebra.py +1 -1
  21. sage/algebras/lie_algebras/lie_algebra_element.cpython-310-darwin.so +0 -0
  22. sage/algebras/lie_algebras/lie_algebra_element.pyx +63 -27
  23. sage/algebras/lie_algebras/quotient.py +40 -29
  24. sage/algebras/lie_algebras/subalgebra.py +76 -53
  25. sage/algebras/lie_algebras/verma_module.py +1 -3
  26. sage/algebras/octonion_algebra.cpython-310-darwin.so +0 -0
  27. sage/algebras/octonion_algebra.pyx +1 -1
  28. sage/algebras/orlik_solomon.py +4 -4
  29. sage/algebras/orlik_terao.py +4 -4
  30. sage/algebras/steenrod/steenrod_algebra.py +37 -30
  31. sage/algebras/steenrod/steenrod_algebra_bases.py +2 -2
  32. sage/algebras/steenrod/steenrod_algebra_misc.py +4 -4
  33. sage/algebras/steenrod/steenrod_algebra_mult.py +2 -2
  34. sage/all__sagemath_modules.py +1 -0
  35. sage/calculus/integration.cpython-310-darwin.so +0 -0
  36. sage/calculus/integration.pyx +6 -5
  37. sage/calculus/interpolation.cpython-310-darwin.so +0 -0
  38. sage/calculus/interpolators.cpython-310-darwin.so +0 -0
  39. sage/calculus/ode.cpython-310-darwin.so +0 -0
  40. sage/calculus/ode.pxd +2 -2
  41. sage/calculus/ode.pyx +6 -4
  42. sage/calculus/riemann.cpython-310-darwin.so +0 -0
  43. sage/calculus/riemann.pyx +68 -48
  44. sage/calculus/transforms/dwt.cpython-310-darwin.so +0 -0
  45. sage/calculus/transforms/fft.cpython-310-darwin.so +0 -0
  46. sage/coding/ag_code_decoders.cpython-310-darwin.so +0 -0
  47. sage/coding/ag_code_decoders.pyx +31 -31
  48. sage/coding/binary_code.cpython-310-darwin.so +0 -0
  49. sage/coding/binary_code.pxd +6 -6
  50. sage/coding/binary_code.pyx +212 -173
  51. sage/coding/guruswami_sudan/utils.py +3 -5
  52. sage/coding/kasami_codes.cpython-310-darwin.so +0 -0
  53. sage/coding/kasami_codes.pyx +20 -24
  54. sage/coding/linear_code.py +2 -2
  55. sage/coding/linear_code_no_metric.py +5 -5
  56. sage/coding/linear_rank_metric.py +81 -19
  57. sage/combinat/free_module.py +22 -2
  58. sage/combinat/root_system/ambient_space.py +1 -1
  59. sage/combinat/root_system/associahedron.py +4 -4
  60. sage/combinat/root_system/braid_move_calculator.py +1 -1
  61. sage/combinat/root_system/braid_orbit.cpython-310-darwin.so +0 -0
  62. sage/combinat/root_system/branching_rules.py +2 -2
  63. sage/combinat/root_system/cartan_type.py +14 -14
  64. sage/combinat/root_system/coxeter_group.py +2 -2
  65. sage/combinat/root_system/coxeter_type.py +11 -0
  66. sage/combinat/root_system/extended_affine_weyl_group.py +8 -8
  67. sage/combinat/root_system/fundamental_group.py +2 -4
  68. sage/combinat/root_system/hecke_algebra_representation.py +1 -1
  69. sage/combinat/root_system/pieri_factors.py +2 -2
  70. sage/combinat/root_system/root_lattice_realization_algebras.py +1 -1
  71. sage/combinat/root_system/root_lattice_realizations.py +1 -1
  72. sage/combinat/root_system/type_folded.py +3 -3
  73. sage/combinat/root_system/type_reducible.py +8 -7
  74. sage/combinat/root_system/type_super_A.py +2 -2
  75. sage/combinat/root_system/weight_lattice_realizations.py +9 -8
  76. sage/combinat/root_system/weyl_characters.py +1 -1
  77. sage/crypto/__init__.py +1 -0
  78. sage/crypto/block_cipher/des.py +1 -1
  79. sage/crypto/block_cipher/miniaes.py +3 -3
  80. sage/crypto/block_cipher/present.py +3 -3
  81. sage/crypto/block_cipher/sdes.py +3 -3
  82. sage/crypto/boolean_function.cpython-310-darwin.so +0 -0
  83. sage/crypto/boolean_function.pyx +22 -23
  84. sage/crypto/key_exchange/diffie_hellman.py +4 -9
  85. sage/crypto/mq/sr.py +1 -1
  86. sage/crypto/public_key/blum_goldwasser.py +3 -3
  87. sage/crypto/sbox.cpython-310-darwin.so +0 -0
  88. sage/crypto/sbox.pyx +1 -1
  89. sage/crypto/sboxes.py +22 -0
  90. sage/crypto/util.py +4 -6
  91. sage/ext/interpreters/__init__.py +1 -1
  92. sage/ext/interpreters/all__sagemath_modules.py +1 -1
  93. sage/ext/interpreters/wrapper_cc.cpython-310-darwin.so +0 -0
  94. sage/ext/interpreters/wrapper_cc.pxd +5 -5
  95. sage/ext/interpreters/wrapper_cc.pyx +1 -1
  96. sage/ext/interpreters/wrapper_cdf.cpython-310-darwin.so +0 -0
  97. sage/ext/interpreters/wrapper_cdf.pxd +5 -7
  98. sage/ext/interpreters/wrapper_cdf.pyx +4 -10
  99. sage/ext/interpreters/wrapper_rdf.cpython-310-darwin.so +0 -0
  100. sage/ext/interpreters/wrapper_rdf.pxd +1 -1
  101. sage/ext/interpreters/wrapper_rdf.pyx +1 -1
  102. sage/ext/interpreters/wrapper_rr.cpython-310-darwin.so +0 -0
  103. sage/ext/interpreters/wrapper_rr.pxd +5 -5
  104. sage/ext/interpreters/wrapper_rr.pyx +1 -2
  105. sage/geometry/toric_lattice.py +3 -3
  106. sage/geometry/toric_lattice_element.cpython-310-darwin.so +0 -0
  107. sage/groups/additive_abelian/additive_abelian_group.py +1 -1
  108. sage/groups/additive_abelian/qmodnz.py +4 -4
  109. sage/groups/matrix_gps/coxeter_group.py +17 -4
  110. sage/groups/matrix_gps/group_element.cpython-310-darwin.so +0 -0
  111. sage/groups/misc_gps/argument_groups.py +2 -2
  112. sage/groups/misc_gps/imaginary_groups.py +4 -4
  113. sage/groups/perm_gps/partn_ref/refinement_binary.cpython-310-darwin.so +0 -0
  114. sage/groups/perm_gps/partn_ref/refinement_matrices.cpython-310-darwin.so +0 -0
  115. sage/homology/chain_complex.py +0 -2
  116. sage/homology/hochschild_complex.py +3 -3
  117. sage/homology/homology_morphism.py +6 -6
  118. sage/homology/homology_vector_space_with_basis.py +1 -1
  119. sage/libs/gsl/array.cpython-310-darwin.so +0 -0
  120. sage/libs/mpmath/utils.cpython-310-darwin.so +0 -0
  121. sage/matrix/action.cpython-310-darwin.so +0 -0
  122. sage/matrix/args.cpython-310-darwin.so +0 -0
  123. sage/matrix/args.pyx +25 -10
  124. sage/matrix/benchmark.py +8 -4
  125. sage/matrix/compute_J_ideal.py +2 -2
  126. sage/matrix/constructor.cpython-310-darwin.so +0 -0
  127. sage/matrix/echelon_matrix.cpython-310-darwin.so +0 -0
  128. sage/matrix/echelon_matrix.pyx +1 -1
  129. sage/matrix/matrix0.cpython-310-darwin.so +0 -0
  130. sage/matrix/matrix0.pxd +3 -3
  131. sage/matrix/matrix0.pyx +7 -5
  132. sage/matrix/matrix1.cpython-310-darwin.so +0 -0
  133. sage/matrix/matrix1.pyx +87 -48
  134. sage/matrix/matrix2.cpython-310-darwin.so +0 -0
  135. sage/matrix/matrix2.pxd +3 -3
  136. sage/matrix/matrix2.pyx +758 -75
  137. sage/matrix/matrix_cdv.cpython-310-darwin.so +0 -0
  138. sage/matrix/matrix_complex_double_dense.cpython-310-darwin.so +0 -0
  139. sage/matrix/matrix_complex_double_dense.pyx +1 -1
  140. sage/matrix/matrix_dense.cpython-310-darwin.so +0 -0
  141. sage/matrix/matrix_dense.pyx +2 -3
  142. sage/matrix/matrix_double_dense.cpython-310-darwin.so +0 -0
  143. sage/matrix/matrix_double_dense.pyx +11 -5
  144. sage/matrix/matrix_double_sparse.cpython-310-darwin.so +0 -0
  145. sage/matrix/matrix_generic_dense.cpython-310-darwin.so +0 -0
  146. sage/matrix/matrix_generic_sparse.cpython-310-darwin.so +0 -0
  147. sage/matrix/matrix_generic_sparse.pyx +1 -1
  148. sage/matrix/matrix_laurent_mpolynomial_dense.cpython-310-darwin.so +0 -0
  149. sage/matrix/matrix_numpy_dense.cpython-310-darwin.so +0 -0
  150. sage/matrix/matrix_numpy_integer_dense.cpython-310-darwin.so +0 -0
  151. sage/matrix/matrix_polynomial_dense.cpython-310-darwin.so +0 -0
  152. sage/matrix/matrix_polynomial_dense.pyx +952 -261
  153. sage/matrix/matrix_real_double_dense.cpython-310-darwin.so +0 -0
  154. sage/matrix/matrix_sparse.cpython-310-darwin.so +0 -0
  155. sage/matrix/matrix_sparse.pyx +2 -3
  156. sage/matrix/matrix_window.cpython-310-darwin.so +0 -0
  157. sage/matrix/matrix_window.pyx +2 -2
  158. sage/matrix/misc_mpfr.cpython-310-darwin.so +0 -0
  159. sage/matrix/operation_table.py +0 -2
  160. sage/matrix/special.py +4 -0
  161. sage/matrix/strassen.cpython-310-darwin.so +0 -0
  162. sage/matrix/strassen.pyx +1 -1
  163. sage/matroids/basis_exchange_matroid.cpython-310-darwin.so +0 -0
  164. sage/matroids/basis_matroid.cpython-310-darwin.so +0 -0
  165. sage/matroids/chow_ring.py +68 -65
  166. sage/matroids/chow_ring_ideal.py +41 -38
  167. sage/matroids/circuit_closures_matroid.cpython-310-darwin.so +0 -0
  168. sage/matroids/circuits_matroid.cpython-310-darwin.so +0 -0
  169. sage/matroids/database_matroids.py +16 -5
  170. sage/matroids/dual_matroid.py +2 -2
  171. sage/matroids/extension.cpython-310-darwin.so +0 -0
  172. sage/matroids/flats_matroid.cpython-310-darwin.so +0 -0
  173. sage/matroids/gammoid.py +1 -1
  174. sage/matroids/graphic_matroid.cpython-310-darwin.so +0 -0
  175. sage/matroids/graphic_matroid.pyx +3 -3
  176. sage/matroids/lean_matrix.cpython-310-darwin.so +0 -0
  177. sage/matroids/lean_matrix.pyx +22 -22
  178. sage/matroids/linear_matroid.cpython-310-darwin.so +0 -0
  179. sage/matroids/linear_matroid.pyx +13 -13
  180. sage/matroids/matroid.cpython-310-darwin.so +0 -0
  181. sage/matroids/matroid.pyx +15 -15
  182. sage/matroids/matroids_plot_helpers.py +48 -46
  183. sage/matroids/minor_matroid.py +2 -2
  184. sage/matroids/set_system.cpython-310-darwin.so +0 -0
  185. sage/matroids/transversal_matroid.cpython-310-darwin.so +0 -0
  186. sage/matroids/transversal_matroid.pyx +3 -3
  187. sage/matroids/union_matroid.cpython-310-darwin.so +0 -0
  188. sage/matroids/union_matroid.pyx +3 -0
  189. sage/matroids/unpickling.cpython-310-darwin.so +0 -0
  190. sage/matroids/utilities.py +2 -2
  191. sage/misc/c3.cpython-310-darwin.so +0 -0
  192. sage/misc/compat.py +1 -2
  193. sage/misc/pickle_old.cpython-310-darwin.so +0 -0
  194. sage/modules/diamond_cutting.py +117 -30
  195. sage/modules/fg_pid/fgp_module.py +3 -3
  196. sage/modules/filtered_vector_space.py +4 -4
  197. sage/modules/finite_submodule_iter.cpython-310-darwin.so +0 -0
  198. sage/modules/fp_graded/free_module.py +2 -2
  199. sage/modules/fp_graded/module.py +2 -2
  200. sage/modules/fp_graded/morphism.py +4 -4
  201. sage/modules/fp_graded/steenrod/morphism.py +1 -1
  202. sage/modules/free_module.py +144 -15
  203. sage/modules/free_module_element.cpython-310-darwin.so +0 -0
  204. sage/modules/free_module_element.pyx +4 -4
  205. sage/modules/free_module_integer.py +2 -2
  206. sage/modules/free_module_morphism.py +3 -3
  207. sage/modules/free_module_pseudohomspace.py +352 -0
  208. sage/modules/free_module_pseudomorphism.py +578 -0
  209. sage/modules/free_quadratic_module_integer_symmetric.py +24 -13
  210. sage/modules/matrix_morphism.py +9 -9
  211. sage/modules/multi_filtered_vector_space.py +4 -4
  212. sage/modules/ore_module.py +2208 -0
  213. sage/modules/ore_module_element.py +178 -0
  214. sage/modules/ore_module_homspace.py +147 -0
  215. sage/modules/ore_module_morphism.py +968 -0
  216. sage/modules/quotient_module.py +11 -1
  217. sage/modules/submodule.py +1 -1
  218. sage/modules/torsion_quadratic_module.py +1 -1
  219. sage/modules/vector_complex_double_dense.cpython-310-darwin.so +0 -0
  220. sage/modules/vector_double_dense.cpython-310-darwin.so +0 -0
  221. sage/modules/vector_integer_dense.cpython-310-darwin.so +0 -0
  222. sage/modules/vector_integer_sparse.cpython-310-darwin.so +0 -0
  223. sage/modules/vector_integer_sparse.pyx +4 -4
  224. sage/modules/vector_modn_dense.cpython-310-darwin.so +0 -0
  225. sage/modules/vector_modn_sparse.cpython-310-darwin.so +0 -0
  226. sage/modules/vector_numpy_dense.cpython-310-darwin.so +0 -0
  227. sage/modules/vector_numpy_integer_dense.cpython-310-darwin.so +0 -0
  228. sage/modules/vector_rational_dense.cpython-310-darwin.so +0 -0
  229. sage/modules/vector_rational_dense.pyx +1 -1
  230. sage/modules/vector_rational_sparse.cpython-310-darwin.so +0 -0
  231. sage/modules/vector_rational_sparse.pyx +5 -5
  232. sage/modules/vector_real_double_dense.cpython-310-darwin.so +0 -0
  233. sage/modules/vector_space_morphism.py +2 -2
  234. sage/modules/with_basis/cell_module.py +17 -0
  235. sage/modules/with_basis/indexed_element.cpython-310-darwin.so +0 -0
  236. sage/modules/with_basis/indexed_element.pyx +1 -1
  237. sage/modules/with_basis/invariant.py +1 -1
  238. sage/modules/with_basis/representation.py +0 -1
  239. sage/modules/with_basis/subquotient.py +2 -2
  240. sage/numerical/gauss_legendre.cpython-310-darwin.so +0 -0
  241. sage/probability/probability_distribution.cpython-310-darwin.so +0 -0
  242. sage/quadratic_forms/binary_qf.py +7 -7
  243. sage/quadratic_forms/bqf_class_group.py +26 -92
  244. sage/quadratic_forms/count_local_2.cpython-310-darwin.so +0 -0
  245. sage/quadratic_forms/extras.py +1 -1
  246. sage/quadratic_forms/quadratic_form.py +5 -4
  247. sage/quadratic_forms/quadratic_form__equivalence_testing.py +7 -4
  248. sage/quadratic_forms/quadratic_form__evaluate.cpython-310-darwin.so +0 -0
  249. sage/quadratic_forms/quadratic_form__local_field_invariants.py +10 -10
  250. sage/quadratic_forms/quadratic_form__ternary_Tornaria.py +2 -2
  251. sage/quadratic_forms/ternary.cpython-310-darwin.so +0 -0
  252. sage/quadratic_forms/ternary_qf.py +50 -83
  253. sage/rings/complex_conversion.cpython-310-darwin.so +0 -0
  254. sage/rings/complex_double.cpython-310-darwin.so +0 -0
  255. sage/rings/complex_double.pxd +1 -0
  256. sage/rings/complex_double.pyx +37 -32
  257. sage/rings/complex_mpc.cpython-310-darwin.so +0 -0
  258. sage/rings/complex_mpc.pyx +27 -23
  259. sage/rings/complex_mpfr.cpython-310-darwin.so +0 -0
  260. sage/rings/complex_mpfr.pyx +11 -9
  261. sage/rings/function_field/drinfeld_modules/charzero_drinfeld_module.py +277 -21
  262. sage/rings/function_field/drinfeld_modules/drinfeld_module.py +10 -1
  263. sage/rings/function_field/drinfeld_modules/finite_drinfeld_module.py +1 -1
  264. sage/rings/function_field/drinfeld_modules/homset.py +1 -2
  265. sage/rings/function_field/drinfeld_modules/morphism.py +2 -2
  266. sage/rings/function_field/hermite_form_polynomial.cpython-310-darwin.so +0 -0
  267. sage/rings/function_field/khuri_makdisi.cpython-310-darwin.so +0 -0
  268. sage/rings/function_field/khuri_makdisi.pyx +27 -25
  269. sage/rings/invariants/invariant_theory.py +61 -60
  270. sage/rings/invariants/reconstruction.py +8 -8
  271. sage/rings/polynomial/laurent_polynomial_mpair.cpython-310-darwin.so +0 -0
  272. sage/rings/polynomial/ore_function_element.py +1 -1
  273. sage/rings/polynomial/ore_polynomial_element.cpython-310-darwin.so +0 -0
  274. sage/rings/polynomial/ore_polynomial_element.pyx +8 -8
  275. sage/rings/polynomial/ore_polynomial_ring.py +134 -17
  276. sage/rings/polynomial/polynomial_real_mpfr_dense.cpython-310-darwin.so +0 -0
  277. sage/rings/polynomial/skew_polynomial_element.cpython-310-darwin.so +0 -0
  278. sage/rings/polynomial/skew_polynomial_finite_field.cpython-310-darwin.so +0 -0
  279. sage/rings/polynomial/skew_polynomial_finite_field.pyx +3 -4
  280. sage/rings/polynomial/skew_polynomial_finite_order.cpython-310-darwin.so +0 -0
  281. sage/rings/polynomial/skew_polynomial_finite_order.pyx +2 -5
  282. sage/rings/real_double_element_gsl.cpython-310-darwin.so +0 -0
  283. sage/rings/real_mpfr.cpython-310-darwin.so +0 -0
  284. sage/rings/real_mpfr.pyx +25 -7
  285. sage/rings/ring_extension.cpython-310-darwin.so +0 -0
  286. sage/rings/ring_extension.pyx +4 -2
  287. sage/rings/ring_extension_conversion.cpython-310-darwin.so +0 -0
  288. sage/rings/ring_extension_element.cpython-310-darwin.so +0 -0
  289. sage/rings/ring_extension_element.pyx +42 -0
  290. sage/rings/ring_extension_morphism.cpython-310-darwin.so +0 -0
  291. sage/schemes/projective/cohomology.py +2 -2
  292. sage/stats/basic_stats.py +9 -6
  293. sage/stats/distributions/dgs_misc.h +11 -4
  294. sage/stats/distributions/discrete_gaussian_integer.cpython-310-darwin.so +0 -0
  295. sage/stats/distributions/discrete_gaussian_integer.pyx +9 -7
  296. sage/stats/hmm/chmm.cpython-310-darwin.so +0 -0
  297. sage/stats/hmm/chmm.pyx +13 -13
  298. sage/stats/hmm/distributions.cpython-310-darwin.so +0 -0
  299. sage/stats/hmm/distributions.pxd +3 -3
  300. sage/stats/hmm/distributions.pyx +3 -3
  301. sage/stats/hmm/hmm.cpython-310-darwin.so +0 -0
  302. sage/stats/hmm/hmm.pxd +3 -3
  303. sage/stats/hmm/hmm.pyx +6 -6
  304. sage/stats/hmm/util.cpython-310-darwin.so +0 -0
  305. sage/stats/hmm/util.pyx +6 -6
  306. sage/stats/intlist.cpython-310-darwin.so +0 -0
  307. sage/stats/intlist.pxd +3 -3
  308. sage/stats/time_series.cpython-310-darwin.so +0 -0
  309. sage/tensor/modules/alternating_contr_tensor.py +3 -3
  310. sage/tensor/modules/comp.py +3 -3
  311. sage/tensor/modules/ext_pow_free_module.py +3 -3
  312. sage/tensor/modules/format_utilities.py +3 -3
  313. sage/tensor/modules/free_module_linear_group.py +3 -3
  314. sage/tensor/modules/free_module_morphism.py +0 -1
  315. sage/tensor/modules/tensor_free_module.py +3 -3
  316. sage/tensor/modules/tensor_free_submodule.py +1 -1
  317. sage/tensor/modules/tensor_free_submodule_basis.py +1 -1
  318. sage/tensor/modules/tensor_with_indices.py +5 -5
  319. {passagemath_modules-10.5.46.dist-info → passagemath_modules-10.6.20.dist-info}/WHEEL +0 -0
  320. {passagemath_modules-10.5.46.dist-info → passagemath_modules-10.6.20.dist-info}/top_level.txt +0 -0
@@ -23,6 +23,7 @@ from sage.algebras.lie_algebras.subalgebra import LieSubalgebra_finite_dimension
23
23
  from sage.categories.homset import Hom
24
24
  from sage.categories.lie_algebras import LieAlgebras
25
25
  from sage.categories.morphism import SetMorphism
26
+ from sage.structure.element import Element
26
27
  from sage.structure.indexed_generators import standardize_names_index_set
27
28
 
28
29
 
@@ -161,7 +162,7 @@ class LieQuotient_finite_dimensional_with_basis(LieAlgebraWithStructureCoefficie
161
162
  sage: L.<c,b,a> = LieAlgebra(QQ, abelian=True)
162
163
  sage: I2 = L.ideal([a+b, a+c], order=sorted)
163
164
  sage: I2.basis()
164
- Family (b + a, c + a)
165
+ Finite family {'b': b + a, 'c': c + a}
165
166
  sage: Q = L.quotient(I2)
166
167
  sage: Q.basis()
167
168
  Finite family {'a': a}
@@ -174,40 +175,44 @@ class LieQuotient_finite_dimensional_with_basis(LieAlgebraWithStructureCoefficie
174
175
  2
175
176
  sage: TestSuite(K).run()
176
177
  """
177
-
178
178
  @staticmethod
179
- def __classcall_private__(cls, I, ambient=None, names=None,
180
- index_set=None, category=None):
179
+ def __classcall_private__(cls, ambient, I, names=None, index_set=None,
180
+ index_set_mapping=None, category=None):
181
181
  r"""
182
182
  Normalize input to ensure a unique representation.
183
183
 
184
- EXAMPLES:
185
-
186
- Specifying the ambient Lie algebra is not necessary::
184
+ EXAMPLES::
187
185
 
188
186
  sage: from sage.algebras.lie_algebras.quotient import LieQuotient_finite_dimensional_with_basis
189
187
  sage: L.<X,Y> = LieAlgebra(QQ, {('X','Y'): {'X': 1}})
190
- sage: Q1 = LieQuotient_finite_dimensional_with_basis(X, ambient=L)
191
- sage: Q2 = LieQuotient_finite_dimensional_with_basis(X)
192
- sage: Q1 is Q2
193
- True
188
+ sage: Q1 = LieQuotient_finite_dimensional_with_basis(L, X)
194
189
 
195
190
  Variable names are extracted from the ambient Lie algebra by default::
196
191
 
192
+ sage: Q2 = LieQuotient_finite_dimensional_with_basis(L, X, index_set=['Y'])
193
+ sage: Q1 is Q2
194
+ True
197
195
  sage: Q3 = L.quotient(X, names=['Y'])
198
196
  sage: Q1 is Q3
199
197
  True
198
+
199
+ Check that quotients are properly constructed for ideals of
200
+ subalgebras (:issue:`40137`)::
201
+
202
+ sage: L.<a,b,c,d> = LieAlgebra(QQ, {('a','b'): {'c': 1, 'd':1}, ('a','c'): {'b':1}})
203
+ sage: A = L.ideal([b,c,d])
204
+ sage: B = L.ideal([c+d])
205
+ sage: Q = A.quotient(B); Q
206
+ Lie algebra quotient L/I of dimension 1 over Rational Field where
207
+ L: Ideal (b, c, d) of Lie algebra on 4 generators (a, b, c, d) over Rational Field
208
+ I: Ideal (b, c + d)
209
+ sage: Q.dimension() == A.dimension() - B.dimension()
210
+ True
200
211
  """
201
212
  if not isinstance(I, LieSubalgebra_finite_dimensional_with_basis):
202
- # assume I is an element or list of elements of some lie algebra
203
- if ambient is None:
204
- if not isinstance(I, (list, tuple)):
205
- ambient = I.parent()
206
- else:
207
- ambient = I[0].parent()
208
213
  I = ambient.ideal(I)
209
- if ambient is None:
210
- ambient = I.ambient()
214
+ if I.is_ideal(ambient):
215
+ I = ambient.ideal(I)
211
216
 
212
217
  if not ambient.base_ring().is_field():
213
218
  raise NotImplementedError("quotients over non-fields "
@@ -216,12 +221,16 @@ class LieQuotient_finite_dimensional_with_basis(LieAlgebraWithStructureCoefficie
216
221
  # extract an index set from a complementary basis to the ideal
217
222
  I_supp = [X.leading_support() for X in I.leading_monomials()]
218
223
  inv = ambient.basis().inverse_family()
219
- sorted_indices = [inv[X] for X in ambient.basis()]
220
- index_set = [i for i in sorted_indices if i not in I_supp]
224
+ IA = I.ambient()
225
+ B = ambient.basis()
226
+ if index_set_mapping is None:
227
+ index_set_mapping = [(IA(B[k]).leading_support(key=I._order), k) for k in B.keys()]
228
+ if index_set is None:
229
+ index_set = [i[0] for i in index_set_mapping if i[0] not in I_supp]
221
230
 
222
231
  if names is None:
223
232
  try:
224
- amb_names = dict(zip(sorted_indices, ambient.variable_names()))
233
+ amb_names = dict(zip([i[1] for i in index_set_mapping], ambient.variable_names()))
225
234
  names = [amb_names[i] for i in index_set]
226
235
  except (ValueError, KeyError):
227
236
  # ambient has not assigned variable names
@@ -234,16 +243,16 @@ class LieQuotient_finite_dimensional_with_basis(LieAlgebraWithStructureCoefficie
234
243
  names = ['%s_%d' % (names, k + 1)
235
244
  for k in range(len(index_set))]
236
245
  names, index_set = standardize_names_index_set(names, index_set)
246
+ index_set_mapping = tuple([i for i in index_set_mapping if i[0] not in I_supp])
237
247
 
238
248
  cat = LieAlgebras(ambient.base_ring()).FiniteDimensional().WithBasis()
239
249
  if ambient in LieAlgebras(ambient.base_ring()).Nilpotent():
240
250
  cat = cat.Nilpotent()
241
251
  category = cat.Subquotients().or_subcategory(category)
252
+ return super().__classcall__(cls, ambient, I, names, index_set,
253
+ index_set_mapping, category=category)
242
254
 
243
- return super().__classcall__(cls, I, ambient, names, index_set,
244
- category=category)
245
-
246
- def __init__(self, I, L, names, index_set, category=None):
255
+ def __init__(self, L, I, names, index_set, index_set_mapping, category=None):
247
256
  r"""
248
257
  Initialize ``self``.
249
258
 
@@ -257,8 +266,10 @@ class LieQuotient_finite_dimensional_with_basis(LieAlgebraWithStructureCoefficie
257
266
  sage: TestSuite(K).run()
258
267
  """
259
268
  B = L.basis()
260
- sm = L.module().submodule_with_basis([I.reduce(B[i]).to_vector()
261
- for i in index_set])
269
+ IA = I.ambient()
270
+ self._index_set_mapping = dict(index_set_mapping)
271
+ sm = L.module().submodule_with_basis([I.reduce(B[k]).to_vector()
272
+ for k in self._index_set_mapping.values()])
262
273
  SB = [L.from_vector(b) for b in sm.basis()]
263
274
 
264
275
  # compute and normalize structural coefficients for the quotient
@@ -370,7 +381,7 @@ class LieQuotient_finite_dimensional_with_basis(LieAlgebraWithStructureCoefficie
370
381
  """
371
382
  L = self.ambient()
372
383
  B = L.basis()
373
- return L.sum(ck * B[ik] for ik, ck in X)
384
+ return L.sum(ck * B[self._index_set_mapping[ik]] for ik, ck in X)
374
385
 
375
386
  def retract(self, X):
376
387
  r"""
@@ -6,9 +6,12 @@ Subalgebras and ideals of Lie algebras
6
6
  AUTHORS:
7
7
 
8
8
  - Eero Hakavuori (2018-08-29): initial version
9
+ - Travis Scrimshaw (2025-05-21): make all Lie subalgebras use elements
10
+ in the ambient Lie algebra
9
11
  """
10
12
  # ****************************************************************************
11
13
  # Copyright (C) 2018 Eero Hakavuori <eero.hakavuori@gmail.com>
14
+ # 2025 Travis Scrimshaw <tcscrims at gmail.com>
12
15
  #
13
16
  # This program is free software: you can redistribute it and/or modify
14
17
  # it under the terms of the GNU General Public License as published by
@@ -26,7 +29,7 @@ from sage.misc.lazy_attribute import lazy_attribute
26
29
  from sage.sets.family import Family
27
30
  from sage.sets.finite_enumerated_set import FiniteEnumeratedSet
28
31
  from sage.structure.parent import Parent
29
- from sage.structure.element import parent
32
+ from sage.structure.element import parent, Element
30
33
  from sage.structure.unique_representation import UniqueRepresentation
31
34
 
32
35
 
@@ -59,10 +62,10 @@ class LieSubalgebra_finite_dimensional_with_basis(Parent, UniqueRepresentation):
59
62
 
60
63
  sage: S = L.subalgebra(Y)
61
64
  sage: S.basis()
62
- Family (q1,)
65
+ Finite family {'q1': q1}
63
66
  sage: I = L.ideal(Y)
64
67
  sage: I.basis()
65
- Family (q1, z)
68
+ Finite family {'q1': q1, 'z': z}
66
69
 
67
70
  The zero dimensional subalgebra can be created by giving 0 as a generator
68
71
  or with an empty list of generators::
@@ -73,7 +76,7 @@ class LieSubalgebra_finite_dimensional_with_basis(Parent, UniqueRepresentation):
73
76
  sage: S1 is S2
74
77
  True
75
78
  sage: S1.basis()
76
- Family ()
79
+ Finite family {}
77
80
 
78
81
  Elements of the ambient Lie algebra can be reduced modulo an
79
82
  ideal or subalgebra::
@@ -94,7 +97,7 @@ class LieSubalgebra_finite_dimensional_with_basis(Parent, UniqueRepresentation):
94
97
  sage: # needs sage.symbolic
95
98
  sage: I = L.ideal(X + Y)
96
99
  sage: I.basis()
97
- Family (X + Y, Z)
100
+ Finite family {'Y': X + Y, 'Z': Z}
98
101
  sage: el = var('x')*X + var('y')*Y + var('z')*Z; el
99
102
  x*X + y*Y + z*Z
100
103
  sage: I.reduce(el)
@@ -104,7 +107,7 @@ class LieSubalgebra_finite_dimensional_with_basis(Parent, UniqueRepresentation):
104
107
 
105
108
  sage: I = L.ideal(X + Y, order=lambda s: ['Z','Y','X'].index(s)) # needs sage.symbolic
106
109
  sage: I.basis() # needs sage.symbolic
107
- Family (Z, X + Y)
110
+ Finite family {'Z': Z, 'X': X + Y}
108
111
  sage: I.reduce(el) # needs sage.symbolic
109
112
  (-x+y)*Y
110
113
 
@@ -126,20 +129,22 @@ class LieSubalgebra_finite_dimensional_with_basis(Parent, UniqueRepresentation):
126
129
  sage: J = I.ideal(Z); J
127
130
  Ideal (Z) of Ideal (Y) of Lie algebra on 4 generators (X, Y, Z, W) over Rational Field
128
131
  sage: J.basis()
129
- Family (Z,)
132
+ Finite family {'Z': Z}
130
133
  sage: J.is_ideal(L)
131
134
  False
132
135
  sage: K = L.ideal(J.basis().list())
133
136
  sage: K.basis()
134
- Family (Z, W)
137
+ Finite family {'Z': Z, 'W': W}
135
138
 
136
139
  TESTS:
137
140
 
138
141
  Test suites::
139
142
 
140
- sage: S = L.subalgebra(X + Y)
143
+ sage: sc = {('X','Y'): {'Z': 1}, ('X','Z'): {'W': 1}}
144
+ sage: L.<X,Y,Z,W> = LieAlgebra(QQ, sc)
145
+ sage: S = L.subalgebra(X + Y)
141
146
  sage: TestSuite(S).run()
142
- sage: I = L.ideal(X + Y)
147
+ sage: I = L.ideal(X + Y)
143
148
  sage: TestSuite(I).run()
144
149
 
145
150
  Verify that subalgebras and ideals of nilpotent Lie algebras are nilpotent::
@@ -167,7 +172,7 @@ class LieSubalgebra_finite_dimensional_with_basis(Parent, UniqueRepresentation):
167
172
  W
168
173
  """
169
174
  @staticmethod
170
- def __classcall_private__(cls, ambient, gens, ideal=False,
175
+ def __classcall_private__(cls, ambient, gens, ideal_of=None,
171
176
  order=None, category=None):
172
177
  """
173
178
  Normalize input to ensure a unique representation.
@@ -216,15 +221,32 @@ class LieSubalgebra_finite_dimensional_with_basis(Parent, UniqueRepresentation):
216
221
  Subalgebra generated by (a, a, b, e) of Lie algebra on
217
222
  5 generators (a, b, c, d, e) over Rational Field
218
223
  sage: S.basis()
219
- Family (a, b, e)
224
+ Finite family {'a': a, 'b': b, 'e': e}
225
+
226
+ Check that other container-like objects are handled properly
227
+ (:issue:`40137`)::
228
+
229
+ sage: L.<a,b,c,d> = LieAlgebra(QQ, {('a','b'): {'c': 1, 'd':1}})
230
+ sage: A = L.ideal([b, c, d])
231
+ sage: B = L.ideal([b, c+d])
232
+ sage: A.ideal(B)
233
+ Ideal (b, c + d) of Ideal (b, c, d) of Lie algebra on 4 generators
234
+ (a, b, c, d) over Rational Field
235
+ sage: A.ideal(B.basis())
236
+ Ideal (b, c + d) of Ideal (b, c, d) of Lie algebra on 4 generators
237
+ (a, b, c, d) over Rational Field
220
238
  """
239
+ if isinstance(ambient, LieSubalgebra_finite_dimensional_with_basis):
240
+ ambient = ambient._ambient
221
241
  if isinstance(gens, LieSubalgebra_finite_dimensional_with_basis):
222
- if not ideal or gens._is_ideal:
242
+ if gens._ideal_of is ideal_of:
223
243
  return gens
224
244
  gens = gens.lie_algebra_generators()
225
- if not isinstance(gens, (list, tuple)):
245
+ if isinstance(gens, Element):
226
246
  gens = [gens]
227
247
  new_gens = []
248
+
249
+ # make sure all elements belong to the ambient Lie algebra
228
250
  for gen in gens:
229
251
  if isinstance(gen, LieSubalgebra_finite_dimensional_with_basis):
230
252
  new_gens.extend(ambient(b) for b in gen.basis())
@@ -232,21 +254,15 @@ class LieSubalgebra_finite_dimensional_with_basis(Parent, UniqueRepresentation):
232
254
  new_gens.append(ambient(gen))
233
255
  gens = tuple(new_gens)
234
256
 
235
- if not ideal and isinstance(ambient,
236
- LieSubalgebra_finite_dimensional_with_basis):
237
- # a nested subalgebra is a subalgebra
238
- gens = tuple(ambient.lift(gen) for gen in gens)
239
- ambient = ambient.ambient()
240
-
241
257
  cat = LieAlgebras(ambient.base_ring()).FiniteDimensional().WithBasis()
242
258
  category = cat.Subobjects().or_subcategory(category)
243
259
  if ambient in LieAlgebras(ambient.base_ring()).Nilpotent():
244
260
  category = category.Nilpotent()
245
261
 
246
- return super().__classcall__(cls, ambient, gens, ideal,
262
+ return super().__classcall__(cls, ambient, gens, ideal_of,
247
263
  order, category)
248
264
 
249
- def __init__(self, ambient, gens, ideal, order=None, category=None):
265
+ def __init__(self, ambient, gens, ideal_of, order=None, category=None):
250
266
  r"""
251
267
  Initialize ``self``.
252
268
 
@@ -264,7 +280,7 @@ class LieSubalgebra_finite_dimensional_with_basis(Parent, UniqueRepresentation):
264
280
  True
265
281
  """
266
282
  self._ambient = ambient
267
- self._is_ideal = ideal
283
+ self._ideal_of = ideal_of
268
284
 
269
285
  # initialize helper variables for ordering
270
286
  if order is None:
@@ -352,16 +368,10 @@ class LieSubalgebra_finite_dimensional_with_basis(Parent, UniqueRepresentation):
352
368
  sage: L.ideal([X, Y])
353
369
  Ideal (X, Y) of Abelian Lie algebra on 2 generators (X, Y) over Rational Field
354
370
  """
355
- gens = self.gens()
356
- if len(gens) == 1:
357
- gens = gens[0]
358
-
359
- if self._is_ideal:
360
- basestr = "Ideal"
361
- else:
362
- basestr = "Subalgebra generated by"
371
+ if self._ideal_of is not None:
372
+ return "Ideal {} of {}".format(self._repr_short(), self._ideal_of)
363
373
 
364
- return "%s %s of %s" % (basestr, self._repr_short(), self.ambient())
374
+ return "Subalgebra generated by {} of {}".format(self._repr_short(), self.ambient())
365
375
 
366
376
  def _repr_short(self):
367
377
  """
@@ -390,7 +400,7 @@ class LieSubalgebra_finite_dimensional_with_basis(Parent, UniqueRepresentation):
390
400
  sage: S._an_element_()
391
401
  X
392
402
  """
393
- return self.lie_algebra_generators()[0]
403
+ return next(iter(self.lie_algebra_generators()))
394
404
 
395
405
  def _element_constructor_(self, x):
396
406
  """
@@ -538,7 +548,7 @@ class LieSubalgebra_finite_dimensional_with_basis(Parent, UniqueRepresentation):
538
548
  sage: L.<x,y,z> = LieAlgebra(QQ, abelian=True)
539
549
  sage: S = L.subalgebra([x, y])
540
550
  sage: S._indices
541
- {0, 1}
551
+ {'x', 'y'}
542
552
  sage: [S.basis()[k] for k in S._indices]
543
553
  [x, y]
544
554
  """
@@ -551,11 +561,11 @@ class LieSubalgebra_finite_dimensional_with_basis(Parent, UniqueRepresentation):
551
561
  EXAMPLES::
552
562
 
553
563
  sage: L.<x,y,z> = LieAlgebra(QQ, abelian=True)
554
- sage: S = L.subalgebra([x, y])
564
+ sage: S = L.subalgebra([x+y, z])
555
565
  sage: S.indices()
556
- {0, 1}
566
+ {'y', 'z'}
557
567
  sage: [S.basis()[k] for k in S.indices()]
558
- [x, y]
568
+ [x + y, z]
559
569
  """
560
570
  return self._indices
561
571
 
@@ -643,12 +653,13 @@ class LieSubalgebra_finite_dimensional_with_basis(Parent, UniqueRepresentation):
643
653
  by (X_1, X_2) of Free Nilpotent Lie algebra on 6 generators
644
654
  (X_1, X_2, X_3, X_12, X_13, X_23) over Rational Field
645
655
  """
656
+ X = self._ambient(X)
646
657
  if X not in self:
647
658
  raise ValueError("the element %s is not in %s" % (X, self))
648
659
 
649
660
  return self.element_class(self, X)
650
661
 
651
- def gens(self):
662
+ def gens(self) -> tuple:
652
663
  r"""
653
664
  Return the generating set of ``self``.
654
665
 
@@ -678,9 +689,9 @@ class LieSubalgebra_finite_dimensional_with_basis(Parent, UniqueRepresentation):
678
689
 
679
690
  sage: I = L.ideal(x)
680
691
  sage: I.lie_algebra_generators()
681
- Family (x, z)
692
+ Finite family {'x': x, 'z': z}
682
693
  """
683
- if self._is_ideal:
694
+ if self._ideal_of is not None:
684
695
  return self.basis()
685
696
  return self._gens
686
697
 
@@ -696,14 +707,14 @@ class LieSubalgebra_finite_dimensional_with_basis(Parent, UniqueRepresentation):
696
707
  sage: sc = {('a','b'): {'c': 1}, ('a','c'): {'d': 1}}
697
708
  sage: L.<a,b,c,d> = LieAlgebra(QQ, sc)
698
709
  sage: L.subalgebra([a + b, c + d]).basis()
699
- Family (a + b, c, d)
710
+ Finite family {'b': a + b, 'c': c, 'd': d}
700
711
 
701
712
  A basis of an ideal::
702
713
 
703
714
  sage: sc = {('x','y'): {'z': 1}, ('x','z'): {'w': 1}}
704
715
  sage: L.<x,y,z,w> = LieAlgebra(QQ, sc)
705
716
  sage: L.ideal([x + y + z + w]).basis()
706
- Family (x + y, z, w)
717
+ Finite family {'y': x + y, 'z': z, 'w': w}
707
718
 
708
719
  This also works for Lie algebras whose natural basis elements
709
720
  are not comparable (but have a well-defined basis ordering)::
@@ -718,27 +729,36 @@ class LieSubalgebra_finite_dimensional_with_basis(Parent, UniqueRepresentation):
718
729
  sage: sl3.subalgebra(e).dimension()
719
730
  3
720
731
  """
721
- L = self.ambient()
722
- B = [self._to_m(X) for X in L.basis()]
732
+ ambient = self._ambient
733
+ if self._ideal_of is not None:
734
+ L = self._ideal_of
735
+ B = [self._to_m(ambient(X)) for X in L.basis()]
736
+ else:
737
+ L = ambient
738
+ B = [self._to_m(X) for X in ambient.basis()]
723
739
 
724
- m = L.module()
740
+ m = ambient.module()
725
741
  sm = m.submodule([self._to_m(X.value) for X in self.gens()])
726
742
  d = 0
727
743
 
728
744
  while sm.dimension() > d:
729
745
  d = sm.dimension()
730
746
  SB = sm.basis()
731
- if not self._is_ideal:
747
+ if self._ideal_of is None:
732
748
  B = SB
733
749
 
734
- brackets = [self._to_m(L.bracket(self._from_m(v), self._from_m(w)))
750
+ brackets = [self._to_m(ambient.bracket(self._from_m(v), self._from_m(w)))
735
751
  for v in B for w in SB]
736
752
  sm = m.submodule(sm.basis() + brackets)
737
753
 
738
754
  basis = [self.element_class(self, self._from_m(v))
739
755
  for v in sm.echelonized_basis()]
740
- sortkey = lambda X: self._order(self.lift(X).leading_support(key=self._order))
741
- return Family(sorted(basis, key=sortkey))
756
+
757
+ indices = [self.lift(X).leading_support(key=self._order) for X in basis]
758
+ basis = dict(zip(indices, basis))
759
+ indices.sort(key=self._order)
760
+
761
+ return Family(indices, basis.__getitem__)
742
762
 
743
763
  @cached_method
744
764
  def leading_monomials(self):
@@ -753,7 +773,7 @@ class LieSubalgebra_finite_dimensional_with_basis(Parent, UniqueRepresentation):
753
773
  sage: L.<a,b,c,d> = LieAlgebra(ZZ, sc)
754
774
  sage: I = L.ideal(a + b)
755
775
  sage: I.basis()
756
- Family (a + b, 2*c, 4*d)
776
+ Finite family {'b': a + b, 'c': 2*c, 'd': 4*d}
757
777
  sage: I.leading_monomials()
758
778
  Family (b, c, d)
759
779
 
@@ -762,7 +782,7 @@ class LieSubalgebra_finite_dimensional_with_basis(Parent, UniqueRepresentation):
762
782
  sage: key = lambda s: ['d','c','b','a'].index(s)
763
783
  sage: I = L.ideal(a + b, order=key)
764
784
  sage: I.basis()
765
- Family (4*d, 2*c, a + b)
785
+ Finite family {'d': 4*d, 'c': 2*c, 'a': a + b}
766
786
  sage: I.leading_monomials()
767
787
  Family (d, c, a)
768
788
  """
@@ -885,7 +905,7 @@ class LieSubalgebra_finite_dimensional_with_basis(Parent, UniqueRepresentation):
885
905
  sage: L.is_ideal(I)
886
906
  False
887
907
  """
888
- if A == self._ambient and self._is_ideal:
908
+ if A is self._ideal_of:
889
909
  return True
890
910
  return super().is_ideal(A)
891
911
 
@@ -900,7 +920,10 @@ class LieSubalgebra_finite_dimensional_with_basis(Parent, UniqueRepresentation):
900
920
  sage: m = MS([[0, -1], [1, 0]])
901
921
  sage: L = LieAlgebra(associative=MS)
902
922
  sage: S = L.subalgebra([m])
903
- sage: x = S.basis()[0]
923
+ sage: S.basis()
924
+ Finite family {(1, 0): [ 0 -1]
925
+ [ 1 0]}
926
+ sage: x = S.basis()[1,0]
904
927
  sage: x.parent() is S
905
928
  True
906
929
  sage: x.adjoint_matrix()
@@ -30,11 +30,9 @@ from sage.categories.morphism import Morphism
30
30
  from sage.categories.homset import Hom, Homset
31
31
  from sage.monoids.indexed_free_monoid import IndexedFreeAbelianMonoid
32
32
  from sage.combinat.free_module import CombinatorialFreeModule
33
- from sage.modules.free_module_element import vector
34
33
  from sage.sets.family import Family
35
34
  from sage.structure.richcmp import richcmp
36
35
  from sage.rings.integer_ring import ZZ
37
- from sage.rings.rational_field import QQ
38
36
 
39
37
 
40
38
  class ModulePrinting:
@@ -358,7 +356,7 @@ class VermaModule(ModulePrinting, CombinatorialFreeModule):
358
356
  return self._from_dict({self._indices.one(): one},
359
357
  remove_zeros=False, coerce=False)
360
358
 
361
- def gens(self):
359
+ def gens(self) -> tuple:
362
360
  r"""
363
361
  Return the generators of ``self`` as a `U(\mathfrak{g})`-module.
364
362
 
@@ -956,7 +956,7 @@ class OctonionAlgebra(UniqueRepresentation, Parent):
956
956
  return 0
957
957
 
958
958
  @cached_method
959
- def gens(self):
959
+ def gens(self) -> tuple:
960
960
  r"""
961
961
  Return the generators of ``self``.
962
962
 
@@ -193,7 +193,7 @@ class OrlikSolomonAlgebra(CombinatorialFreeModule):
193
193
 
194
194
  sage: M = matroids.Wheel(3)
195
195
  sage: OS = M.orlik_solomon_algebra(QQ)
196
- sage: OS.one_basis() == frozenset([])
196
+ sage: OS.one_basis() == frozenset()
197
197
  True
198
198
  """
199
199
  return frozenset({})
@@ -348,7 +348,7 @@ class OrlikSolomonAlgebra(CombinatorialFreeModule):
348
348
  [[(1, 2), (1, 4), (2, 3), (3, 4)],
349
349
  [(3, 5), (3, 6), (5, 6)]]
350
350
  sage: OSMG = MG.orlik_solomon_algebra(QQ, ordering=s)
351
- sage: OSMG.subset_image(frozenset([]))
351
+ sage: OSMG.subset_image(frozenset())
352
352
  OS{}
353
353
  sage: OSMG.subset_image(frozenset([(1,2),(3,4),(1,4),(2,3)]))
354
354
  0
@@ -376,7 +376,7 @@ class OrlikSolomonAlgebra(CombinatorialFreeModule):
376
376
  [0, 3, 5], [1, 2, 4], [1, 2, 5], [1, 3, 4],
377
377
  [1, 3, 5], [2, 3], [4, 5]]
378
378
  sage: OSMG = MG.orlik_solomon_algebra(QQ)
379
- sage: OSMG.subset_image(frozenset([]))
379
+ sage: OSMG.subset_image(frozenset())
380
380
  OS{}
381
381
  sage: OSMG.subset_image(frozenset([1, 2, 3]))
382
382
  0
@@ -395,7 +395,7 @@ class OrlikSolomonAlgebra(CombinatorialFreeModule):
395
395
  sage: sorted([sorted(c) for c in MG.circuits()])
396
396
  [[0, 1], [2, 3, 4]]
397
397
  sage: OSMG = MG.orlik_solomon_algebra(QQ)
398
- sage: OSMG.subset_image(frozenset([]))
398
+ sage: OSMG.subset_image(frozenset())
399
399
  OS{}
400
400
  sage: OSMG.subset_image(frozenset([1, 3, 4]))
401
401
  -OS{0, 2, 3} + OS{0, 2, 4}
@@ -243,7 +243,7 @@ class OrlikTeraoAlgebra(CombinatorialFreeModule):
243
243
 
244
244
  sage: M = matroids.Wheel(3)
245
245
  sage: OT = M.orlik_terao_algebra(QQ)
246
- sage: OT.one_basis() == frozenset([])
246
+ sage: OT.one_basis() == frozenset()
247
247
  True
248
248
  """
249
249
  return frozenset({})
@@ -392,7 +392,7 @@ class OrlikTeraoAlgebra(CombinatorialFreeModule):
392
392
  [[(1, 2), (1, 4), (2, 3), (3, 4)],
393
393
  [(3, 5), (3, 6), (5, 6)]]
394
394
  sage: OT = M.orlik_terao_algebra(QQ, ordering=s)
395
- sage: OT.subset_image(frozenset([]))
395
+ sage: OT.subset_image(frozenset())
396
396
  OT{}
397
397
  sage: OT.subset_image(frozenset([(1,2),(3,4),(1,4),(2,3)]))
398
398
  0
@@ -420,7 +420,7 @@ class OrlikTeraoAlgebra(CombinatorialFreeModule):
420
420
  [0, 3, 5], [1, 2, 4], [1, 2, 5], [1, 3, 4],
421
421
  [1, 3, 5], [2, 3], [4, 5]]
422
422
  sage: OT = M.orlik_terao_algebra()
423
- sage: OT.subset_image(frozenset([]))
423
+ sage: OT.subset_image(frozenset())
424
424
  OT{}
425
425
  sage: OT.subset_image(frozenset([1, 2, 3]))
426
426
  0
@@ -439,7 +439,7 @@ class OrlikTeraoAlgebra(CombinatorialFreeModule):
439
439
  sage: sorted([sorted(c) for c in M.circuits()])
440
440
  [[0, 1], [2, 3, 4]]
441
441
  sage: OT = M.orlik_terao_algebra(QQ)
442
- sage: OT.subset_image(frozenset([]))
442
+ sage: OT.subset_image(frozenset())
443
443
  OT{}
444
444
  sage: OT.subset_image(frozenset([1, 3, 4]))
445
445
  -OT{0, 2, 3} + OT{0, 2, 4}