passagemath-categories 10.6.32__cp314-cp314t-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.
Files changed (719) hide show
  1. passagemath_categories-10.6.32.dist-info/METADATA +156 -0
  2. passagemath_categories-10.6.32.dist-info/RECORD +719 -0
  3. passagemath_categories-10.6.32.dist-info/WHEEL +5 -0
  4. passagemath_categories-10.6.32.dist-info/top_level.txt +2 -0
  5. passagemath_categories.libs/libgcc_s-2d945d6c.so.1 +0 -0
  6. passagemath_categories.libs/libgmp-28992bcb.so.10.5.0 +0 -0
  7. passagemath_categories.libs/libstdc++-85f2cd6d.so.6.0.33 +0 -0
  8. sage/all__sagemath_categories.py +28 -0
  9. sage/arith/all.py +38 -0
  10. sage/arith/constants.pxd +27 -0
  11. sage/arith/functions.cpython-314t-aarch64-linux-musl.so +0 -0
  12. sage/arith/functions.pxd +4 -0
  13. sage/arith/functions.pyx +221 -0
  14. sage/arith/misc.py +6552 -0
  15. sage/arith/multi_modular.cpython-314t-aarch64-linux-musl.so +0 -0
  16. sage/arith/multi_modular.pxd +39 -0
  17. sage/arith/multi_modular.pyx +994 -0
  18. sage/arith/rational_reconstruction.cpython-314t-aarch64-linux-musl.so +0 -0
  19. sage/arith/rational_reconstruction.pxd +4 -0
  20. sage/arith/rational_reconstruction.pyx +115 -0
  21. sage/arith/srange.cpython-314t-aarch64-linux-musl.so +0 -0
  22. sage/arith/srange.pyx +571 -0
  23. sage/calculus/all__sagemath_categories.py +2 -0
  24. sage/calculus/functional.py +481 -0
  25. sage/calculus/functions.py +151 -0
  26. sage/categories/additive_groups.py +73 -0
  27. sage/categories/additive_magmas.py +1044 -0
  28. sage/categories/additive_monoids.py +114 -0
  29. sage/categories/additive_semigroups.py +184 -0
  30. sage/categories/affine_weyl_groups.py +238 -0
  31. sage/categories/algebra_ideals.py +95 -0
  32. sage/categories/algebra_modules.py +96 -0
  33. sage/categories/algebras.py +349 -0
  34. sage/categories/algebras_with_basis.py +377 -0
  35. sage/categories/all.py +160 -0
  36. sage/categories/aperiodic_semigroups.py +29 -0
  37. sage/categories/associative_algebras.py +47 -0
  38. sage/categories/bialgebras.py +101 -0
  39. sage/categories/bialgebras_with_basis.py +414 -0
  40. sage/categories/bimodules.py +206 -0
  41. sage/categories/chain_complexes.py +268 -0
  42. sage/categories/classical_crystals.py +480 -0
  43. sage/categories/coalgebras.py +405 -0
  44. sage/categories/coalgebras_with_basis.py +232 -0
  45. sage/categories/coercion_methods.cpython-314t-aarch64-linux-musl.so +0 -0
  46. sage/categories/coercion_methods.pyx +52 -0
  47. sage/categories/commutative_additive_groups.py +104 -0
  48. sage/categories/commutative_additive_monoids.py +45 -0
  49. sage/categories/commutative_additive_semigroups.py +48 -0
  50. sage/categories/commutative_algebra_ideals.py +87 -0
  51. sage/categories/commutative_algebras.py +94 -0
  52. sage/categories/commutative_ring_ideals.py +58 -0
  53. sage/categories/commutative_rings.py +736 -0
  54. sage/categories/complete_discrete_valuation.py +293 -0
  55. sage/categories/complex_reflection_groups.py +145 -0
  56. sage/categories/complex_reflection_or_generalized_coxeter_groups.py +1249 -0
  57. sage/categories/coxeter_group_algebras.py +186 -0
  58. sage/categories/coxeter_groups.py +3402 -0
  59. sage/categories/crystals.py +2628 -0
  60. sage/categories/cw_complexes.py +216 -0
  61. sage/categories/dedekind_domains.py +137 -0
  62. sage/categories/discrete_valuation.py +325 -0
  63. sage/categories/distributive_magmas_and_additive_magmas.py +100 -0
  64. sage/categories/division_rings.py +114 -0
  65. sage/categories/domains.py +95 -0
  66. sage/categories/drinfeld_modules.py +789 -0
  67. sage/categories/dual.py +42 -0
  68. sage/categories/enumerated_sets.py +1146 -0
  69. sage/categories/euclidean_domains.py +271 -0
  70. sage/categories/examples/algebras_with_basis.py +102 -0
  71. sage/categories/examples/all.py +1 -0
  72. sage/categories/examples/commutative_additive_monoids.py +130 -0
  73. sage/categories/examples/commutative_additive_semigroups.py +199 -0
  74. sage/categories/examples/coxeter_groups.py +8 -0
  75. sage/categories/examples/crystals.py +236 -0
  76. sage/categories/examples/cw_complexes.py +163 -0
  77. sage/categories/examples/facade_sets.py +187 -0
  78. sage/categories/examples/filtered_algebras_with_basis.py +204 -0
  79. sage/categories/examples/filtered_modules_with_basis.py +154 -0
  80. sage/categories/examples/finite_coxeter_groups.py +252 -0
  81. sage/categories/examples/finite_dimensional_algebras_with_basis.py +148 -0
  82. sage/categories/examples/finite_dimensional_lie_algebras_with_basis.py +495 -0
  83. sage/categories/examples/finite_enumerated_sets.py +208 -0
  84. sage/categories/examples/finite_monoids.py +150 -0
  85. sage/categories/examples/finite_semigroups.py +190 -0
  86. sage/categories/examples/finite_weyl_groups.py +191 -0
  87. sage/categories/examples/graded_connected_hopf_algebras_with_basis.py +152 -0
  88. sage/categories/examples/graded_modules_with_basis.py +168 -0
  89. sage/categories/examples/graphs.py +122 -0
  90. sage/categories/examples/hopf_algebras_with_basis.py +145 -0
  91. sage/categories/examples/infinite_enumerated_sets.py +190 -0
  92. sage/categories/examples/lie_algebras.py +352 -0
  93. sage/categories/examples/lie_algebras_with_basis.py +196 -0
  94. sage/categories/examples/magmas.py +162 -0
  95. sage/categories/examples/manifolds.py +94 -0
  96. sage/categories/examples/monoids.py +144 -0
  97. sage/categories/examples/posets.py +178 -0
  98. sage/categories/examples/semigroups.py +580 -0
  99. sage/categories/examples/semigroups_cython.cpython-314t-aarch64-linux-musl.so +0 -0
  100. sage/categories/examples/semigroups_cython.pyx +221 -0
  101. sage/categories/examples/semirings.py +249 -0
  102. sage/categories/examples/sets_cat.py +706 -0
  103. sage/categories/examples/sets_with_grading.py +101 -0
  104. sage/categories/examples/with_realizations.py +542 -0
  105. sage/categories/fields.py +991 -0
  106. sage/categories/filtered_algebras.py +63 -0
  107. sage/categories/filtered_algebras_with_basis.py +548 -0
  108. sage/categories/filtered_hopf_algebras_with_basis.py +138 -0
  109. sage/categories/filtered_modules.py +210 -0
  110. sage/categories/filtered_modules_with_basis.py +1209 -0
  111. sage/categories/finite_complex_reflection_groups.py +1506 -0
  112. sage/categories/finite_coxeter_groups.py +1138 -0
  113. sage/categories/finite_crystals.py +103 -0
  114. sage/categories/finite_dimensional_algebras_with_basis.py +1860 -0
  115. sage/categories/finite_dimensional_bialgebras_with_basis.py +33 -0
  116. sage/categories/finite_dimensional_coalgebras_with_basis.py +33 -0
  117. sage/categories/finite_dimensional_graded_lie_algebras_with_basis.py +231 -0
  118. sage/categories/finite_dimensional_hopf_algebras_with_basis.py +38 -0
  119. sage/categories/finite_dimensional_lie_algebras_with_basis.py +2774 -0
  120. sage/categories/finite_dimensional_modules_with_basis.py +1407 -0
  121. sage/categories/finite_dimensional_nilpotent_lie_algebras_with_basis.py +167 -0
  122. sage/categories/finite_dimensional_semisimple_algebras_with_basis.py +270 -0
  123. sage/categories/finite_enumerated_sets.py +769 -0
  124. sage/categories/finite_fields.py +252 -0
  125. sage/categories/finite_groups.py +256 -0
  126. sage/categories/finite_lattice_posets.py +242 -0
  127. sage/categories/finite_monoids.py +316 -0
  128. sage/categories/finite_permutation_groups.py +339 -0
  129. sage/categories/finite_posets.py +1994 -0
  130. sage/categories/finite_semigroups.py +136 -0
  131. sage/categories/finite_sets.py +93 -0
  132. sage/categories/finite_weyl_groups.py +39 -0
  133. sage/categories/finitely_generated_lambda_bracket_algebras.py +112 -0
  134. sage/categories/finitely_generated_lie_conformal_algebras.py +114 -0
  135. sage/categories/finitely_generated_magmas.py +57 -0
  136. sage/categories/finitely_generated_semigroups.py +214 -0
  137. sage/categories/function_fields.py +76 -0
  138. sage/categories/g_sets.py +77 -0
  139. sage/categories/gcd_domains.py +65 -0
  140. sage/categories/generalized_coxeter_groups.py +94 -0
  141. sage/categories/graded_algebras.py +85 -0
  142. sage/categories/graded_algebras_with_basis.py +258 -0
  143. sage/categories/graded_bialgebras.py +32 -0
  144. sage/categories/graded_bialgebras_with_basis.py +32 -0
  145. sage/categories/graded_coalgebras.py +65 -0
  146. sage/categories/graded_coalgebras_with_basis.py +51 -0
  147. sage/categories/graded_hopf_algebras.py +41 -0
  148. sage/categories/graded_hopf_algebras_with_basis.py +169 -0
  149. sage/categories/graded_lie_algebras.py +91 -0
  150. sage/categories/graded_lie_algebras_with_basis.py +44 -0
  151. sage/categories/graded_lie_conformal_algebras.py +74 -0
  152. sage/categories/graded_modules.py +133 -0
  153. sage/categories/graded_modules_with_basis.py +329 -0
  154. sage/categories/graphs.py +138 -0
  155. sage/categories/group_algebras.py +430 -0
  156. sage/categories/groupoid.py +94 -0
  157. sage/categories/groups.py +667 -0
  158. sage/categories/h_trivial_semigroups.py +64 -0
  159. sage/categories/hecke_modules.py +185 -0
  160. sage/categories/highest_weight_crystals.py +980 -0
  161. sage/categories/hopf_algebras.py +219 -0
  162. sage/categories/hopf_algebras_with_basis.py +309 -0
  163. sage/categories/infinite_enumerated_sets.py +115 -0
  164. sage/categories/integral_domains.py +203 -0
  165. sage/categories/j_trivial_semigroups.py +29 -0
  166. sage/categories/kac_moody_algebras.py +82 -0
  167. sage/categories/kahler_algebras.py +203 -0
  168. sage/categories/l_trivial_semigroups.py +63 -0
  169. sage/categories/lambda_bracket_algebras.py +280 -0
  170. sage/categories/lambda_bracket_algebras_with_basis.py +107 -0
  171. sage/categories/lattice_posets.py +89 -0
  172. sage/categories/left_modules.py +49 -0
  173. sage/categories/lie_algebras.py +1070 -0
  174. sage/categories/lie_algebras_with_basis.py +261 -0
  175. sage/categories/lie_conformal_algebras.py +350 -0
  176. sage/categories/lie_conformal_algebras_with_basis.py +147 -0
  177. sage/categories/lie_groups.py +73 -0
  178. sage/categories/loop_crystals.py +1290 -0
  179. sage/categories/magmas.py +1189 -0
  180. sage/categories/magmas_and_additive_magmas.py +149 -0
  181. sage/categories/magmatic_algebras.py +365 -0
  182. sage/categories/manifolds.py +352 -0
  183. sage/categories/matrix_algebras.py +40 -0
  184. sage/categories/metric_spaces.py +387 -0
  185. sage/categories/modular_abelian_varieties.py +78 -0
  186. sage/categories/modules.py +989 -0
  187. sage/categories/modules_with_basis.py +2794 -0
  188. sage/categories/monoid_algebras.py +38 -0
  189. sage/categories/monoids.py +739 -0
  190. sage/categories/noetherian_rings.py +87 -0
  191. sage/categories/number_fields.py +242 -0
  192. sage/categories/ore_modules.py +189 -0
  193. sage/categories/partially_ordered_monoids.py +49 -0
  194. sage/categories/permutation_groups.py +63 -0
  195. sage/categories/pointed_sets.py +42 -0
  196. sage/categories/polyhedra.py +74 -0
  197. sage/categories/poor_man_map.py +270 -0
  198. sage/categories/posets.py +722 -0
  199. sage/categories/principal_ideal_domains.py +270 -0
  200. sage/categories/quantum_group_representations.py +543 -0
  201. sage/categories/quotient_fields.py +728 -0
  202. sage/categories/r_trivial_semigroups.py +45 -0
  203. sage/categories/regular_crystals.py +898 -0
  204. sage/categories/regular_supercrystals.py +170 -0
  205. sage/categories/right_modules.py +49 -0
  206. sage/categories/ring_ideals.py +74 -0
  207. sage/categories/rings.py +1904 -0
  208. sage/categories/rngs.py +175 -0
  209. sage/categories/schemes.py +393 -0
  210. sage/categories/semigroups.py +1060 -0
  211. sage/categories/semirings.py +71 -0
  212. sage/categories/semisimple_algebras.py +114 -0
  213. sage/categories/sets_with_grading.py +235 -0
  214. sage/categories/shephard_groups.py +43 -0
  215. sage/categories/signed_tensor.py +120 -0
  216. sage/categories/simplicial_complexes.py +134 -0
  217. sage/categories/simplicial_sets.py +1206 -0
  218. sage/categories/super_algebras.py +149 -0
  219. sage/categories/super_algebras_with_basis.py +144 -0
  220. sage/categories/super_hopf_algebras_with_basis.py +126 -0
  221. sage/categories/super_lie_conformal_algebras.py +193 -0
  222. sage/categories/super_modules.py +229 -0
  223. sage/categories/super_modules_with_basis.py +193 -0
  224. sage/categories/supercommutative_algebras.py +99 -0
  225. sage/categories/supercrystals.py +406 -0
  226. sage/categories/tensor.py +110 -0
  227. sage/categories/topological_spaces.py +170 -0
  228. sage/categories/triangular_kac_moody_algebras.py +439 -0
  229. sage/categories/tutorial.py +58 -0
  230. sage/categories/unique_factorization_domains.py +318 -0
  231. sage/categories/unital_algebras.py +426 -0
  232. sage/categories/vector_bundles.py +159 -0
  233. sage/categories/vector_spaces.py +357 -0
  234. sage/categories/weyl_groups.py +853 -0
  235. sage/combinat/all__sagemath_categories.py +34 -0
  236. sage/combinat/backtrack.py +180 -0
  237. sage/combinat/combinat.py +2269 -0
  238. sage/combinat/combinat_cython.cpython-314t-aarch64-linux-musl.so +0 -0
  239. sage/combinat/combinat_cython.pxd +6 -0
  240. sage/combinat/combinat_cython.pyx +390 -0
  241. sage/combinat/combination.py +796 -0
  242. sage/combinat/combinatorial_map.py +416 -0
  243. sage/combinat/composition.py +2192 -0
  244. sage/combinat/dlx.py +510 -0
  245. sage/combinat/integer_lists/__init__.py +7 -0
  246. sage/combinat/integer_lists/base.cpython-314t-aarch64-linux-musl.so +0 -0
  247. sage/combinat/integer_lists/base.pxd +16 -0
  248. sage/combinat/integer_lists/base.pyx +713 -0
  249. sage/combinat/integer_lists/invlex.cpython-314t-aarch64-linux-musl.so +0 -0
  250. sage/combinat/integer_lists/invlex.pxd +4 -0
  251. sage/combinat/integer_lists/invlex.pyx +1650 -0
  252. sage/combinat/integer_lists/lists.py +328 -0
  253. sage/combinat/integer_lists/nn.py +48 -0
  254. sage/combinat/integer_vector.py +1818 -0
  255. sage/combinat/integer_vector_weighted.py +413 -0
  256. sage/combinat/matrices/all__sagemath_categories.py +5 -0
  257. sage/combinat/matrices/dancing_links.cpython-314t-aarch64-linux-musl.so +0 -0
  258. sage/combinat/matrices/dancing_links.pyx +1159 -0
  259. sage/combinat/matrices/dancing_links_c.h +380 -0
  260. sage/combinat/matrices/dlxcpp.py +136 -0
  261. sage/combinat/partition.py +10070 -0
  262. sage/combinat/partitions.cpython-314t-aarch64-linux-musl.so +0 -0
  263. sage/combinat/partitions.pyx +743 -0
  264. sage/combinat/permutation.py +10168 -0
  265. sage/combinat/permutation_cython.cpython-314t-aarch64-linux-musl.so +0 -0
  266. sage/combinat/permutation_cython.pxd +11 -0
  267. sage/combinat/permutation_cython.pyx +407 -0
  268. sage/combinat/q_analogues.py +1090 -0
  269. sage/combinat/ranker.py +268 -0
  270. sage/combinat/subset.py +1561 -0
  271. sage/combinat/subsets_hereditary.py +202 -0
  272. sage/combinat/subsets_pairwise.py +184 -0
  273. sage/combinat/tools.py +63 -0
  274. sage/combinat/tuple.py +348 -0
  275. sage/data_structures/all.py +2 -0
  276. sage/data_structures/all__sagemath_categories.py +2 -0
  277. sage/data_structures/binary_matrix.pxd +138 -0
  278. sage/data_structures/binary_search.cpython-314t-aarch64-linux-musl.so +0 -0
  279. sage/data_structures/binary_search.pxd +3 -0
  280. sage/data_structures/binary_search.pyx +66 -0
  281. sage/data_structures/bitset.cpython-314t-aarch64-linux-musl.so +0 -0
  282. sage/data_structures/bitset.pxd +40 -0
  283. sage/data_structures/bitset.pyx +2385 -0
  284. sage/data_structures/bitset_base.cpython-314t-aarch64-linux-musl.so +0 -0
  285. sage/data_structures/bitset_base.pxd +926 -0
  286. sage/data_structures/bitset_base.pyx +117 -0
  287. sage/data_structures/bitset_intrinsics.h +487 -0
  288. sage/data_structures/blas_dict.cpython-314t-aarch64-linux-musl.so +0 -0
  289. sage/data_structures/blas_dict.pxd +12 -0
  290. sage/data_structures/blas_dict.pyx +469 -0
  291. sage/data_structures/list_of_pairs.cpython-314t-aarch64-linux-musl.so +0 -0
  292. sage/data_structures/list_of_pairs.pxd +16 -0
  293. sage/data_structures/list_of_pairs.pyx +122 -0
  294. sage/data_structures/mutable_poset.py +3312 -0
  295. sage/data_structures/pairing_heap.cpython-314t-aarch64-linux-musl.so +0 -0
  296. sage/data_structures/pairing_heap.h +346 -0
  297. sage/data_structures/pairing_heap.pxd +88 -0
  298. sage/data_structures/pairing_heap.pyx +1464 -0
  299. sage/data_structures/sparse_bitset.pxd +62 -0
  300. sage/data_structures/stream.py +5070 -0
  301. sage/databases/all__sagemath_categories.py +7 -0
  302. sage/databases/sql_db.py +2236 -0
  303. sage/ext/all__sagemath_categories.py +3 -0
  304. sage/ext/fast_callable.cpython-314t-aarch64-linux-musl.so +0 -0
  305. sage/ext/fast_callable.pxd +4 -0
  306. sage/ext/fast_callable.pyx +2746 -0
  307. sage/ext/fast_eval.cpython-314t-aarch64-linux-musl.so +0 -0
  308. sage/ext/fast_eval.pxd +1 -0
  309. sage/ext/fast_eval.pyx +102 -0
  310. sage/ext/interpreters/__init__.py +1 -0
  311. sage/ext/interpreters/all__sagemath_categories.py +2 -0
  312. sage/ext/interpreters/wrapper_el.cpython-314t-aarch64-linux-musl.so +0 -0
  313. sage/ext/interpreters/wrapper_el.pxd +18 -0
  314. sage/ext/interpreters/wrapper_el.pyx +148 -0
  315. sage/ext/interpreters/wrapper_py.cpython-314t-aarch64-linux-musl.so +0 -0
  316. sage/ext/interpreters/wrapper_py.pxd +17 -0
  317. sage/ext/interpreters/wrapper_py.pyx +133 -0
  318. sage/functions/airy.py +937 -0
  319. sage/functions/all.py +97 -0
  320. sage/functions/bessel.py +2102 -0
  321. sage/functions/error.py +784 -0
  322. sage/functions/exp_integral.py +1529 -0
  323. sage/functions/gamma.py +1087 -0
  324. sage/functions/generalized.py +672 -0
  325. sage/functions/hyperbolic.py +747 -0
  326. sage/functions/hypergeometric.py +1156 -0
  327. sage/functions/jacobi.py +1705 -0
  328. sage/functions/log.py +1402 -0
  329. sage/functions/min_max.py +338 -0
  330. sage/functions/orthogonal_polys.py +3106 -0
  331. sage/functions/other.py +2303 -0
  332. sage/functions/piecewise.py +1505 -0
  333. sage/functions/prime_pi.cpython-314t-aarch64-linux-musl.so +0 -0
  334. sage/functions/prime_pi.pyx +262 -0
  335. sage/functions/special.py +1212 -0
  336. sage/functions/spike_function.py +278 -0
  337. sage/functions/transcendental.py +690 -0
  338. sage/functions/trig.py +1062 -0
  339. sage/functions/wigner.py +726 -0
  340. sage/geometry/abc.cpython-314t-aarch64-linux-musl.so +0 -0
  341. sage/geometry/abc.pyx +82 -0
  342. sage/geometry/all__sagemath_categories.py +1 -0
  343. sage/groups/all__sagemath_categories.py +11 -0
  344. sage/groups/generic.py +1733 -0
  345. sage/groups/groups_catalog.py +113 -0
  346. sage/groups/perm_gps/all__sagemath_categories.py +1 -0
  347. sage/groups/perm_gps/partn_ref/all.py +1 -0
  348. sage/groups/perm_gps/partn_ref/all__sagemath_categories.py +1 -0
  349. sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.cpython-314t-aarch64-linux-musl.so +0 -0
  350. sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.pxd +52 -0
  351. sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.pyx +906 -0
  352. sage/groups/perm_gps/partn_ref/canonical_augmentation.cpython-314t-aarch64-linux-musl.so +0 -0
  353. sage/groups/perm_gps/partn_ref/canonical_augmentation.pxd +85 -0
  354. sage/groups/perm_gps/partn_ref/canonical_augmentation.pyx +534 -0
  355. sage/groups/perm_gps/partn_ref/data_structures.cpython-314t-aarch64-linux-musl.so +0 -0
  356. sage/groups/perm_gps/partn_ref/data_structures.pxd +576 -0
  357. sage/groups/perm_gps/partn_ref/data_structures.pyx +1792 -0
  358. sage/groups/perm_gps/partn_ref/double_coset.cpython-314t-aarch64-linux-musl.so +0 -0
  359. sage/groups/perm_gps/partn_ref/double_coset.pxd +45 -0
  360. sage/groups/perm_gps/partn_ref/double_coset.pyx +739 -0
  361. sage/groups/perm_gps/partn_ref/refinement_lists.cpython-314t-aarch64-linux-musl.so +0 -0
  362. sage/groups/perm_gps/partn_ref/refinement_lists.pxd +18 -0
  363. sage/groups/perm_gps/partn_ref/refinement_lists.pyx +82 -0
  364. sage/groups/perm_gps/partn_ref/refinement_python.cpython-314t-aarch64-linux-musl.so +0 -0
  365. sage/groups/perm_gps/partn_ref/refinement_python.pxd +16 -0
  366. sage/groups/perm_gps/partn_ref/refinement_python.pyx +564 -0
  367. sage/groups/perm_gps/partn_ref/refinement_sets.cpython-314t-aarch64-linux-musl.so +0 -0
  368. sage/groups/perm_gps/partn_ref/refinement_sets.pxd +60 -0
  369. sage/groups/perm_gps/partn_ref/refinement_sets.pyx +858 -0
  370. sage/interfaces/abc.py +140 -0
  371. sage/interfaces/all.py +58 -0
  372. sage/interfaces/all__sagemath_categories.py +1 -0
  373. sage/interfaces/expect.py +1643 -0
  374. sage/interfaces/interface.py +1682 -0
  375. sage/interfaces/process.cpython-314t-aarch64-linux-musl.so +0 -0
  376. sage/interfaces/process.pxd +5 -0
  377. sage/interfaces/process.pyx +288 -0
  378. sage/interfaces/quit.py +167 -0
  379. sage/interfaces/sage0.py +604 -0
  380. sage/interfaces/sagespawn.cpython-314t-aarch64-linux-musl.so +0 -0
  381. sage/interfaces/sagespawn.pyx +308 -0
  382. sage/interfaces/tab_completion.py +101 -0
  383. sage/misc/all__sagemath_categories.py +78 -0
  384. sage/misc/allocator.cpython-314t-aarch64-linux-musl.so +0 -0
  385. sage/misc/allocator.pxd +6 -0
  386. sage/misc/allocator.pyx +47 -0
  387. sage/misc/binary_tree.cpython-314t-aarch64-linux-musl.so +0 -0
  388. sage/misc/binary_tree.pxd +29 -0
  389. sage/misc/binary_tree.pyx +537 -0
  390. sage/misc/callable_dict.cpython-314t-aarch64-linux-musl.so +0 -0
  391. sage/misc/callable_dict.pyx +89 -0
  392. sage/misc/citation.cpython-314t-aarch64-linux-musl.so +0 -0
  393. sage/misc/citation.pyx +159 -0
  394. sage/misc/converting_dict.py +293 -0
  395. sage/misc/defaults.py +129 -0
  396. sage/misc/derivative.cpython-314t-aarch64-linux-musl.so +0 -0
  397. sage/misc/derivative.pyx +223 -0
  398. sage/misc/functional.py +2005 -0
  399. sage/misc/html.py +589 -0
  400. sage/misc/latex.py +2673 -0
  401. sage/misc/latex_macros.py +236 -0
  402. sage/misc/latex_standalone.py +1833 -0
  403. sage/misc/map_threaded.py +38 -0
  404. sage/misc/mathml.py +76 -0
  405. sage/misc/method_decorator.py +88 -0
  406. sage/misc/mrange.py +755 -0
  407. sage/misc/multireplace.py +41 -0
  408. sage/misc/object_multiplexer.py +92 -0
  409. sage/misc/parser.cpython-314t-aarch64-linux-musl.so +0 -0
  410. sage/misc/parser.pyx +1107 -0
  411. sage/misc/random_testing.py +264 -0
  412. sage/misc/rest_index_of_methods.py +377 -0
  413. sage/misc/search.cpython-314t-aarch64-linux-musl.so +0 -0
  414. sage/misc/search.pxd +2 -0
  415. sage/misc/search.pyx +68 -0
  416. sage/misc/stopgap.cpython-314t-aarch64-linux-musl.so +0 -0
  417. sage/misc/stopgap.pyx +95 -0
  418. sage/misc/table.py +853 -0
  419. sage/monoids/all__sagemath_categories.py +1 -0
  420. sage/monoids/indexed_free_monoid.py +1071 -0
  421. sage/monoids/monoid.py +82 -0
  422. sage/numerical/all__sagemath_categories.py +1 -0
  423. sage/numerical/backends/all__sagemath_categories.py +1 -0
  424. sage/numerical/backends/generic_backend.cpython-314t-aarch64-linux-musl.so +0 -0
  425. sage/numerical/backends/generic_backend.pxd +61 -0
  426. sage/numerical/backends/generic_backend.pyx +1893 -0
  427. sage/numerical/backends/generic_sdp_backend.cpython-314t-aarch64-linux-musl.so +0 -0
  428. sage/numerical/backends/generic_sdp_backend.pxd +38 -0
  429. sage/numerical/backends/generic_sdp_backend.pyx +755 -0
  430. sage/parallel/all.py +6 -0
  431. sage/parallel/decorate.py +575 -0
  432. sage/parallel/map_reduce.py +1997 -0
  433. sage/parallel/multiprocessing_sage.py +76 -0
  434. sage/parallel/ncpus.py +35 -0
  435. sage/parallel/parallelism.py +364 -0
  436. sage/parallel/reference.py +47 -0
  437. sage/parallel/use_fork.py +333 -0
  438. sage/rings/abc.cpython-314t-aarch64-linux-musl.so +0 -0
  439. sage/rings/abc.pxd +31 -0
  440. sage/rings/abc.pyx +526 -0
  441. sage/rings/algebraic_closure_finite_field.py +1154 -0
  442. sage/rings/all__sagemath_categories.py +91 -0
  443. sage/rings/big_oh.py +227 -0
  444. sage/rings/continued_fraction.py +2754 -0
  445. sage/rings/continued_fraction_gosper.py +220 -0
  446. sage/rings/factorint.cpython-314t-aarch64-linux-musl.so +0 -0
  447. sage/rings/factorint.pyx +295 -0
  448. sage/rings/fast_arith.cpython-314t-aarch64-linux-musl.so +0 -0
  449. sage/rings/fast_arith.pxd +21 -0
  450. sage/rings/fast_arith.pyx +535 -0
  451. sage/rings/finite_rings/all__sagemath_categories.py +9 -0
  452. sage/rings/finite_rings/conway_polynomials.py +542 -0
  453. sage/rings/finite_rings/element_base.cpython-314t-aarch64-linux-musl.so +0 -0
  454. sage/rings/finite_rings/element_base.pxd +12 -0
  455. sage/rings/finite_rings/element_base.pyx +1176 -0
  456. sage/rings/finite_rings/finite_field_base.cpython-314t-aarch64-linux-musl.so +0 -0
  457. sage/rings/finite_rings/finite_field_base.pxd +7 -0
  458. sage/rings/finite_rings/finite_field_base.pyx +2171 -0
  459. sage/rings/finite_rings/finite_field_constructor.py +827 -0
  460. sage/rings/finite_rings/finite_field_prime_modn.py +372 -0
  461. sage/rings/finite_rings/galois_group.py +154 -0
  462. sage/rings/finite_rings/hom_finite_field.cpython-314t-aarch64-linux-musl.so +0 -0
  463. sage/rings/finite_rings/hom_finite_field.pxd +23 -0
  464. sage/rings/finite_rings/hom_finite_field.pyx +856 -0
  465. sage/rings/finite_rings/hom_prime_finite_field.cpython-314t-aarch64-linux-musl.so +0 -0
  466. sage/rings/finite_rings/hom_prime_finite_field.pxd +15 -0
  467. sage/rings/finite_rings/hom_prime_finite_field.pyx +164 -0
  468. sage/rings/finite_rings/homset.py +357 -0
  469. sage/rings/finite_rings/integer_mod.cpython-314t-aarch64-linux-musl.so +0 -0
  470. sage/rings/finite_rings/integer_mod.pxd +56 -0
  471. sage/rings/finite_rings/integer_mod.pyx +4586 -0
  472. sage/rings/finite_rings/integer_mod_limits.h +11 -0
  473. sage/rings/finite_rings/integer_mod_ring.py +2044 -0
  474. sage/rings/finite_rings/residue_field.cpython-314t-aarch64-linux-musl.so +0 -0
  475. sage/rings/finite_rings/residue_field.pxd +30 -0
  476. sage/rings/finite_rings/residue_field.pyx +1811 -0
  477. sage/rings/finite_rings/stdint.pxd +19 -0
  478. sage/rings/fraction_field.py +1452 -0
  479. sage/rings/fraction_field_element.cpython-314t-aarch64-linux-musl.so +0 -0
  480. sage/rings/fraction_field_element.pyx +1357 -0
  481. sage/rings/function_field/all.py +7 -0
  482. sage/rings/function_field/all__sagemath_categories.py +2 -0
  483. sage/rings/function_field/constructor.py +218 -0
  484. sage/rings/function_field/element.cpython-314t-aarch64-linux-musl.so +0 -0
  485. sage/rings/function_field/element.pxd +11 -0
  486. sage/rings/function_field/element.pyx +1008 -0
  487. sage/rings/function_field/element_rational.cpython-314t-aarch64-linux-musl.so +0 -0
  488. sage/rings/function_field/element_rational.pyx +513 -0
  489. sage/rings/function_field/extensions.py +230 -0
  490. sage/rings/function_field/function_field.py +1468 -0
  491. sage/rings/function_field/function_field_rational.py +1005 -0
  492. sage/rings/function_field/ideal.py +1155 -0
  493. sage/rings/function_field/ideal_rational.py +629 -0
  494. sage/rings/function_field/jacobian_base.py +826 -0
  495. sage/rings/function_field/jacobian_hess.py +1053 -0
  496. sage/rings/function_field/jacobian_khuri_makdisi.py +1027 -0
  497. sage/rings/function_field/maps.py +1039 -0
  498. sage/rings/function_field/order.py +281 -0
  499. sage/rings/function_field/order_basis.py +586 -0
  500. sage/rings/function_field/order_rational.py +576 -0
  501. sage/rings/function_field/place.py +426 -0
  502. sage/rings/function_field/place_rational.py +181 -0
  503. sage/rings/generic.py +320 -0
  504. sage/rings/homset.py +332 -0
  505. sage/rings/ideal.py +1885 -0
  506. sage/rings/ideal_monoid.py +215 -0
  507. sage/rings/infinity.py +1890 -0
  508. sage/rings/integer.cpython-314t-aarch64-linux-musl.so +0 -0
  509. sage/rings/integer.pxd +45 -0
  510. sage/rings/integer.pyx +7874 -0
  511. sage/rings/integer_ring.cpython-314t-aarch64-linux-musl.so +0 -0
  512. sage/rings/integer_ring.pxd +8 -0
  513. sage/rings/integer_ring.pyx +1693 -0
  514. sage/rings/laurent_series_ring.py +931 -0
  515. sage/rings/laurent_series_ring_element.cpython-314t-aarch64-linux-musl.so +0 -0
  516. sage/rings/laurent_series_ring_element.pxd +11 -0
  517. sage/rings/laurent_series_ring_element.pyx +1927 -0
  518. sage/rings/lazy_series.py +7815 -0
  519. sage/rings/lazy_series_ring.py +4356 -0
  520. sage/rings/localization.py +1043 -0
  521. sage/rings/morphism.cpython-314t-aarch64-linux-musl.so +0 -0
  522. sage/rings/morphism.pxd +39 -0
  523. sage/rings/morphism.pyx +3299 -0
  524. sage/rings/multi_power_series_ring.py +1145 -0
  525. sage/rings/multi_power_series_ring_element.py +2184 -0
  526. sage/rings/noncommutative_ideals.cpython-314t-aarch64-linux-musl.so +0 -0
  527. sage/rings/noncommutative_ideals.pyx +423 -0
  528. sage/rings/number_field/all__sagemath_categories.py +1 -0
  529. sage/rings/number_field/number_field_base.cpython-314t-aarch64-linux-musl.so +0 -0
  530. sage/rings/number_field/number_field_base.pxd +8 -0
  531. sage/rings/number_field/number_field_base.pyx +507 -0
  532. sage/rings/number_field/number_field_element_base.cpython-314t-aarch64-linux-musl.so +0 -0
  533. sage/rings/number_field/number_field_element_base.pxd +6 -0
  534. sage/rings/number_field/number_field_element_base.pyx +36 -0
  535. sage/rings/number_field/number_field_ideal.py +3550 -0
  536. sage/rings/padics/all__sagemath_categories.py +4 -0
  537. sage/rings/padics/local_generic.py +1670 -0
  538. sage/rings/padics/local_generic_element.cpython-314t-aarch64-linux-musl.so +0 -0
  539. sage/rings/padics/local_generic_element.pxd +5 -0
  540. sage/rings/padics/local_generic_element.pyx +1017 -0
  541. sage/rings/padics/misc.py +256 -0
  542. sage/rings/padics/padic_generic.py +1911 -0
  543. sage/rings/padics/pow_computer.cpython-314t-aarch64-linux-musl.so +0 -0
  544. sage/rings/padics/pow_computer.pxd +38 -0
  545. sage/rings/padics/pow_computer.pyx +671 -0
  546. sage/rings/padics/precision_error.py +24 -0
  547. sage/rings/polynomial/all__sagemath_categories.py +25 -0
  548. sage/rings/polynomial/commutative_polynomial.cpython-314t-aarch64-linux-musl.so +0 -0
  549. sage/rings/polynomial/commutative_polynomial.pxd +6 -0
  550. sage/rings/polynomial/commutative_polynomial.pyx +24 -0
  551. sage/rings/polynomial/cyclotomic.cpython-314t-aarch64-linux-musl.so +0 -0
  552. sage/rings/polynomial/cyclotomic.pyx +404 -0
  553. sage/rings/polynomial/flatten.py +711 -0
  554. sage/rings/polynomial/ideal.py +102 -0
  555. sage/rings/polynomial/infinite_polynomial_element.py +1768 -0
  556. sage/rings/polynomial/infinite_polynomial_ring.py +1653 -0
  557. sage/rings/polynomial/laurent_polynomial.cpython-314t-aarch64-linux-musl.so +0 -0
  558. sage/rings/polynomial/laurent_polynomial.pxd +18 -0
  559. sage/rings/polynomial/laurent_polynomial.pyx +2190 -0
  560. sage/rings/polynomial/laurent_polynomial_ideal.py +590 -0
  561. sage/rings/polynomial/laurent_polynomial_ring.py +832 -0
  562. sage/rings/polynomial/laurent_polynomial_ring_base.py +708 -0
  563. sage/rings/polynomial/multi_polynomial.cpython-314t-aarch64-linux-musl.so +0 -0
  564. sage/rings/polynomial/multi_polynomial.pxd +12 -0
  565. sage/rings/polynomial/multi_polynomial.pyx +3082 -0
  566. sage/rings/polynomial/multi_polynomial_element.py +2570 -0
  567. sage/rings/polynomial/multi_polynomial_ideal.py +5771 -0
  568. sage/rings/polynomial/multi_polynomial_ring.py +947 -0
  569. sage/rings/polynomial/multi_polynomial_ring_base.cpython-314t-aarch64-linux-musl.so +0 -0
  570. sage/rings/polynomial/multi_polynomial_ring_base.pxd +15 -0
  571. sage/rings/polynomial/multi_polynomial_ring_base.pyx +1855 -0
  572. sage/rings/polynomial/multi_polynomial_sequence.py +2204 -0
  573. sage/rings/polynomial/polydict.cpython-314t-aarch64-linux-musl.so +0 -0
  574. sage/rings/polynomial/polydict.pxd +45 -0
  575. sage/rings/polynomial/polydict.pyx +2701 -0
  576. sage/rings/polynomial/polynomial_compiled.cpython-314t-aarch64-linux-musl.so +0 -0
  577. sage/rings/polynomial/polynomial_compiled.pxd +59 -0
  578. sage/rings/polynomial/polynomial_compiled.pyx +509 -0
  579. sage/rings/polynomial/polynomial_element.cpython-314t-aarch64-linux-musl.so +0 -0
  580. sage/rings/polynomial/polynomial_element.pxd +64 -0
  581. sage/rings/polynomial/polynomial_element.pyx +13255 -0
  582. sage/rings/polynomial/polynomial_element_generic.py +1637 -0
  583. sage/rings/polynomial/polynomial_fateman.py +97 -0
  584. sage/rings/polynomial/polynomial_quotient_ring.py +2465 -0
  585. sage/rings/polynomial/polynomial_quotient_ring_element.py +779 -0
  586. sage/rings/polynomial/polynomial_ring.py +3784 -0
  587. sage/rings/polynomial/polynomial_ring_constructor.py +1051 -0
  588. sage/rings/polynomial/polynomial_ring_homomorphism.cpython-314t-aarch64-linux-musl.so +0 -0
  589. sage/rings/polynomial/polynomial_ring_homomorphism.pxd +5 -0
  590. sage/rings/polynomial/polynomial_ring_homomorphism.pyx +121 -0
  591. sage/rings/polynomial/polynomial_singular_interface.py +549 -0
  592. sage/rings/polynomial/symmetric_ideal.py +989 -0
  593. sage/rings/polynomial/symmetric_reduction.cpython-314t-aarch64-linux-musl.so +0 -0
  594. sage/rings/polynomial/symmetric_reduction.pxd +8 -0
  595. sage/rings/polynomial/symmetric_reduction.pyx +669 -0
  596. sage/rings/polynomial/term_order.py +2279 -0
  597. sage/rings/polynomial/toy_buchberger.py +449 -0
  598. sage/rings/polynomial/toy_d_basis.py +387 -0
  599. sage/rings/polynomial/toy_variety.py +362 -0
  600. sage/rings/power_series_mpoly.cpython-314t-aarch64-linux-musl.so +0 -0
  601. sage/rings/power_series_mpoly.pxd +9 -0
  602. sage/rings/power_series_mpoly.pyx +161 -0
  603. sage/rings/power_series_poly.cpython-314t-aarch64-linux-musl.so +0 -0
  604. sage/rings/power_series_poly.pxd +10 -0
  605. sage/rings/power_series_poly.pyx +1317 -0
  606. sage/rings/power_series_ring.py +1441 -0
  607. sage/rings/power_series_ring_element.cpython-314t-aarch64-linux-musl.so +0 -0
  608. sage/rings/power_series_ring_element.pxd +12 -0
  609. sage/rings/power_series_ring_element.pyx +3028 -0
  610. sage/rings/puiseux_series_ring.py +487 -0
  611. sage/rings/puiseux_series_ring_element.cpython-314t-aarch64-linux-musl.so +0 -0
  612. sage/rings/puiseux_series_ring_element.pxd +7 -0
  613. sage/rings/puiseux_series_ring_element.pyx +1055 -0
  614. sage/rings/qqbar_decorators.py +167 -0
  615. sage/rings/quotient_ring.py +1598 -0
  616. sage/rings/quotient_ring_element.py +979 -0
  617. sage/rings/rational.cpython-314t-aarch64-linux-musl.so +0 -0
  618. sage/rings/rational.pxd +20 -0
  619. sage/rings/rational.pyx +4284 -0
  620. sage/rings/rational_field.py +1730 -0
  621. sage/rings/real_double.cpython-314t-aarch64-linux-musl.so +0 -0
  622. sage/rings/real_double.pxd +16 -0
  623. sage/rings/real_double.pyx +2218 -0
  624. sage/rings/real_lazy.cpython-314t-aarch64-linux-musl.so +0 -0
  625. sage/rings/real_lazy.pxd +30 -0
  626. sage/rings/real_lazy.pyx +1773 -0
  627. sage/rings/ring.cpython-314t-aarch64-linux-musl.so +0 -0
  628. sage/rings/ring.pxd +30 -0
  629. sage/rings/ring.pyx +850 -0
  630. sage/rings/semirings/all.py +3 -0
  631. sage/rings/semirings/non_negative_integer_semiring.py +107 -0
  632. sage/rings/semirings/tropical_mpolynomial.py +972 -0
  633. sage/rings/semirings/tropical_polynomial.py +997 -0
  634. sage/rings/semirings/tropical_semiring.cpython-314t-aarch64-linux-musl.so +0 -0
  635. sage/rings/semirings/tropical_semiring.pyx +676 -0
  636. sage/rings/semirings/tropical_variety.py +1701 -0
  637. sage/rings/sum_of_squares.cpython-314t-aarch64-linux-musl.so +0 -0
  638. sage/rings/sum_of_squares.pxd +3 -0
  639. sage/rings/sum_of_squares.pyx +336 -0
  640. sage/rings/tests.py +504 -0
  641. sage/schemes/affine/affine_homset.py +508 -0
  642. sage/schemes/affine/affine_morphism.py +1574 -0
  643. sage/schemes/affine/affine_point.py +460 -0
  644. sage/schemes/affine/affine_rational_point.py +308 -0
  645. sage/schemes/affine/affine_space.py +1264 -0
  646. sage/schemes/affine/affine_subscheme.py +592 -0
  647. sage/schemes/affine/all.py +25 -0
  648. sage/schemes/all__sagemath_categories.py +5 -0
  649. sage/schemes/generic/algebraic_scheme.py +2092 -0
  650. sage/schemes/generic/all.py +5 -0
  651. sage/schemes/generic/ambient_space.py +400 -0
  652. sage/schemes/generic/divisor.py +465 -0
  653. sage/schemes/generic/divisor_group.py +313 -0
  654. sage/schemes/generic/glue.py +84 -0
  655. sage/schemes/generic/homset.py +820 -0
  656. sage/schemes/generic/hypersurface.py +234 -0
  657. sage/schemes/generic/morphism.py +2107 -0
  658. sage/schemes/generic/point.py +237 -0
  659. sage/schemes/generic/scheme.py +1190 -0
  660. sage/schemes/generic/spec.py +199 -0
  661. sage/schemes/product_projective/all.py +6 -0
  662. sage/schemes/product_projective/homset.py +236 -0
  663. sage/schemes/product_projective/morphism.py +517 -0
  664. sage/schemes/product_projective/point.py +568 -0
  665. sage/schemes/product_projective/rational_point.py +550 -0
  666. sage/schemes/product_projective/space.py +1301 -0
  667. sage/schemes/product_projective/subscheme.py +466 -0
  668. sage/schemes/projective/all.py +24 -0
  669. sage/schemes/projective/proj_bdd_height.py +453 -0
  670. sage/schemes/projective/projective_homset.py +718 -0
  671. sage/schemes/projective/projective_morphism.py +2792 -0
  672. sage/schemes/projective/projective_point.py +1484 -0
  673. sage/schemes/projective/projective_rational_point.py +569 -0
  674. sage/schemes/projective/projective_space.py +2571 -0
  675. sage/schemes/projective/projective_subscheme.py +1574 -0
  676. sage/sets/all.py +17 -0
  677. sage/sets/cartesian_product.py +376 -0
  678. sage/sets/condition_set.py +525 -0
  679. sage/sets/disjoint_set.cpython-314t-aarch64-linux-musl.so +0 -0
  680. sage/sets/disjoint_set.pxd +36 -0
  681. sage/sets/disjoint_set.pyx +998 -0
  682. sage/sets/disjoint_union_enumerated_sets.py +625 -0
  683. sage/sets/family.cpython-314t-aarch64-linux-musl.so +0 -0
  684. sage/sets/family.pxd +12 -0
  685. sage/sets/family.pyx +1556 -0
  686. sage/sets/finite_enumerated_set.py +406 -0
  687. sage/sets/finite_set_map_cy.cpython-314t-aarch64-linux-musl.so +0 -0
  688. sage/sets/finite_set_map_cy.pxd +34 -0
  689. sage/sets/finite_set_map_cy.pyx +708 -0
  690. sage/sets/finite_set_maps.py +591 -0
  691. sage/sets/image_set.py +448 -0
  692. sage/sets/integer_range.py +829 -0
  693. sage/sets/non_negative_integers.py +241 -0
  694. sage/sets/positive_integers.py +93 -0
  695. sage/sets/primes.py +188 -0
  696. sage/sets/real_set.py +2760 -0
  697. sage/sets/recursively_enumerated_set.cpython-314t-aarch64-linux-musl.so +0 -0
  698. sage/sets/recursively_enumerated_set.pxd +31 -0
  699. sage/sets/recursively_enumerated_set.pyx +2082 -0
  700. sage/sets/set.py +2083 -0
  701. sage/sets/set_from_iterator.py +1021 -0
  702. sage/sets/totally_ordered_finite_set.py +329 -0
  703. sage/symbolic/all__sagemath_categories.py +1 -0
  704. sage/symbolic/function.cpython-314t-aarch64-linux-musl.so +0 -0
  705. sage/symbolic/function.pxd +29 -0
  706. sage/symbolic/function.pyx +1488 -0
  707. sage/symbolic/symbols.py +56 -0
  708. sage/tests/all__sagemath_categories.py +1 -0
  709. sage/tests/cython.cpython-314t-aarch64-linux-musl.so +0 -0
  710. sage/tests/cython.pyx +37 -0
  711. sage/tests/stl_vector.cpython-314t-aarch64-linux-musl.so +0 -0
  712. sage/tests/stl_vector.pyx +171 -0
  713. sage/typeset/all.py +6 -0
  714. sage/typeset/ascii_art.py +295 -0
  715. sage/typeset/character_art.py +789 -0
  716. sage/typeset/character_art_factory.py +572 -0
  717. sage/typeset/symbols.py +334 -0
  718. sage/typeset/unicode_art.py +183 -0
  719. sage/typeset/unicode_characters.py +101 -0
@@ -0,0 +1,726 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ r"""
3
+ Wigner, Clebsch-Gordan, Racah, and Gaunt coefficients
4
+
5
+ Collection of functions for calculating Wigner 3-`j`, 6-`j`, 9-`j`,
6
+ Clebsch-Gordan, Racah as well as Gaunt coefficients exactly, all
7
+ evaluating to a rational number times the square root of a rational
8
+ number [RH2003]_.
9
+
10
+ Please see the description of the individual functions for further
11
+ details and examples.
12
+
13
+ AUTHORS:
14
+
15
+ - Jens Rasch (2009-03-24): initial version for Sage
16
+
17
+ - Jens Rasch (2009-05-31): updated to sage-4.0
18
+ """
19
+
20
+ # **********************************************************************
21
+ # Copyright (C) 2008 Jens Rasch <jyr2000@gmail.com>
22
+ #
23
+ # Distributed under the terms of the GNU General Public License (GPL)
24
+ # https://www.gnu.org/licenses/
25
+ # **********************************************************************
26
+
27
+ from sage.misc.lazy_import import lazy_import
28
+ from sage.rings.integer import Integer
29
+ from sage.rings.finite_rings.integer_mod import Mod
30
+
31
+ lazy_import('sage.rings.complex_mpfr', 'ComplexNumber')
32
+
33
+ lazy_import('sage.symbolic.constants', 'pi')
34
+
35
+
36
+ # This list of precomputed factorials is needed to massively
37
+ # accelerate future calculations of the various coefficients
38
+ _Factlist = [1]
39
+
40
+
41
+ def _calc_factlist(nn):
42
+ r"""
43
+ Return a list of precomputed factorials in order to massively
44
+ accelerate future calculations of the various coefficients.
45
+
46
+ INPUT:
47
+
48
+ - ``nn`` -- integer; highest factorial to be computed
49
+
50
+ OUTPUT: list of integers -- the list of precomputed factorials
51
+
52
+ EXAMPLES:
53
+
54
+ Calculate list of factorials::
55
+
56
+ sage: from sage.functions.wigner import _calc_factlist
57
+ sage: _calc_factlist(10)
58
+ [1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800]
59
+ """
60
+ if nn >= len(_Factlist):
61
+ for ii in range(len(_Factlist), nn + 1):
62
+ _Factlist.append(_Factlist[ii - 1] * ii)
63
+ return _Factlist[:Integer(nn) + 1]
64
+
65
+
66
+ def wigner_3j(j_1, j_2, j_3, m_1, m_2, m_3, prec=None):
67
+ r"""
68
+ Return the Wigner 3-`j` symbol `\begin{pmatrix} j_1 & j_2 & j_3 \\ m_1 & m_2 & m_3 \end{pmatrix}`.
69
+
70
+ INPUT:
71
+
72
+ - ``j_1``, ``j_2``, ``j_3``, ``m_1``, ``m_2``, ``m_3`` -- integer or half integer
73
+
74
+ - ``prec`` -- precision (default: ``None``); providing a precision can
75
+ drastically speed up the calculation
76
+
77
+ OUTPUT:
78
+
79
+ Rational number times the square root of a rational number
80
+ (if ``prec=None``), or real number if a precision is given.
81
+
82
+ EXAMPLES::
83
+
84
+ sage: wigner_3j(2, 6, 4, 0, 0, 0) # needs sage.symbolic
85
+ sqrt(5/143)
86
+ sage: wigner_3j(2, 6, 4, 0, 0, 1)
87
+ 0
88
+ sage: wigner_3j(0.5, 0.5, 1, 0.5, -0.5, 0) # needs sage.symbolic
89
+ sqrt(1/6)
90
+ sage: wigner_3j(40, 100, 60, -10, 60, -50) # needs sage.symbolic
91
+ 95608/18702538494885*sqrt(21082735836735314343364163310/220491455010479533763)
92
+ sage: wigner_3j(2500, 2500, 5000, 2488, 2400, -4888, prec=64) # needs sage.rings.real_mpfr
93
+ 7.60424456883448589e-12
94
+
95
+ It is an error to have arguments that are not integer or half
96
+ integer values::
97
+
98
+ sage: wigner_3j(2.1, 6, 4, 0, 0, 0)
99
+ Traceback (most recent call last):
100
+ ...
101
+ ValueError: j values must be integer or half integer
102
+ sage: wigner_3j(2, 6, 4, 1, 0, -1.1)
103
+ Traceback (most recent call last):
104
+ ...
105
+ ValueError: m values must be integer or half integer
106
+
107
+ The Wigner 3-`j` symbol obeys the following symmetry rules:
108
+
109
+ - invariant under any permutation of the columns (with the
110
+ exception of a sign change where `J=j_1+j_2+j_3`):
111
+
112
+ .. MATH::
113
+
114
+ \begin{pmatrix} j_1 & j_2 & j_3 \\ m_1 & m_2 & m_3 \end{pmatrix}
115
+ =\begin{pmatrix} j_3 & j_1 & j_2 \\ m_3 & m_1 & m_2 \end{pmatrix}
116
+ =\begin{pmatrix} j_2 & j_3 & j_1 \\ m_2 & m_3 & m_1 \end{pmatrix} \hspace{10em} \\
117
+ =(-1)^J \begin{pmatrix} j_3 & j_2 & j_1 \\ m_3 & m_2 & m_1 \end{pmatrix}
118
+ =(-1)^J \begin{pmatrix} j_1 & j_3 & j_2 \\ m_1 & m_3 & m_2 \end{pmatrix}
119
+ =(-1)^J \begin{pmatrix} j_2 & j_1 & j_3 \\ m_2 & m_1 & m_3 \end{pmatrix}
120
+
121
+ - invariant under space inflection, i.e.
122
+
123
+ .. MATH::
124
+
125
+ \begin{pmatrix} j_1 & j_2 & j_3 \\ m_1 & m_2 & m_3 \end{pmatrix}
126
+ =(-1)^J \begin{pmatrix} j_1 & j_2 & j_3 \\ -m_1 & -m_2 & -m_3 \end{pmatrix}
127
+
128
+ - symmetric with respect to the 72 additional symmetries based on
129
+ the work by [Reg1958]_
130
+
131
+ - zero for `j_1`, `j_2`, `j_3` not fulfilling triangle relation
132
+
133
+ - zero for `m_1 + m_2 + m_3 \neq 0`
134
+
135
+ - zero for violating any one of the conditions
136
+ `j_1 \ge |m_1|`, `j_2 \ge |m_2|`, `j_3 \ge |m_3|`
137
+
138
+ ALGORITHM:
139
+
140
+ This function uses the algorithm of [Ed1974]_ to calculate the
141
+ value of the 3-`j` symbol exactly. Note that the formula contains
142
+ alternating sums over large factorials and is therefore unsuitable
143
+ for finite precision arithmetic and only useful for a computer
144
+ algebra system [RH2003]_.
145
+
146
+ AUTHORS:
147
+
148
+ - Jens Rasch (2009-03-24): initial version
149
+ """
150
+ if int(j_1 * 2) != j_1 * 2 or int(j_2 * 2) != j_2 * 2 or \
151
+ int(j_3 * 2) != j_3 * 2:
152
+ raise ValueError("j values must be integer or half integer")
153
+ if int(m_1 * 2) != m_1 * 2 or int(m_2 * 2) != m_2 * 2 or \
154
+ int(m_3 * 2) != m_3 * 2:
155
+ raise ValueError("m values must be integer or half integer")
156
+ if m_1 + m_2 + m_3 != 0:
157
+ return 0
158
+ prefid = Integer((-1) ** int(j_1 - j_2 - m_3))
159
+ m_3 = -m_3
160
+ a1 = j_1 + j_2 - j_3
161
+ if a1 < 0:
162
+ return 0
163
+ a2 = j_1 - j_2 + j_3
164
+ if a2 < 0:
165
+ return 0
166
+ a3 = -j_1 + j_2 + j_3
167
+ if a3 < 0:
168
+ return 0
169
+ if (abs(m_1) > j_1) or (abs(m_2) > j_2) or (abs(m_3) > j_3):
170
+ return 0
171
+
172
+ maxfact = max(j_1 + j_2 + j_3 + 1,
173
+ j_1 + abs(m_1),
174
+ j_2 + abs(m_2),
175
+ j_3 + abs(m_3))
176
+ _calc_factlist(maxfact)
177
+
178
+ argsqrt = Integer(_Factlist[int(j_1 + j_2 - j_3)] *
179
+ _Factlist[int(j_1 - j_2 + j_3)] *
180
+ _Factlist[int(-j_1 + j_2 + j_3)] *
181
+ _Factlist[int(j_1 - m_1)] *
182
+ _Factlist[int(j_1 + m_1)] *
183
+ _Factlist[int(j_2 - m_2)] *
184
+ _Factlist[int(j_2 + m_2)] *
185
+ _Factlist[int(j_3 - m_3)] *
186
+ _Factlist[int(j_3 + m_3)]) / \
187
+ _Factlist[int(j_1 + j_2 + j_3 + 1)]
188
+
189
+ ressqrt = argsqrt.sqrt(prec)
190
+ if isinstance(ressqrt, ComplexNumber):
191
+ ressqrt = ressqrt.real()
192
+
193
+ imin = int(max(-j_3 + j_1 + m_2, -j_3 + j_2 - m_1, 0))
194
+ imax = int(min(j_2 + m_2, j_1 - m_1, j_1 + j_2 - j_3))
195
+ sumres = 0
196
+ for ii in range(imin, imax + 1):
197
+ den = _Factlist[ii] * \
198
+ _Factlist[int(ii + j_3 - j_1 - m_2)] * \
199
+ _Factlist[int(j_2 + m_2 - ii)] * \
200
+ _Factlist[int(j_1 - ii - m_1)] * \
201
+ _Factlist[int(ii + j_3 - j_2 + m_1)] * \
202
+ _Factlist[int(j_1 + j_2 - j_3 - ii)]
203
+ sumres = sumres + Integer((-1) ** ii) / den
204
+
205
+ return ressqrt * sumres * prefid
206
+
207
+
208
+ def clebsch_gordan(j_1, j_2, j_3, m_1, m_2, m_3, prec=None):
209
+ r"""
210
+ Return the Clebsch-Gordan coefficient
211
+ `\langle j_1 m_1 \; j_2 m_2 | j_3 m_3 \rangle`.
212
+
213
+ The reference for this function is [Ed1974]_.
214
+
215
+ INPUT:
216
+
217
+ - ``j_1``, ``j_2``, ``j_3``, ``m_1``, ``m_2``, ``m_3`` -- integer or half integer
218
+
219
+ - ``prec`` -- precision (default: ``None``); providing a precision can
220
+ drastically speed up the calculation
221
+
222
+ OUTPUT:
223
+
224
+ Rational number times the square root of a rational number
225
+ (if ``prec=None``), or real number if a precision is given.
226
+
227
+ EXAMPLES::
228
+
229
+ sage: simplify(clebsch_gordan(3/2,1/2,2, 3/2,1/2,2)) # needs sage.symbolic
230
+ 1
231
+ sage: clebsch_gordan(1.5,0.5,1, 1.5,-0.5,1) # needs sage.symbolic
232
+ 1/2*sqrt(3)
233
+ sage: clebsch_gordan(3/2,1/2,1, -1/2,1/2,0) # needs sage.symbolic
234
+ -sqrt(3)*sqrt(1/6)
235
+
236
+ .. NOTE::
237
+
238
+ The Clebsch-Gordan coefficient will be evaluated via its relation
239
+ to Wigner 3-`j` symbols:
240
+
241
+ .. MATH::
242
+
243
+ \langle j_1 m_1 \; j_2 m_2 | j_3 m_3 \rangle
244
+ =(-1)^{j_1-j_2+m_3} \sqrt{2j_3+1}
245
+ \begin{pmatrix} j_1 & j_2 & j_3 \\ m_1 & m_2 & -m_3 \end{pmatrix}
246
+
247
+ See also the documentation on Wigner 3-`j` symbols which exhibit much
248
+ higher symmetry relations than the Clebsch-Gordan coefficient.
249
+
250
+ AUTHORS:
251
+
252
+ - Jens Rasch (2009-03-24): initial version
253
+ """
254
+ return (-1) ** int(j_1 - j_2 + m_3) * (2 * j_3 + 1).sqrt(prec) * \
255
+ wigner_3j(j_1, j_2, j_3, m_1, m_2, -m_3, prec)
256
+
257
+
258
+ def _big_delta_coeff(aa, bb, cc, prec=None):
259
+ r"""
260
+ Return the Delta coefficient of the 3 angular momenta for Racah symbols.
261
+
262
+ This also checks that the differences are of integer value.
263
+
264
+ INPUT:
265
+
266
+ - ``aa`` -- first angular momentum, integer or half integer
267
+
268
+ - ``bb`` -- second angular momentum, integer or half integer
269
+
270
+ - ``cc`` -- third angular momentum, integer or half integer
271
+
272
+ - ``prec`` -- precision of the ``sqrt()`` calculation
273
+
274
+ OUTPUT: double - Value of the Delta coefficient
275
+
276
+ EXAMPLES::
277
+
278
+ sage: from sage.functions.wigner import _big_delta_coeff
279
+ sage: _big_delta_coeff(1,1,1) # needs sage.symbolic
280
+ 1/2*sqrt(1/6)
281
+ """
282
+ if int(aa + bb - cc) != (aa + bb - cc):
283
+ raise ValueError("j values must be integer or half integer and fulfill the triangle relation")
284
+ if int(aa + cc - bb) != (aa + cc - bb):
285
+ raise ValueError("j values must be integer or half integer and fulfill the triangle relation")
286
+ if int(bb + cc - aa) != (bb + cc - aa):
287
+ raise ValueError("j values must be integer or half integer and fulfill the triangle relation")
288
+ if (aa + bb - cc) < 0:
289
+ return 0
290
+ if (aa + cc - bb) < 0:
291
+ return 0
292
+ if (bb + cc - aa) < 0:
293
+ return 0
294
+
295
+ maxfact = max(aa + bb - cc, aa + cc - bb, bb + cc - aa, aa + bb + cc + 1)
296
+ _calc_factlist(maxfact)
297
+
298
+ argsqrt = Integer(_Factlist[int(aa + bb - cc)] *
299
+ _Factlist[int(aa + cc - bb)] *
300
+ _Factlist[int(bb + cc - aa)]) /\
301
+ Integer(_Factlist[int(aa + bb + cc + 1)])
302
+
303
+ ressqrt = argsqrt.sqrt(prec)
304
+ if isinstance(ressqrt, ComplexNumber):
305
+ res = ressqrt.real()
306
+ else:
307
+ res = ressqrt
308
+ return res
309
+
310
+
311
+ def racah(aa, bb, cc, dd, ee, ff, prec=None):
312
+ r"""
313
+ Return the Racah symbol `W(aa,bb,cc,dd;ee,ff)`.
314
+
315
+ INPUT:
316
+
317
+ - ``aa``, ..., ``ff`` -- integer or half integer
318
+
319
+ - ``prec`` -- precision (default: ``None``); providing a precision can
320
+ drastically speed up the calculation
321
+
322
+ OUTPUT:
323
+
324
+ Rational number times the square root of a rational number
325
+ (if ``prec=None``), or real number if a precision is given.
326
+
327
+ EXAMPLES::
328
+
329
+ sage: racah(3,3,3,3,3,3) # needs sage.symbolic
330
+ -1/14
331
+
332
+ .. NOTE::
333
+
334
+ The Racah symbol is related to the Wigner 6-`j` symbol:
335
+
336
+ .. MATH::
337
+
338
+ \begin{Bmatrix} j_1 & j_2 & j_3 \\ j_4 & j_5 & j_6 \end{Bmatrix}
339
+ =(-1)^{j_1+j_2+j_4+j_5} W(j_1,j_2,j_5,j_4;j_3,j_6)
340
+
341
+ Please see the 6-`j` symbol for its much richer symmetries and for
342
+ additional properties.
343
+
344
+ ALGORITHM:
345
+
346
+ This function uses the algorithm of [Ed1974]_ to calculate the
347
+ value of the 6-`j` symbol exactly. Note that the formula contains
348
+ alternating sums over large factorials and is therefore unsuitable
349
+ for finite precision arithmetic and only useful for a computer
350
+ algebra system [RH2003]_.
351
+
352
+ AUTHORS:
353
+
354
+ - Jens Rasch (2009-03-24): initial version
355
+ """
356
+ prefac = _big_delta_coeff(aa, bb, ee, prec) * \
357
+ _big_delta_coeff(cc, dd, ee, prec) * \
358
+ _big_delta_coeff(aa, cc, ff, prec) * \
359
+ _big_delta_coeff(bb, dd, ff, prec)
360
+ if prefac == 0:
361
+ return 0
362
+ imin = int(max(aa + bb + ee, cc + dd + ee, aa + cc + ff, bb + dd + ff))
363
+ imax = int(min(aa + bb + cc + dd, aa + dd + ee + ff, bb + cc + ee + ff))
364
+
365
+ maxfact = max(imax + 1, aa + bb + cc + dd, aa + dd + ee + ff,
366
+ bb + cc + ee + ff)
367
+ _calc_factlist(maxfact)
368
+
369
+ sumres = 0
370
+ for kk in range(imin, imax + 1):
371
+ den = _Factlist[int(kk - aa - bb - ee)] * \
372
+ _Factlist[int(kk - cc - dd - ee)] * \
373
+ _Factlist[int(kk - aa - cc - ff)] * \
374
+ _Factlist[int(kk - bb - dd - ff)] * \
375
+ _Factlist[int(aa + bb + cc + dd - kk)] * \
376
+ _Factlist[int(aa + dd + ee + ff - kk)] * \
377
+ _Factlist[int(bb + cc + ee + ff - kk)]
378
+ sumres = sumres + Integer((-1) ** kk * _Factlist[kk + 1]) / den
379
+
380
+ res = prefac * sumres * (-1) ** int(aa + bb + cc + dd)
381
+ return res
382
+
383
+
384
+ def wigner_6j(j_1, j_2, j_3, j_4, j_5, j_6, prec=None):
385
+ r"""
386
+ Return the Wigner 6-`j` symbol `\begin{Bmatrix} j_1 & j_2 & j_3 \\ j_4 & j_5 & j_6 \end{Bmatrix}`.
387
+
388
+ INPUT:
389
+
390
+ - ``j_1``, ..., ``j_6`` -- integer or half integer
391
+
392
+ - ``prec`` -- precision (default: ``None``); providing a precision can
393
+ drastically speed up the calculation
394
+
395
+ OUTPUT:
396
+
397
+ Rational number times the square root of a rational number
398
+ (if ``prec=None``), or real number if a precision is given.
399
+
400
+ EXAMPLES::
401
+
402
+ sage: # needs sage.symbolic
403
+ sage: wigner_6j(3,3,3,3,3,3)
404
+ -1/14
405
+ sage: wigner_6j(5,5,5,5,5,5)
406
+ 1/52
407
+ sage: wigner_6j(6,6,6,6,6,6)
408
+ 309/10868
409
+ sage: wigner_6j(8,8,8,8,8,8)
410
+ -12219/965770
411
+ sage: wigner_6j(30,30,30,30,30,30)
412
+ 36082186869033479581/87954851694828981714124
413
+ sage: wigner_6j(0.5,0.5,1,0.5,0.5,1)
414
+ 1/6
415
+ sage: wigner_6j(200,200,200,200,200,200, prec=1000)*1.0
416
+ 0.000155903212413242
417
+
418
+ It is an error to have arguments that are not integer or half
419
+ integer values or do not fulfill the triangle relation::
420
+
421
+ sage: wigner_6j(2.5,2.5,2.5,2.5,2.5,2.5)
422
+ Traceback (most recent call last):
423
+ ...
424
+ ValueError: j values must be integer or half integer and fulfill the triangle relation
425
+ sage: wigner_6j(0.5,0.5,1.1,0.5,0.5,1.1)
426
+ Traceback (most recent call last):
427
+ ...
428
+ ValueError: j values must be integer or half integer and fulfill the triangle relation
429
+
430
+ The Wigner 6-`j` symbol is related to the Racah symbol but exhibits
431
+ more symmetries as detailed below.
432
+
433
+ .. MATH::
434
+
435
+ \begin{Bmatrix} j_1 & j_2 & j_3 \\ j_4 & j_5 & j_6 \end{Bmatrix}
436
+ =(-1)^{j_1+j_2+j_4+j_5} W(j_1,j_2,j_5,j_4;j_3,j_6)
437
+
438
+ The Wigner 6-`j` symbol obeys the following symmetry rules:
439
+
440
+ - Wigner 6-`j` symbols are left invariant under any permutation of
441
+ the columns:
442
+
443
+ .. MATH::
444
+
445
+ \begin{Bmatrix} j_1 & j_2 & j_3 \\ j_4 & j_5 & j_6 \end{Bmatrix}
446
+ =\begin{Bmatrix} j_3 & j_1 & j_2 \\ j_6 & j_4 & j_5 \end{Bmatrix}
447
+ =\begin{Bmatrix} j_2 & j_3 & j_1 \\ j_5 & j_6 & j_4 \end{Bmatrix} \hspace{7em} \\
448
+ =\begin{Bmatrix} j_3 & j_2 & j_1 \\ j_6 & j_5 & j_4 \end{Bmatrix}
449
+ =\begin{Bmatrix} j_1 & j_3 & j_2 \\ j_4 & j_6 & j_5 \end{Bmatrix}
450
+ =\begin{Bmatrix} j_2 & j_1 & j_3 \\ j_5 & j_4 & j_6 \end{Bmatrix} \hspace{3em}
451
+
452
+ - They are invariant under the exchange of the upper and lower
453
+ arguments in each of any two columns, i.e.
454
+
455
+ .. MATH::
456
+
457
+ \begin{Bmatrix} j_1 & j_2 & j_3 \\ j_4 & j_5 & j_6 \end{Bmatrix}
458
+ =\begin{Bmatrix} j_1 & j_5 & j_6 \\ j_4 & j_2 & j_3 \end{Bmatrix}
459
+ =\begin{Bmatrix} j_4 & j_2 & j_6 \\ j_1 & j_5 & j_3 \end{Bmatrix}
460
+ =\begin{Bmatrix} j_4 & j_5 & j_3 \\ j_1 & j_2 & j_6 \end{Bmatrix}
461
+
462
+ - additional 6 symmetries [Reg1959]_ giving rise to 144 symmetries
463
+ in total
464
+
465
+ - only nonzero if any triple of `j`'s fulfill a triangle relation
466
+
467
+ ALGORITHM:
468
+
469
+ This function uses the algorithm of [Ed1974]_ to calculate the
470
+ value of the 6-`j` symbol exactly. Note that the formula contains
471
+ alternating sums over large factorials and is therefore unsuitable
472
+ for finite precision arithmetic and only useful for a computer
473
+ algebra system [RH2003]_.
474
+ """
475
+ res = (-1) ** int(j_1 + j_2 + j_4 + j_5) * \
476
+ racah(j_1, j_2, j_5, j_4, j_3, j_6, prec)
477
+ return res
478
+
479
+
480
+ def wigner_9j(j_1, j_2, j_3, j_4, j_5, j_6, j_7, j_8, j_9, prec=None):
481
+ r"""
482
+ Return the Wigner 9-`j` symbol
483
+ `\begin{Bmatrix} j_1 & j_2 & j_3 \\ j_4 & j_5 & j_6 \\ j_7 & j_8 & j_9 \end{Bmatrix}`.
484
+
485
+ INPUT:
486
+
487
+ - ``j_1``, ..., ``j_9`` -- integer or half integer
488
+
489
+ - ``prec`` -- precision (default: ``None``); providing a precision can
490
+ drastically speed up the calculation
491
+
492
+ OUTPUT:
493
+
494
+ Rational number times the square root of a rational number
495
+ (if ``prec=None``), or real number if a precision is given.
496
+
497
+ EXAMPLES:
498
+
499
+ A couple of examples and test cases, note that for speed reasons a
500
+ precision is given::
501
+
502
+ sage: # needs sage.symbolic
503
+ sage: wigner_9j(1,1,1, 1,1,1, 1,1,0, prec=64) # ==1/18
504
+ 0.0555555555555555555
505
+ sage: wigner_9j(1,1,1, 1,1,1, 1,1,1)
506
+ 0
507
+ sage: wigner_9j(1,1,1, 1,1,1, 1,1,2, prec=64) # ==1/18
508
+ 0.0555555555555555556
509
+ sage: wigner_9j(1,2,1, 2,2,2, 1,2,1, prec=64) # ==-1/150
510
+ -0.00666666666666666667
511
+ sage: wigner_9j(3,3,2, 2,2,2, 3,3,2, prec=64) # ==157/14700
512
+ 0.0106802721088435374
513
+ sage: wigner_9j(3,3,2, 3,3,2, 3,3,2, prec=64) # ==3221*sqrt(70)/(246960*sqrt(105)) - 365/(3528*sqrt(70)*sqrt(105))
514
+ 0.00944247746651111739
515
+ sage: wigner_9j(3,3,1, 3.5,3.5,2, 3.5,3.5,1, prec=64) # ==3221*sqrt(70)/(246960*sqrt(105)) - 365/(3528*sqrt(70)*sqrt(105))
516
+ 0.0110216678544351364
517
+ sage: wigner_9j(100,80,50, 50,100,70, 60,50,100, prec=1000)*1.0
518
+ 1.05597798065761e-7
519
+ sage: wigner_9j(30,30,10, 30.5,30.5,20, 30.5,30.5,10, prec=1000)*1.0 # ==(80944680186359968990/95103769817469)*sqrt(1/682288158959699477295)
520
+ 0.0000325841699408828
521
+ sage: wigner_9j(64,62.5,114.5, 61.5,61,112.5, 113.5,110.5,60, prec=1000)*1.0
522
+ -3.41407910055520e-39
523
+ sage: wigner_9j(15,15,15, 15,3,15, 15,18,10, prec=1000)*1.0
524
+ -0.0000778324615309539
525
+ sage: wigner_9j(1.5,1,1.5, 1,1,1, 1.5,1,1.5)
526
+ 0
527
+
528
+ It is an error to have arguments that are not integer or half
529
+ integer values or do not fulfill the triangle relation::
530
+
531
+ sage: wigner_9j(0.5,0.5,0.5, 0.5,0.5,0.5, 0.5,0.5,0.5,prec=64)
532
+ Traceback (most recent call last):
533
+ ...
534
+ ValueError: j values must be integer or half integer and fulfill the triangle relation
535
+ sage: wigner_9j(1,1,1, 0.5,1,1.5, 0.5,1,2.5,prec=64) # needs sage.rings.real_mpfr
536
+ Traceback (most recent call last):
537
+ ...
538
+ ValueError: j values must be integer or half integer and fulfill the triangle relation
539
+
540
+ ALGORITHM:
541
+
542
+ This function uses the algorithm of [Ed1974]_ to calculate the
543
+ value of the 3-`j` symbol exactly. Note that the formula contains
544
+ alternating sums over large factorials and is therefore unsuitable
545
+ for finite precision arithmetic and only useful for a computer
546
+ algebra system [RH2003]_.
547
+ """
548
+ imin = 0
549
+ imax = int(min(j_1 + j_9, j_2 + j_6, j_4 + j_8))
550
+
551
+ sumres = 0
552
+ for kk in range(imin, imax + 1):
553
+ sumres = sumres + (2 * kk + 1) * \
554
+ racah(j_1, j_2, j_9, j_6, j_3, kk, prec) * \
555
+ racah(j_4, j_6, j_8, j_2, j_5, kk, prec) * \
556
+ racah(j_1, j_4, j_9, j_8, j_7, kk, prec)
557
+ return sumres
558
+
559
+
560
+ def gaunt(l_1, l_2, l_3, m_1, m_2, m_3, prec=None):
561
+ r"""
562
+ Return the Gaunt coefficient.
563
+
564
+ The Gaunt coefficient is defined as the integral over three
565
+ spherical harmonics:
566
+
567
+ .. MATH::
568
+
569
+ Y(l_1,l_2,l_3,m_1,m_2,m_3) \hspace{12em} \\
570
+ =\int Y_{l_1,m_1}(\Omega) \
571
+ Y_{l_2,m_2}(\Omega) \ Y_{l_3,m_3}(\Omega) \ d\Omega \hspace{5em} \\
572
+ =\sqrt{\frac{(2l_1+1)(2l_2+1)(2l_3+1)}{4\pi}} \hspace{6.5em} \\
573
+ \times \begin{pmatrix} l_1 & l_2 & l_3 \\ 0 & 0 & 0 \end{pmatrix}
574
+ \begin{pmatrix} l_1 & l_2 & l_3 \\ m_1 & m_2 & m_3 \end{pmatrix}
575
+
576
+ INPUT:
577
+
578
+ - ``l_1``, ``l_2``, ``l_3``, ``m_1``, ``m_2``, ``m_3`` -- integer
579
+
580
+ - ``prec`` -- precision (default: ``None``); providing a precision can
581
+ drastically speed up the calculation
582
+
583
+ OUTPUT:
584
+
585
+ Rational number times the square root of a rational number
586
+ (if ``prec=None``), or real number if a precision is given.
587
+
588
+ EXAMPLES::
589
+
590
+ sage: # needs sage.symbolic
591
+ sage: gaunt(1,0,1,1,0,-1)
592
+ -1/2/sqrt(pi)
593
+ sage: gaunt(1,0,1,1,0,0)
594
+ 0
595
+ sage: gaunt(29,29,34,10,-5,-5)
596
+ 1821867940156/215552371055153321*sqrt(22134)/sqrt(pi)
597
+ sage: gaunt(20,20,40,1,-1,0)
598
+ 28384503878959800/74029560764440771/sqrt(pi)
599
+ sage: gaunt(12,15,5,2,3,-5)
600
+ 91/124062*sqrt(36890)/sqrt(pi)
601
+ sage: gaunt(10,10,12,9,3,-12)
602
+ -98/62031*sqrt(6279)/sqrt(pi)
603
+ sage: gaunt(1000,1000,1200,9,3,-12).n(64)
604
+ 0.00689500421922113448
605
+
606
+ If the sum of the `l_i` is odd, the answer is zero, even for Python
607
+ ints (see :issue:`14766`)::
608
+
609
+ sage: gaunt(1,2,2,1,0,-1)
610
+ 0
611
+ sage: gaunt(int(1),int(2),int(2),1,0,-1)
612
+ 0
613
+
614
+ It is an error to use non-integer values for `l` or `m`::
615
+
616
+ sage: gaunt(1.2,0,1.2,0,0,0) # needs sage.rings.real_mpfr
617
+ Traceback (most recent call last):
618
+ ...
619
+ TypeError: Attempt to coerce non-integral RealNumber to Integer
620
+ sage: gaunt(1,0,1,1.1,0,-1.1) # needs sage.rings.real_mpfr
621
+ Traceback (most recent call last):
622
+ ...
623
+ TypeError: Attempt to coerce non-integral RealNumber to Integer
624
+
625
+ TESTS:
626
+
627
+ Check for :issue:`14735`::
628
+
629
+ sage: gaunt(int(1),int(1),int(1),int(0),int(1),int(-1))
630
+ 0
631
+
632
+ The Gaunt coefficient obeys the following symmetry rules:
633
+
634
+ - invariant under any permutation of the columns
635
+
636
+ .. MATH::
637
+
638
+ Y(l_1,l_2,l_3,m_1,m_2,m_3)
639
+ =Y(l_3,l_1,l_2,m_3,m_1,m_2) \hspace{3em} \\ \hspace{3em}
640
+ =Y(l_2,l_3,l_1,m_2,m_3,m_1)
641
+ =Y(l_3,l_2,l_1,m_3,m_2,m_1) \\ \hspace{3em}
642
+ =Y(l_1,l_3,l_2,m_1,m_3,m_2)
643
+ =Y(l_2,l_1,l_3,m_2,m_1,m_3)
644
+
645
+ - invariant under space inflection, i.e.
646
+
647
+ .. MATH::
648
+
649
+ Y(l_1,l_2,l_3,m_1,m_2,m_3)
650
+ =Y(l_1,l_2,l_3,-m_1,-m_2,-m_3)
651
+
652
+ - symmetric with respect to the 72 Regge symmetries as inherited
653
+ for the 3-`j` symbols [Reg1958]_
654
+
655
+ - zero for `l_1`, `l_2`, `l_3` not fulfilling triangle relation
656
+
657
+ - zero for violating any one of the conditions: `l_1 \ge |m_1|`,
658
+ `l_2 \ge |m_2|`, `l_3 \ge |m_3|`
659
+
660
+ - nonzero only for an even sum of the `l_i`, i.e.
661
+ `J=l_1+l_2+l_3=2n` for `n` in `\Bold{N}`
662
+
663
+ ALGORITHM:
664
+
665
+ This function uses the algorithm of [LdB1982]_ to
666
+ calculate the value of the Gaunt coefficient exactly. Note that
667
+ the formula contains alternating sums over large factorials and is
668
+ therefore unsuitable for finite precision arithmetic and only
669
+ useful for a computer algebra system [RH2003]_.
670
+
671
+ AUTHORS:
672
+
673
+ - Jens Rasch (2009-03-24): initial version for Sage
674
+ """
675
+ l_1 = Integer(l_1)
676
+ l_2 = Integer(l_2)
677
+ l_3 = Integer(l_3)
678
+ m_1 = Integer(m_1)
679
+ m_2 = Integer(m_2)
680
+ m_3 = Integer(m_3)
681
+
682
+ bigL = (l_1 + l_2 + l_3) / 2
683
+ a1 = l_1 + l_2 - l_3
684
+ if a1 < 0:
685
+ return 0
686
+ a2 = l_1 - l_2 + l_3
687
+ if a2 < 0:
688
+ return 0
689
+ a3 = -l_1 + l_2 + l_3
690
+ if a3 < 0:
691
+ return 0
692
+ if Mod(2 * bigL, 2) != 0:
693
+ return 0
694
+ if (m_1 + m_2 + m_3) != 0:
695
+ return 0
696
+ if (abs(m_1) > l_1) or (abs(m_2) > l_2) or (abs(m_3) > l_3):
697
+ return 0
698
+
699
+ imin = int(max(-l_3 + l_1 + m_2, -l_3 + l_2 - m_1, 0))
700
+ imax = int(min(l_2 + m_2, l_1 - m_1, l_1 + l_2 - l_3))
701
+
702
+ maxfact = max(l_1 + l_2 + l_3 + 1, imax + 1)
703
+ _calc_factlist(maxfact)
704
+
705
+ argsqrt = (2 * l_1 + 1) * (2 * l_2 + 1) * (2 * l_3 + 1) * \
706
+ _Factlist[l_1 - m_1] * _Factlist[l_1 + m_1] * _Factlist[l_2 - m_2] * \
707
+ _Factlist[l_2 + m_2] * _Factlist[l_3 - m_3] * _Factlist[l_3 + m_3] / \
708
+ (4*pi)
709
+ ressqrt = argsqrt.sqrt()
710
+
711
+ prefac = Integer(_Factlist[bigL] * _Factlist[l_2 - l_1 + l_3] *
712
+ _Factlist[l_1 - l_2 + l_3] * _Factlist[l_1 + l_2 - l_3]) / \
713
+ _Factlist[2 * bigL + 1] / \
714
+ (_Factlist[bigL - l_1] * _Factlist[bigL - l_2] * _Factlist[bigL - l_3])
715
+
716
+ sumres = 0
717
+ for ii in range(imin, imax + 1):
718
+ den = _Factlist[ii] * _Factlist[ii + l_3 - l_1 - m_2] * \
719
+ _Factlist[l_2 + m_2 - ii] * _Factlist[l_1 - ii - m_1] * \
720
+ _Factlist[ii + l_3 - l_2 + m_1] * _Factlist[l_1 + l_2 - l_3 - ii]
721
+ sumres = sumres + Integer((-1) ** ii) / den
722
+
723
+ res = ressqrt * prefac * sumres * (-1) ** (bigL + l_3 + m_1 - m_2)
724
+ if prec is not None:
725
+ res = res.n(prec)
726
+ return res