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.
- passagemath_categories-10.6.32.dist-info/METADATA +156 -0
- passagemath_categories-10.6.32.dist-info/RECORD +719 -0
- passagemath_categories-10.6.32.dist-info/WHEEL +5 -0
- passagemath_categories-10.6.32.dist-info/top_level.txt +2 -0
- passagemath_categories.libs/libgcc_s-2d945d6c.so.1 +0 -0
- passagemath_categories.libs/libgmp-28992bcb.so.10.5.0 +0 -0
- passagemath_categories.libs/libstdc++-85f2cd6d.so.6.0.33 +0 -0
- sage/all__sagemath_categories.py +28 -0
- sage/arith/all.py +38 -0
- sage/arith/constants.pxd +27 -0
- sage/arith/functions.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/arith/functions.pxd +4 -0
- sage/arith/functions.pyx +221 -0
- sage/arith/misc.py +6552 -0
- sage/arith/multi_modular.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/arith/multi_modular.pxd +39 -0
- sage/arith/multi_modular.pyx +994 -0
- sage/arith/rational_reconstruction.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/arith/rational_reconstruction.pxd +4 -0
- sage/arith/rational_reconstruction.pyx +115 -0
- sage/arith/srange.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/arith/srange.pyx +571 -0
- sage/calculus/all__sagemath_categories.py +2 -0
- sage/calculus/functional.py +481 -0
- sage/calculus/functions.py +151 -0
- sage/categories/additive_groups.py +73 -0
- sage/categories/additive_magmas.py +1044 -0
- sage/categories/additive_monoids.py +114 -0
- sage/categories/additive_semigroups.py +184 -0
- sage/categories/affine_weyl_groups.py +238 -0
- sage/categories/algebra_ideals.py +95 -0
- sage/categories/algebra_modules.py +96 -0
- sage/categories/algebras.py +349 -0
- sage/categories/algebras_with_basis.py +377 -0
- sage/categories/all.py +160 -0
- sage/categories/aperiodic_semigroups.py +29 -0
- sage/categories/associative_algebras.py +47 -0
- sage/categories/bialgebras.py +101 -0
- sage/categories/bialgebras_with_basis.py +414 -0
- sage/categories/bimodules.py +206 -0
- sage/categories/chain_complexes.py +268 -0
- sage/categories/classical_crystals.py +480 -0
- sage/categories/coalgebras.py +405 -0
- sage/categories/coalgebras_with_basis.py +232 -0
- sage/categories/coercion_methods.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/categories/coercion_methods.pyx +52 -0
- sage/categories/commutative_additive_groups.py +104 -0
- sage/categories/commutative_additive_monoids.py +45 -0
- sage/categories/commutative_additive_semigroups.py +48 -0
- sage/categories/commutative_algebra_ideals.py +87 -0
- sage/categories/commutative_algebras.py +94 -0
- sage/categories/commutative_ring_ideals.py +58 -0
- sage/categories/commutative_rings.py +736 -0
- sage/categories/complete_discrete_valuation.py +293 -0
- sage/categories/complex_reflection_groups.py +145 -0
- sage/categories/complex_reflection_or_generalized_coxeter_groups.py +1249 -0
- sage/categories/coxeter_group_algebras.py +186 -0
- sage/categories/coxeter_groups.py +3402 -0
- sage/categories/crystals.py +2628 -0
- sage/categories/cw_complexes.py +216 -0
- sage/categories/dedekind_domains.py +137 -0
- sage/categories/discrete_valuation.py +325 -0
- sage/categories/distributive_magmas_and_additive_magmas.py +100 -0
- sage/categories/division_rings.py +114 -0
- sage/categories/domains.py +95 -0
- sage/categories/drinfeld_modules.py +789 -0
- sage/categories/dual.py +42 -0
- sage/categories/enumerated_sets.py +1146 -0
- sage/categories/euclidean_domains.py +271 -0
- sage/categories/examples/algebras_with_basis.py +102 -0
- sage/categories/examples/all.py +1 -0
- sage/categories/examples/commutative_additive_monoids.py +130 -0
- sage/categories/examples/commutative_additive_semigroups.py +199 -0
- sage/categories/examples/coxeter_groups.py +8 -0
- sage/categories/examples/crystals.py +236 -0
- sage/categories/examples/cw_complexes.py +163 -0
- sage/categories/examples/facade_sets.py +187 -0
- sage/categories/examples/filtered_algebras_with_basis.py +204 -0
- sage/categories/examples/filtered_modules_with_basis.py +154 -0
- sage/categories/examples/finite_coxeter_groups.py +252 -0
- sage/categories/examples/finite_dimensional_algebras_with_basis.py +148 -0
- sage/categories/examples/finite_dimensional_lie_algebras_with_basis.py +495 -0
- sage/categories/examples/finite_enumerated_sets.py +208 -0
- sage/categories/examples/finite_monoids.py +150 -0
- sage/categories/examples/finite_semigroups.py +190 -0
- sage/categories/examples/finite_weyl_groups.py +191 -0
- sage/categories/examples/graded_connected_hopf_algebras_with_basis.py +152 -0
- sage/categories/examples/graded_modules_with_basis.py +168 -0
- sage/categories/examples/graphs.py +122 -0
- sage/categories/examples/hopf_algebras_with_basis.py +145 -0
- sage/categories/examples/infinite_enumerated_sets.py +190 -0
- sage/categories/examples/lie_algebras.py +352 -0
- sage/categories/examples/lie_algebras_with_basis.py +196 -0
- sage/categories/examples/magmas.py +162 -0
- sage/categories/examples/manifolds.py +94 -0
- sage/categories/examples/monoids.py +144 -0
- sage/categories/examples/posets.py +178 -0
- sage/categories/examples/semigroups.py +580 -0
- sage/categories/examples/semigroups_cython.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/categories/examples/semigroups_cython.pyx +221 -0
- sage/categories/examples/semirings.py +249 -0
- sage/categories/examples/sets_cat.py +706 -0
- sage/categories/examples/sets_with_grading.py +101 -0
- sage/categories/examples/with_realizations.py +542 -0
- sage/categories/fields.py +991 -0
- sage/categories/filtered_algebras.py +63 -0
- sage/categories/filtered_algebras_with_basis.py +548 -0
- sage/categories/filtered_hopf_algebras_with_basis.py +138 -0
- sage/categories/filtered_modules.py +210 -0
- sage/categories/filtered_modules_with_basis.py +1209 -0
- sage/categories/finite_complex_reflection_groups.py +1506 -0
- sage/categories/finite_coxeter_groups.py +1138 -0
- sage/categories/finite_crystals.py +103 -0
- sage/categories/finite_dimensional_algebras_with_basis.py +1860 -0
- sage/categories/finite_dimensional_bialgebras_with_basis.py +33 -0
- sage/categories/finite_dimensional_coalgebras_with_basis.py +33 -0
- sage/categories/finite_dimensional_graded_lie_algebras_with_basis.py +231 -0
- sage/categories/finite_dimensional_hopf_algebras_with_basis.py +38 -0
- sage/categories/finite_dimensional_lie_algebras_with_basis.py +2774 -0
- sage/categories/finite_dimensional_modules_with_basis.py +1407 -0
- sage/categories/finite_dimensional_nilpotent_lie_algebras_with_basis.py +167 -0
- sage/categories/finite_dimensional_semisimple_algebras_with_basis.py +270 -0
- sage/categories/finite_enumerated_sets.py +769 -0
- sage/categories/finite_fields.py +252 -0
- sage/categories/finite_groups.py +256 -0
- sage/categories/finite_lattice_posets.py +242 -0
- sage/categories/finite_monoids.py +316 -0
- sage/categories/finite_permutation_groups.py +339 -0
- sage/categories/finite_posets.py +1994 -0
- sage/categories/finite_semigroups.py +136 -0
- sage/categories/finite_sets.py +93 -0
- sage/categories/finite_weyl_groups.py +39 -0
- sage/categories/finitely_generated_lambda_bracket_algebras.py +112 -0
- sage/categories/finitely_generated_lie_conformal_algebras.py +114 -0
- sage/categories/finitely_generated_magmas.py +57 -0
- sage/categories/finitely_generated_semigroups.py +214 -0
- sage/categories/function_fields.py +76 -0
- sage/categories/g_sets.py +77 -0
- sage/categories/gcd_domains.py +65 -0
- sage/categories/generalized_coxeter_groups.py +94 -0
- sage/categories/graded_algebras.py +85 -0
- sage/categories/graded_algebras_with_basis.py +258 -0
- sage/categories/graded_bialgebras.py +32 -0
- sage/categories/graded_bialgebras_with_basis.py +32 -0
- sage/categories/graded_coalgebras.py +65 -0
- sage/categories/graded_coalgebras_with_basis.py +51 -0
- sage/categories/graded_hopf_algebras.py +41 -0
- sage/categories/graded_hopf_algebras_with_basis.py +169 -0
- sage/categories/graded_lie_algebras.py +91 -0
- sage/categories/graded_lie_algebras_with_basis.py +44 -0
- sage/categories/graded_lie_conformal_algebras.py +74 -0
- sage/categories/graded_modules.py +133 -0
- sage/categories/graded_modules_with_basis.py +329 -0
- sage/categories/graphs.py +138 -0
- sage/categories/group_algebras.py +430 -0
- sage/categories/groupoid.py +94 -0
- sage/categories/groups.py +667 -0
- sage/categories/h_trivial_semigroups.py +64 -0
- sage/categories/hecke_modules.py +185 -0
- sage/categories/highest_weight_crystals.py +980 -0
- sage/categories/hopf_algebras.py +219 -0
- sage/categories/hopf_algebras_with_basis.py +309 -0
- sage/categories/infinite_enumerated_sets.py +115 -0
- sage/categories/integral_domains.py +203 -0
- sage/categories/j_trivial_semigroups.py +29 -0
- sage/categories/kac_moody_algebras.py +82 -0
- sage/categories/kahler_algebras.py +203 -0
- sage/categories/l_trivial_semigroups.py +63 -0
- sage/categories/lambda_bracket_algebras.py +280 -0
- sage/categories/lambda_bracket_algebras_with_basis.py +107 -0
- sage/categories/lattice_posets.py +89 -0
- sage/categories/left_modules.py +49 -0
- sage/categories/lie_algebras.py +1070 -0
- sage/categories/lie_algebras_with_basis.py +261 -0
- sage/categories/lie_conformal_algebras.py +350 -0
- sage/categories/lie_conformal_algebras_with_basis.py +147 -0
- sage/categories/lie_groups.py +73 -0
- sage/categories/loop_crystals.py +1290 -0
- sage/categories/magmas.py +1189 -0
- sage/categories/magmas_and_additive_magmas.py +149 -0
- sage/categories/magmatic_algebras.py +365 -0
- sage/categories/manifolds.py +352 -0
- sage/categories/matrix_algebras.py +40 -0
- sage/categories/metric_spaces.py +387 -0
- sage/categories/modular_abelian_varieties.py +78 -0
- sage/categories/modules.py +989 -0
- sage/categories/modules_with_basis.py +2794 -0
- sage/categories/monoid_algebras.py +38 -0
- sage/categories/monoids.py +739 -0
- sage/categories/noetherian_rings.py +87 -0
- sage/categories/number_fields.py +242 -0
- sage/categories/ore_modules.py +189 -0
- sage/categories/partially_ordered_monoids.py +49 -0
- sage/categories/permutation_groups.py +63 -0
- sage/categories/pointed_sets.py +42 -0
- sage/categories/polyhedra.py +74 -0
- sage/categories/poor_man_map.py +270 -0
- sage/categories/posets.py +722 -0
- sage/categories/principal_ideal_domains.py +270 -0
- sage/categories/quantum_group_representations.py +543 -0
- sage/categories/quotient_fields.py +728 -0
- sage/categories/r_trivial_semigroups.py +45 -0
- sage/categories/regular_crystals.py +898 -0
- sage/categories/regular_supercrystals.py +170 -0
- sage/categories/right_modules.py +49 -0
- sage/categories/ring_ideals.py +74 -0
- sage/categories/rings.py +1904 -0
- sage/categories/rngs.py +175 -0
- sage/categories/schemes.py +393 -0
- sage/categories/semigroups.py +1060 -0
- sage/categories/semirings.py +71 -0
- sage/categories/semisimple_algebras.py +114 -0
- sage/categories/sets_with_grading.py +235 -0
- sage/categories/shephard_groups.py +43 -0
- sage/categories/signed_tensor.py +120 -0
- sage/categories/simplicial_complexes.py +134 -0
- sage/categories/simplicial_sets.py +1206 -0
- sage/categories/super_algebras.py +149 -0
- sage/categories/super_algebras_with_basis.py +144 -0
- sage/categories/super_hopf_algebras_with_basis.py +126 -0
- sage/categories/super_lie_conformal_algebras.py +193 -0
- sage/categories/super_modules.py +229 -0
- sage/categories/super_modules_with_basis.py +193 -0
- sage/categories/supercommutative_algebras.py +99 -0
- sage/categories/supercrystals.py +406 -0
- sage/categories/tensor.py +110 -0
- sage/categories/topological_spaces.py +170 -0
- sage/categories/triangular_kac_moody_algebras.py +439 -0
- sage/categories/tutorial.py +58 -0
- sage/categories/unique_factorization_domains.py +318 -0
- sage/categories/unital_algebras.py +426 -0
- sage/categories/vector_bundles.py +159 -0
- sage/categories/vector_spaces.py +357 -0
- sage/categories/weyl_groups.py +853 -0
- sage/combinat/all__sagemath_categories.py +34 -0
- sage/combinat/backtrack.py +180 -0
- sage/combinat/combinat.py +2269 -0
- sage/combinat/combinat_cython.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/combinat/combinat_cython.pxd +6 -0
- sage/combinat/combinat_cython.pyx +390 -0
- sage/combinat/combination.py +796 -0
- sage/combinat/combinatorial_map.py +416 -0
- sage/combinat/composition.py +2192 -0
- sage/combinat/dlx.py +510 -0
- sage/combinat/integer_lists/__init__.py +7 -0
- sage/combinat/integer_lists/base.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/combinat/integer_lists/base.pxd +16 -0
- sage/combinat/integer_lists/base.pyx +713 -0
- sage/combinat/integer_lists/invlex.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/combinat/integer_lists/invlex.pxd +4 -0
- sage/combinat/integer_lists/invlex.pyx +1650 -0
- sage/combinat/integer_lists/lists.py +328 -0
- sage/combinat/integer_lists/nn.py +48 -0
- sage/combinat/integer_vector.py +1818 -0
- sage/combinat/integer_vector_weighted.py +413 -0
- sage/combinat/matrices/all__sagemath_categories.py +5 -0
- sage/combinat/matrices/dancing_links.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/combinat/matrices/dancing_links.pyx +1159 -0
- sage/combinat/matrices/dancing_links_c.h +380 -0
- sage/combinat/matrices/dlxcpp.py +136 -0
- sage/combinat/partition.py +10070 -0
- sage/combinat/partitions.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/combinat/partitions.pyx +743 -0
- sage/combinat/permutation.py +10168 -0
- sage/combinat/permutation_cython.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/combinat/permutation_cython.pxd +11 -0
- sage/combinat/permutation_cython.pyx +407 -0
- sage/combinat/q_analogues.py +1090 -0
- sage/combinat/ranker.py +268 -0
- sage/combinat/subset.py +1561 -0
- sage/combinat/subsets_hereditary.py +202 -0
- sage/combinat/subsets_pairwise.py +184 -0
- sage/combinat/tools.py +63 -0
- sage/combinat/tuple.py +348 -0
- sage/data_structures/all.py +2 -0
- sage/data_structures/all__sagemath_categories.py +2 -0
- sage/data_structures/binary_matrix.pxd +138 -0
- sage/data_structures/binary_search.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/data_structures/binary_search.pxd +3 -0
- sage/data_structures/binary_search.pyx +66 -0
- sage/data_structures/bitset.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/data_structures/bitset.pxd +40 -0
- sage/data_structures/bitset.pyx +2385 -0
- sage/data_structures/bitset_base.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/data_structures/bitset_base.pxd +926 -0
- sage/data_structures/bitset_base.pyx +117 -0
- sage/data_structures/bitset_intrinsics.h +487 -0
- sage/data_structures/blas_dict.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/data_structures/blas_dict.pxd +12 -0
- sage/data_structures/blas_dict.pyx +469 -0
- sage/data_structures/list_of_pairs.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/data_structures/list_of_pairs.pxd +16 -0
- sage/data_structures/list_of_pairs.pyx +122 -0
- sage/data_structures/mutable_poset.py +3312 -0
- sage/data_structures/pairing_heap.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/data_structures/pairing_heap.h +346 -0
- sage/data_structures/pairing_heap.pxd +88 -0
- sage/data_structures/pairing_heap.pyx +1464 -0
- sage/data_structures/sparse_bitset.pxd +62 -0
- sage/data_structures/stream.py +5070 -0
- sage/databases/all__sagemath_categories.py +7 -0
- sage/databases/sql_db.py +2236 -0
- sage/ext/all__sagemath_categories.py +3 -0
- sage/ext/fast_callable.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/ext/fast_callable.pxd +4 -0
- sage/ext/fast_callable.pyx +2746 -0
- sage/ext/fast_eval.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/ext/fast_eval.pxd +1 -0
- sage/ext/fast_eval.pyx +102 -0
- sage/ext/interpreters/__init__.py +1 -0
- sage/ext/interpreters/all__sagemath_categories.py +2 -0
- sage/ext/interpreters/wrapper_el.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/ext/interpreters/wrapper_el.pxd +18 -0
- sage/ext/interpreters/wrapper_el.pyx +148 -0
- sage/ext/interpreters/wrapper_py.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/ext/interpreters/wrapper_py.pxd +17 -0
- sage/ext/interpreters/wrapper_py.pyx +133 -0
- sage/functions/airy.py +937 -0
- sage/functions/all.py +97 -0
- sage/functions/bessel.py +2102 -0
- sage/functions/error.py +784 -0
- sage/functions/exp_integral.py +1529 -0
- sage/functions/gamma.py +1087 -0
- sage/functions/generalized.py +672 -0
- sage/functions/hyperbolic.py +747 -0
- sage/functions/hypergeometric.py +1156 -0
- sage/functions/jacobi.py +1705 -0
- sage/functions/log.py +1402 -0
- sage/functions/min_max.py +338 -0
- sage/functions/orthogonal_polys.py +3106 -0
- sage/functions/other.py +2303 -0
- sage/functions/piecewise.py +1505 -0
- sage/functions/prime_pi.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/functions/prime_pi.pyx +262 -0
- sage/functions/special.py +1212 -0
- sage/functions/spike_function.py +278 -0
- sage/functions/transcendental.py +690 -0
- sage/functions/trig.py +1062 -0
- sage/functions/wigner.py +726 -0
- sage/geometry/abc.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/geometry/abc.pyx +82 -0
- sage/geometry/all__sagemath_categories.py +1 -0
- sage/groups/all__sagemath_categories.py +11 -0
- sage/groups/generic.py +1733 -0
- sage/groups/groups_catalog.py +113 -0
- sage/groups/perm_gps/all__sagemath_categories.py +1 -0
- sage/groups/perm_gps/partn_ref/all.py +1 -0
- sage/groups/perm_gps/partn_ref/all__sagemath_categories.py +1 -0
- sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.pxd +52 -0
- sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.pyx +906 -0
- sage/groups/perm_gps/partn_ref/canonical_augmentation.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/canonical_augmentation.pxd +85 -0
- sage/groups/perm_gps/partn_ref/canonical_augmentation.pyx +534 -0
- sage/groups/perm_gps/partn_ref/data_structures.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/data_structures.pxd +576 -0
- sage/groups/perm_gps/partn_ref/data_structures.pyx +1792 -0
- sage/groups/perm_gps/partn_ref/double_coset.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/double_coset.pxd +45 -0
- sage/groups/perm_gps/partn_ref/double_coset.pyx +739 -0
- sage/groups/perm_gps/partn_ref/refinement_lists.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/refinement_lists.pxd +18 -0
- sage/groups/perm_gps/partn_ref/refinement_lists.pyx +82 -0
- sage/groups/perm_gps/partn_ref/refinement_python.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/refinement_python.pxd +16 -0
- sage/groups/perm_gps/partn_ref/refinement_python.pyx +564 -0
- sage/groups/perm_gps/partn_ref/refinement_sets.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/refinement_sets.pxd +60 -0
- sage/groups/perm_gps/partn_ref/refinement_sets.pyx +858 -0
- sage/interfaces/abc.py +140 -0
- sage/interfaces/all.py +58 -0
- sage/interfaces/all__sagemath_categories.py +1 -0
- sage/interfaces/expect.py +1643 -0
- sage/interfaces/interface.py +1682 -0
- sage/interfaces/process.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/interfaces/process.pxd +5 -0
- sage/interfaces/process.pyx +288 -0
- sage/interfaces/quit.py +167 -0
- sage/interfaces/sage0.py +604 -0
- sage/interfaces/sagespawn.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/interfaces/sagespawn.pyx +308 -0
- sage/interfaces/tab_completion.py +101 -0
- sage/misc/all__sagemath_categories.py +78 -0
- sage/misc/allocator.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/misc/allocator.pxd +6 -0
- sage/misc/allocator.pyx +47 -0
- sage/misc/binary_tree.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/misc/binary_tree.pxd +29 -0
- sage/misc/binary_tree.pyx +537 -0
- sage/misc/callable_dict.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/misc/callable_dict.pyx +89 -0
- sage/misc/citation.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/misc/citation.pyx +159 -0
- sage/misc/converting_dict.py +293 -0
- sage/misc/defaults.py +129 -0
- sage/misc/derivative.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/misc/derivative.pyx +223 -0
- sage/misc/functional.py +2005 -0
- sage/misc/html.py +589 -0
- sage/misc/latex.py +2673 -0
- sage/misc/latex_macros.py +236 -0
- sage/misc/latex_standalone.py +1833 -0
- sage/misc/map_threaded.py +38 -0
- sage/misc/mathml.py +76 -0
- sage/misc/method_decorator.py +88 -0
- sage/misc/mrange.py +755 -0
- sage/misc/multireplace.py +41 -0
- sage/misc/object_multiplexer.py +92 -0
- sage/misc/parser.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/misc/parser.pyx +1107 -0
- sage/misc/random_testing.py +264 -0
- sage/misc/rest_index_of_methods.py +377 -0
- sage/misc/search.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/misc/search.pxd +2 -0
- sage/misc/search.pyx +68 -0
- sage/misc/stopgap.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/misc/stopgap.pyx +95 -0
- sage/misc/table.py +853 -0
- sage/monoids/all__sagemath_categories.py +1 -0
- sage/monoids/indexed_free_monoid.py +1071 -0
- sage/monoids/monoid.py +82 -0
- sage/numerical/all__sagemath_categories.py +1 -0
- sage/numerical/backends/all__sagemath_categories.py +1 -0
- sage/numerical/backends/generic_backend.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/numerical/backends/generic_backend.pxd +61 -0
- sage/numerical/backends/generic_backend.pyx +1893 -0
- sage/numerical/backends/generic_sdp_backend.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/numerical/backends/generic_sdp_backend.pxd +38 -0
- sage/numerical/backends/generic_sdp_backend.pyx +755 -0
- sage/parallel/all.py +6 -0
- sage/parallel/decorate.py +575 -0
- sage/parallel/map_reduce.py +1997 -0
- sage/parallel/multiprocessing_sage.py +76 -0
- sage/parallel/ncpus.py +35 -0
- sage/parallel/parallelism.py +364 -0
- sage/parallel/reference.py +47 -0
- sage/parallel/use_fork.py +333 -0
- sage/rings/abc.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/abc.pxd +31 -0
- sage/rings/abc.pyx +526 -0
- sage/rings/algebraic_closure_finite_field.py +1154 -0
- sage/rings/all__sagemath_categories.py +91 -0
- sage/rings/big_oh.py +227 -0
- sage/rings/continued_fraction.py +2754 -0
- sage/rings/continued_fraction_gosper.py +220 -0
- sage/rings/factorint.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/factorint.pyx +295 -0
- sage/rings/fast_arith.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/fast_arith.pxd +21 -0
- sage/rings/fast_arith.pyx +535 -0
- sage/rings/finite_rings/all__sagemath_categories.py +9 -0
- sage/rings/finite_rings/conway_polynomials.py +542 -0
- sage/rings/finite_rings/element_base.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/finite_rings/element_base.pxd +12 -0
- sage/rings/finite_rings/element_base.pyx +1176 -0
- sage/rings/finite_rings/finite_field_base.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/finite_rings/finite_field_base.pxd +7 -0
- sage/rings/finite_rings/finite_field_base.pyx +2171 -0
- sage/rings/finite_rings/finite_field_constructor.py +827 -0
- sage/rings/finite_rings/finite_field_prime_modn.py +372 -0
- sage/rings/finite_rings/galois_group.py +154 -0
- sage/rings/finite_rings/hom_finite_field.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/finite_rings/hom_finite_field.pxd +23 -0
- sage/rings/finite_rings/hom_finite_field.pyx +856 -0
- sage/rings/finite_rings/hom_prime_finite_field.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/finite_rings/hom_prime_finite_field.pxd +15 -0
- sage/rings/finite_rings/hom_prime_finite_field.pyx +164 -0
- sage/rings/finite_rings/homset.py +357 -0
- sage/rings/finite_rings/integer_mod.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/finite_rings/integer_mod.pxd +56 -0
- sage/rings/finite_rings/integer_mod.pyx +4586 -0
- sage/rings/finite_rings/integer_mod_limits.h +11 -0
- sage/rings/finite_rings/integer_mod_ring.py +2044 -0
- sage/rings/finite_rings/residue_field.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/finite_rings/residue_field.pxd +30 -0
- sage/rings/finite_rings/residue_field.pyx +1811 -0
- sage/rings/finite_rings/stdint.pxd +19 -0
- sage/rings/fraction_field.py +1452 -0
- sage/rings/fraction_field_element.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/fraction_field_element.pyx +1357 -0
- sage/rings/function_field/all.py +7 -0
- sage/rings/function_field/all__sagemath_categories.py +2 -0
- sage/rings/function_field/constructor.py +218 -0
- sage/rings/function_field/element.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/function_field/element.pxd +11 -0
- sage/rings/function_field/element.pyx +1008 -0
- sage/rings/function_field/element_rational.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/function_field/element_rational.pyx +513 -0
- sage/rings/function_field/extensions.py +230 -0
- sage/rings/function_field/function_field.py +1468 -0
- sage/rings/function_field/function_field_rational.py +1005 -0
- sage/rings/function_field/ideal.py +1155 -0
- sage/rings/function_field/ideal_rational.py +629 -0
- sage/rings/function_field/jacobian_base.py +826 -0
- sage/rings/function_field/jacobian_hess.py +1053 -0
- sage/rings/function_field/jacobian_khuri_makdisi.py +1027 -0
- sage/rings/function_field/maps.py +1039 -0
- sage/rings/function_field/order.py +281 -0
- sage/rings/function_field/order_basis.py +586 -0
- sage/rings/function_field/order_rational.py +576 -0
- sage/rings/function_field/place.py +426 -0
- sage/rings/function_field/place_rational.py +181 -0
- sage/rings/generic.py +320 -0
- sage/rings/homset.py +332 -0
- sage/rings/ideal.py +1885 -0
- sage/rings/ideal_monoid.py +215 -0
- sage/rings/infinity.py +1890 -0
- sage/rings/integer.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/integer.pxd +45 -0
- sage/rings/integer.pyx +7874 -0
- sage/rings/integer_ring.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/integer_ring.pxd +8 -0
- sage/rings/integer_ring.pyx +1693 -0
- sage/rings/laurent_series_ring.py +931 -0
- sage/rings/laurent_series_ring_element.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/laurent_series_ring_element.pxd +11 -0
- sage/rings/laurent_series_ring_element.pyx +1927 -0
- sage/rings/lazy_series.py +7815 -0
- sage/rings/lazy_series_ring.py +4356 -0
- sage/rings/localization.py +1043 -0
- sage/rings/morphism.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/morphism.pxd +39 -0
- sage/rings/morphism.pyx +3299 -0
- sage/rings/multi_power_series_ring.py +1145 -0
- sage/rings/multi_power_series_ring_element.py +2184 -0
- sage/rings/noncommutative_ideals.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/noncommutative_ideals.pyx +423 -0
- sage/rings/number_field/all__sagemath_categories.py +1 -0
- sage/rings/number_field/number_field_base.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/number_field/number_field_base.pxd +8 -0
- sage/rings/number_field/number_field_base.pyx +507 -0
- sage/rings/number_field/number_field_element_base.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/number_field/number_field_element_base.pxd +6 -0
- sage/rings/number_field/number_field_element_base.pyx +36 -0
- sage/rings/number_field/number_field_ideal.py +3550 -0
- sage/rings/padics/all__sagemath_categories.py +4 -0
- sage/rings/padics/local_generic.py +1670 -0
- sage/rings/padics/local_generic_element.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/padics/local_generic_element.pxd +5 -0
- sage/rings/padics/local_generic_element.pyx +1017 -0
- sage/rings/padics/misc.py +256 -0
- sage/rings/padics/padic_generic.py +1911 -0
- sage/rings/padics/pow_computer.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/padics/pow_computer.pxd +38 -0
- sage/rings/padics/pow_computer.pyx +671 -0
- sage/rings/padics/precision_error.py +24 -0
- sage/rings/polynomial/all__sagemath_categories.py +25 -0
- sage/rings/polynomial/commutative_polynomial.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/commutative_polynomial.pxd +6 -0
- sage/rings/polynomial/commutative_polynomial.pyx +24 -0
- sage/rings/polynomial/cyclotomic.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/cyclotomic.pyx +404 -0
- sage/rings/polynomial/flatten.py +711 -0
- sage/rings/polynomial/ideal.py +102 -0
- sage/rings/polynomial/infinite_polynomial_element.py +1768 -0
- sage/rings/polynomial/infinite_polynomial_ring.py +1653 -0
- sage/rings/polynomial/laurent_polynomial.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/laurent_polynomial.pxd +18 -0
- sage/rings/polynomial/laurent_polynomial.pyx +2190 -0
- sage/rings/polynomial/laurent_polynomial_ideal.py +590 -0
- sage/rings/polynomial/laurent_polynomial_ring.py +832 -0
- sage/rings/polynomial/laurent_polynomial_ring_base.py +708 -0
- sage/rings/polynomial/multi_polynomial.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/multi_polynomial.pxd +12 -0
- sage/rings/polynomial/multi_polynomial.pyx +3082 -0
- sage/rings/polynomial/multi_polynomial_element.py +2570 -0
- sage/rings/polynomial/multi_polynomial_ideal.py +5771 -0
- sage/rings/polynomial/multi_polynomial_ring.py +947 -0
- sage/rings/polynomial/multi_polynomial_ring_base.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/multi_polynomial_ring_base.pxd +15 -0
- sage/rings/polynomial/multi_polynomial_ring_base.pyx +1855 -0
- sage/rings/polynomial/multi_polynomial_sequence.py +2204 -0
- sage/rings/polynomial/polydict.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/polydict.pxd +45 -0
- sage/rings/polynomial/polydict.pyx +2701 -0
- sage/rings/polynomial/polynomial_compiled.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/polynomial_compiled.pxd +59 -0
- sage/rings/polynomial/polynomial_compiled.pyx +509 -0
- sage/rings/polynomial/polynomial_element.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/polynomial_element.pxd +64 -0
- sage/rings/polynomial/polynomial_element.pyx +13255 -0
- sage/rings/polynomial/polynomial_element_generic.py +1637 -0
- sage/rings/polynomial/polynomial_fateman.py +97 -0
- sage/rings/polynomial/polynomial_quotient_ring.py +2465 -0
- sage/rings/polynomial/polynomial_quotient_ring_element.py +779 -0
- sage/rings/polynomial/polynomial_ring.py +3784 -0
- sage/rings/polynomial/polynomial_ring_constructor.py +1051 -0
- sage/rings/polynomial/polynomial_ring_homomorphism.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/polynomial_ring_homomorphism.pxd +5 -0
- sage/rings/polynomial/polynomial_ring_homomorphism.pyx +121 -0
- sage/rings/polynomial/polynomial_singular_interface.py +549 -0
- sage/rings/polynomial/symmetric_ideal.py +989 -0
- sage/rings/polynomial/symmetric_reduction.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/symmetric_reduction.pxd +8 -0
- sage/rings/polynomial/symmetric_reduction.pyx +669 -0
- sage/rings/polynomial/term_order.py +2279 -0
- sage/rings/polynomial/toy_buchberger.py +449 -0
- sage/rings/polynomial/toy_d_basis.py +387 -0
- sage/rings/polynomial/toy_variety.py +362 -0
- sage/rings/power_series_mpoly.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/power_series_mpoly.pxd +9 -0
- sage/rings/power_series_mpoly.pyx +161 -0
- sage/rings/power_series_poly.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/power_series_poly.pxd +10 -0
- sage/rings/power_series_poly.pyx +1317 -0
- sage/rings/power_series_ring.py +1441 -0
- sage/rings/power_series_ring_element.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/power_series_ring_element.pxd +12 -0
- sage/rings/power_series_ring_element.pyx +3028 -0
- sage/rings/puiseux_series_ring.py +487 -0
- sage/rings/puiseux_series_ring_element.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/puiseux_series_ring_element.pxd +7 -0
- sage/rings/puiseux_series_ring_element.pyx +1055 -0
- sage/rings/qqbar_decorators.py +167 -0
- sage/rings/quotient_ring.py +1598 -0
- sage/rings/quotient_ring_element.py +979 -0
- sage/rings/rational.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/rational.pxd +20 -0
- sage/rings/rational.pyx +4284 -0
- sage/rings/rational_field.py +1730 -0
- sage/rings/real_double.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/real_double.pxd +16 -0
- sage/rings/real_double.pyx +2218 -0
- sage/rings/real_lazy.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/real_lazy.pxd +30 -0
- sage/rings/real_lazy.pyx +1773 -0
- sage/rings/ring.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/ring.pxd +30 -0
- sage/rings/ring.pyx +850 -0
- sage/rings/semirings/all.py +3 -0
- sage/rings/semirings/non_negative_integer_semiring.py +107 -0
- sage/rings/semirings/tropical_mpolynomial.py +972 -0
- sage/rings/semirings/tropical_polynomial.py +997 -0
- sage/rings/semirings/tropical_semiring.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/semirings/tropical_semiring.pyx +676 -0
- sage/rings/semirings/tropical_variety.py +1701 -0
- sage/rings/sum_of_squares.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/sum_of_squares.pxd +3 -0
- sage/rings/sum_of_squares.pyx +336 -0
- sage/rings/tests.py +504 -0
- sage/schemes/affine/affine_homset.py +508 -0
- sage/schemes/affine/affine_morphism.py +1574 -0
- sage/schemes/affine/affine_point.py +460 -0
- sage/schemes/affine/affine_rational_point.py +308 -0
- sage/schemes/affine/affine_space.py +1264 -0
- sage/schemes/affine/affine_subscheme.py +592 -0
- sage/schemes/affine/all.py +25 -0
- sage/schemes/all__sagemath_categories.py +5 -0
- sage/schemes/generic/algebraic_scheme.py +2092 -0
- sage/schemes/generic/all.py +5 -0
- sage/schemes/generic/ambient_space.py +400 -0
- sage/schemes/generic/divisor.py +465 -0
- sage/schemes/generic/divisor_group.py +313 -0
- sage/schemes/generic/glue.py +84 -0
- sage/schemes/generic/homset.py +820 -0
- sage/schemes/generic/hypersurface.py +234 -0
- sage/schemes/generic/morphism.py +2107 -0
- sage/schemes/generic/point.py +237 -0
- sage/schemes/generic/scheme.py +1190 -0
- sage/schemes/generic/spec.py +199 -0
- sage/schemes/product_projective/all.py +6 -0
- sage/schemes/product_projective/homset.py +236 -0
- sage/schemes/product_projective/morphism.py +517 -0
- sage/schemes/product_projective/point.py +568 -0
- sage/schemes/product_projective/rational_point.py +550 -0
- sage/schemes/product_projective/space.py +1301 -0
- sage/schemes/product_projective/subscheme.py +466 -0
- sage/schemes/projective/all.py +24 -0
- sage/schemes/projective/proj_bdd_height.py +453 -0
- sage/schemes/projective/projective_homset.py +718 -0
- sage/schemes/projective/projective_morphism.py +2792 -0
- sage/schemes/projective/projective_point.py +1484 -0
- sage/schemes/projective/projective_rational_point.py +569 -0
- sage/schemes/projective/projective_space.py +2571 -0
- sage/schemes/projective/projective_subscheme.py +1574 -0
- sage/sets/all.py +17 -0
- sage/sets/cartesian_product.py +376 -0
- sage/sets/condition_set.py +525 -0
- sage/sets/disjoint_set.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/sets/disjoint_set.pxd +36 -0
- sage/sets/disjoint_set.pyx +998 -0
- sage/sets/disjoint_union_enumerated_sets.py +625 -0
- sage/sets/family.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/sets/family.pxd +12 -0
- sage/sets/family.pyx +1556 -0
- sage/sets/finite_enumerated_set.py +406 -0
- sage/sets/finite_set_map_cy.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/sets/finite_set_map_cy.pxd +34 -0
- sage/sets/finite_set_map_cy.pyx +708 -0
- sage/sets/finite_set_maps.py +591 -0
- sage/sets/image_set.py +448 -0
- sage/sets/integer_range.py +829 -0
- sage/sets/non_negative_integers.py +241 -0
- sage/sets/positive_integers.py +93 -0
- sage/sets/primes.py +188 -0
- sage/sets/real_set.py +2760 -0
- sage/sets/recursively_enumerated_set.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/sets/recursively_enumerated_set.pxd +31 -0
- sage/sets/recursively_enumerated_set.pyx +2082 -0
- sage/sets/set.py +2083 -0
- sage/sets/set_from_iterator.py +1021 -0
- sage/sets/totally_ordered_finite_set.py +329 -0
- sage/symbolic/all__sagemath_categories.py +1 -0
- sage/symbolic/function.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/symbolic/function.pxd +29 -0
- sage/symbolic/function.pyx +1488 -0
- sage/symbolic/symbols.py +56 -0
- sage/tests/all__sagemath_categories.py +1 -0
- sage/tests/cython.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/tests/cython.pyx +37 -0
- sage/tests/stl_vector.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/tests/stl_vector.pyx +171 -0
- sage/typeset/all.py +6 -0
- sage/typeset/ascii_art.py +295 -0
- sage/typeset/character_art.py +789 -0
- sage/typeset/character_art_factory.py +572 -0
- sage/typeset/symbols.py +334 -0
- sage/typeset/unicode_art.py +183 -0
- sage/typeset/unicode_characters.py +101 -0
sage/functions/wigner.py
ADDED
|
@@ -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
|