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
|
Binary file
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-categories
|
|
2
|
+
#*****************************************************************************
|
|
3
|
+
# Copyright (C) 2006 - 2011 Robert L. Miller <rlmillster@gmail.com>
|
|
4
|
+
# Copyright (C) 2009 Nicolas Borie <nicolas.borie@math.u-psud.fr>
|
|
5
|
+
#
|
|
6
|
+
# This program is free software: you can redistribute it and/or modify
|
|
7
|
+
# it under the terms of the GNU General Public License as published by
|
|
8
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
9
|
+
# (at your option) any later version.
|
|
10
|
+
# http://www.gnu.org/licenses/
|
|
11
|
+
#*****************************************************************************
|
|
12
|
+
|
|
13
|
+
from sage.groups.perm_gps.partn_ref.data_structures cimport *
|
|
14
|
+
|
|
15
|
+
# name of the three functions to customize
|
|
16
|
+
cdef int refine_list(PartitionStack *, void *, int *, int) noexcept
|
|
17
|
+
cdef int compare_lists(int *, int *, void *, void *, int) noexcept
|
|
18
|
+
cdef bint all_list_children_are_equivalent(PartitionStack *, void *) noexcept
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-categories
|
|
2
|
+
"""
|
|
3
|
+
Partition backtrack functions for lists -- a simple example of using partn_ref
|
|
4
|
+
|
|
5
|
+
EXAMPLES::
|
|
6
|
+
|
|
7
|
+
sage: import sage.groups.perm_gps.partn_ref.refinement_lists
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
#*****************************************************************************
|
|
11
|
+
# Copyright (C) 2006 - 2011 Robert L. Miller <rlmillster@gmail.com>
|
|
12
|
+
# Copyright (C) 2009 Nicolas Borie <nicolas.borie@math.u-psud.fr>
|
|
13
|
+
#
|
|
14
|
+
# This program is free software: you can redistribute it and/or modify
|
|
15
|
+
# it under the terms of the GNU General Public License as published by
|
|
16
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
17
|
+
# (at your option) any later version.
|
|
18
|
+
# https://www.gnu.org/licenses/
|
|
19
|
+
#*****************************************************************************
|
|
20
|
+
|
|
21
|
+
from cysignals.memory cimport sig_malloc, sig_free
|
|
22
|
+
|
|
23
|
+
from sage.groups.perm_gps.partn_ref.data_structures cimport *
|
|
24
|
+
from sage.groups.perm_gps.partn_ref.double_coset cimport double_coset, int_cmp
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def is_isomorphic(self, other):
|
|
28
|
+
r"""
|
|
29
|
+
Return the bijection as a permutation if two lists are isomorphic, return
|
|
30
|
+
``False`` otherwise.
|
|
31
|
+
|
|
32
|
+
EXAMPLES::
|
|
33
|
+
|
|
34
|
+
sage: from sage.groups.perm_gps.partn_ref.refinement_lists import is_isomorphic
|
|
35
|
+
sage: is_isomorphic([0,0,1],[1,0,0])
|
|
36
|
+
[1, 2, 0]
|
|
37
|
+
"""
|
|
38
|
+
cdef int i, n = len(self)
|
|
39
|
+
cdef PartitionStack *part
|
|
40
|
+
cdef int *output
|
|
41
|
+
cdef int *ordering
|
|
42
|
+
part = PS_new(n, 1)
|
|
43
|
+
ordering = <int *> sig_malloc((len(self)) * sizeof(int))
|
|
44
|
+
output = <int *> sig_malloc((len(self)) * sizeof(int))
|
|
45
|
+
if part is NULL or ordering is NULL or output is NULL:
|
|
46
|
+
PS_dealloc(part)
|
|
47
|
+
sig_free(ordering)
|
|
48
|
+
sig_free(output)
|
|
49
|
+
raise MemoryError
|
|
50
|
+
for i from 0 <= i < (len(self)):
|
|
51
|
+
ordering[i] = i
|
|
52
|
+
|
|
53
|
+
cdef bint isomorphic = double_coset(<void *> self, <void *> other, part, ordering, (len(self)), &all_list_children_are_equivalent, &refine_list, &compare_lists, NULL, NULL, output)
|
|
54
|
+
|
|
55
|
+
PS_dealloc(part)
|
|
56
|
+
sig_free(ordering)
|
|
57
|
+
if isomorphic:
|
|
58
|
+
output_py = [output[i] for i from 0 <= i < (len(self))]
|
|
59
|
+
else:
|
|
60
|
+
output_py = False
|
|
61
|
+
sig_free(output)
|
|
62
|
+
return output_py
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
cdef bint all_list_children_are_equivalent(PartitionStack *PS, void *S) noexcept:
|
|
66
|
+
return 0
|
|
67
|
+
|
|
68
|
+
cdef int refine_list(PartitionStack *PS, void *S, int *cells_to_refine_by, int ctrb_len) noexcept:
|
|
69
|
+
return 0
|
|
70
|
+
|
|
71
|
+
cdef int compare_lists(int *gamma_1, int *gamma_2, void *S1, void *S2, int degree) noexcept:
|
|
72
|
+
r"""
|
|
73
|
+
Compare two lists according to the lexicographic order.
|
|
74
|
+
"""
|
|
75
|
+
cdef list MS1 = <list> S1
|
|
76
|
+
cdef list MS2 = <list> S2
|
|
77
|
+
cdef int i, j
|
|
78
|
+
for i in range(degree):
|
|
79
|
+
j = int_cmp(MS1[gamma_1[i]], MS2[gamma_2[i]])
|
|
80
|
+
if j != 0:
|
|
81
|
+
return j
|
|
82
|
+
return 0
|
|
Binary file
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-categories
|
|
2
|
+
#*****************************************************************************
|
|
3
|
+
# Copyright (C) 2006 - 2011 Robert L. Miller <rlmillster@gmail.com>
|
|
4
|
+
#
|
|
5
|
+
# This program is free software: you can redistribute it and/or modify
|
|
6
|
+
# it under the terms of the GNU General Public License as published by
|
|
7
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
8
|
+
# (at your option) any later version.
|
|
9
|
+
# http://www.gnu.org/licenses/
|
|
10
|
+
#*****************************************************************************
|
|
11
|
+
|
|
12
|
+
from sage.groups.perm_gps.partn_ref.data_structures cimport *
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
cdef class PythonPartitionStack:
|
|
16
|
+
cdef PartitionStack *c_ps
|
|
@@ -0,0 +1,564 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-categories
|
|
2
|
+
"""
|
|
3
|
+
Python interface to partition backtrack functions
|
|
4
|
+
|
|
5
|
+
EXAMPLES::
|
|
6
|
+
|
|
7
|
+
sage: import sage.groups.perm_gps.partn_ref.refinement_python
|
|
8
|
+
|
|
9
|
+
This module provides Python frontends to the Cython-based partition backtrack
|
|
10
|
+
functions. This allows one to write the three input functions
|
|
11
|
+
(all_children_are_equivalent, refine_and_return_invariant, and compare_structures)
|
|
12
|
+
in pure Python, and still use the Cython algorithms. Experimentation with
|
|
13
|
+
specific partition backtrack implementations no longer requires compilation, as
|
|
14
|
+
the input functions can be dynamically changed at runtime.
|
|
15
|
+
|
|
16
|
+
.. NOTE::
|
|
17
|
+
|
|
18
|
+
This is not intended for production quality implementations of partition
|
|
19
|
+
refinement, but instead for experimentation, learning, and use of the
|
|
20
|
+
Python debugger.
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
#*****************************************************************************
|
|
24
|
+
# Copyright (C) 2006 - 2011 Robert L. Miller <rlmillster@gmail.com>
|
|
25
|
+
#
|
|
26
|
+
# This program is free software: you can redistribute it and/or modify
|
|
27
|
+
# it under the terms of the GNU General Public License as published by
|
|
28
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
29
|
+
# (at your option) any later version.
|
|
30
|
+
# https://www.gnu.org/licenses/
|
|
31
|
+
#*****************************************************************************
|
|
32
|
+
|
|
33
|
+
from cysignals.memory cimport sig_malloc, sig_free
|
|
34
|
+
|
|
35
|
+
from sage.groups.perm_gps.partn_ref.data_structures cimport *
|
|
36
|
+
from sage.groups.perm_gps.partn_ref.automorphism_group_canonical_label cimport (
|
|
37
|
+
get_aut_gp_and_can_lab, aut_gp_and_can_lab,
|
|
38
|
+
deallocate_agcl_output)
|
|
39
|
+
from sage.groups.perm_gps.partn_ref.double_coset cimport double_coset
|
|
40
|
+
from sage.rings.integer cimport Integer
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
cdef class PythonPartitionStack:
|
|
44
|
+
"""
|
|
45
|
+
Instances of this class wrap a (Cython) PartitionStack.
|
|
46
|
+
"""
|
|
47
|
+
|
|
48
|
+
def __init__(self, int n):
|
|
49
|
+
"""
|
|
50
|
+
Initialize a PartitionStack.
|
|
51
|
+
|
|
52
|
+
EXAMPLES::
|
|
53
|
+
|
|
54
|
+
sage: from sage.groups.perm_gps.partn_ref.refinement_python import PythonPartitionStack
|
|
55
|
+
sage: P = PythonPartitionStack(7) # implicit doctest
|
|
56
|
+
"""
|
|
57
|
+
self.c_ps = PS_new(n, 1)
|
|
58
|
+
|
|
59
|
+
def __dealloc__(self):
|
|
60
|
+
"""
|
|
61
|
+
Deallocate the PartitionStack.
|
|
62
|
+
|
|
63
|
+
EXAMPLES::
|
|
64
|
+
|
|
65
|
+
sage: from sage.groups.perm_gps.partn_ref.refinement_python import PythonPartitionStack
|
|
66
|
+
sage: P = PythonPartitionStack(7)
|
|
67
|
+
sage: del(P) # implicit doctest
|
|
68
|
+
"""
|
|
69
|
+
PS_dealloc(self.c_ps)
|
|
70
|
+
|
|
71
|
+
def __repr__(self):
|
|
72
|
+
"""
|
|
73
|
+
Return a string representing the stack.
|
|
74
|
+
|
|
75
|
+
EXAMPLES::
|
|
76
|
+
|
|
77
|
+
sage: from sage.groups.perm_gps.partn_ref.refinement_python import PythonPartitionStack
|
|
78
|
+
sage: P = PythonPartitionStack(7)
|
|
79
|
+
sage: P # implicit doctest
|
|
80
|
+
PythonPartitionStack of degree 7 and depth 0.
|
|
81
|
+
"""
|
|
82
|
+
return "PythonPartitionStack of degree %d and depth %d." % (self.c_ps.degree, self.c_ps.depth)
|
|
83
|
+
|
|
84
|
+
def display(self):
|
|
85
|
+
"""
|
|
86
|
+
Print a representation of the stack.
|
|
87
|
+
|
|
88
|
+
EXAMPLES::
|
|
89
|
+
|
|
90
|
+
sage: from sage.groups.perm_gps.partn_ref.refinement_python import PythonPartitionStack
|
|
91
|
+
sage: P = PythonPartitionStack(7)
|
|
92
|
+
sage: P.depth(1)
|
|
93
|
+
1
|
|
94
|
+
sage: P.set_level(2,1)
|
|
95
|
+
sage: P.display()
|
|
96
|
+
(0 1 2 3 4 5 6)
|
|
97
|
+
(0 1 2|3 4 5 6)
|
|
98
|
+
"""
|
|
99
|
+
PS_print(self.c_ps)
|
|
100
|
+
|
|
101
|
+
def is_discrete(self):
|
|
102
|
+
"""
|
|
103
|
+
Return whether the deepest partition consists only of singleton cells.
|
|
104
|
+
|
|
105
|
+
EXAMPLES::
|
|
106
|
+
|
|
107
|
+
sage: from sage.groups.perm_gps.partn_ref.refinement_python import PythonPartitionStack
|
|
108
|
+
sage: P = PythonPartitionStack(7)
|
|
109
|
+
sage: P.is_discrete()
|
|
110
|
+
False
|
|
111
|
+
sage: [P.set_level(i,0) for i in range(7)]
|
|
112
|
+
[None, None, None, None, None, None, None]
|
|
113
|
+
sage: P.is_discrete()
|
|
114
|
+
True
|
|
115
|
+
"""
|
|
116
|
+
return PS_is_discrete(self.c_ps)
|
|
117
|
+
|
|
118
|
+
def num_cells(self):
|
|
119
|
+
"""
|
|
120
|
+
Return the number of cells in the deepest partition.
|
|
121
|
+
|
|
122
|
+
EXAMPLES::
|
|
123
|
+
|
|
124
|
+
sage: from sage.groups.perm_gps.partn_ref.refinement_python import PythonPartitionStack
|
|
125
|
+
sage: P = PythonPartitionStack(7)
|
|
126
|
+
sage: P.num_cells()
|
|
127
|
+
1
|
|
128
|
+
"""
|
|
129
|
+
return PS_num_cells(self.c_ps)
|
|
130
|
+
|
|
131
|
+
def move_min_to_front(self, int start, int end):
|
|
132
|
+
"""
|
|
133
|
+
Make sure that the first element of the segment of entries i with
|
|
134
|
+
start <= i <= end is minimal.
|
|
135
|
+
|
|
136
|
+
EXAMPLES::
|
|
137
|
+
|
|
138
|
+
sage: from sage.groups.perm_gps.partn_ref.refinement_python import PythonPartitionStack
|
|
139
|
+
sage: P = PythonPartitionStack(7)
|
|
140
|
+
sage: P.set_entry(1,0)
|
|
141
|
+
sage: P.set_entry(0,1)
|
|
142
|
+
sage: P.display()
|
|
143
|
+
(1 0 2 3 4 5 6)
|
|
144
|
+
sage: P.move_min_to_front(0,1)
|
|
145
|
+
sage: P.display()
|
|
146
|
+
(0 1 2 3 4 5 6)
|
|
147
|
+
"""
|
|
148
|
+
PS_move_min_to_front(self.c_ps, start, end)
|
|
149
|
+
|
|
150
|
+
def __copy__(self):
|
|
151
|
+
"""
|
|
152
|
+
|
|
153
|
+
EXAMPLES::
|
|
154
|
+
|
|
155
|
+
sage: from sage.groups.perm_gps.partn_ref.refinement_python import PythonPartitionStack
|
|
156
|
+
sage: P = PythonPartitionStack(7)
|
|
157
|
+
sage: Q = copy(P)
|
|
158
|
+
sage: P.display()
|
|
159
|
+
(0 1 2 3 4 5 6)
|
|
160
|
+
sage: Q.display()
|
|
161
|
+
(0 1 2 3 4 5 6)
|
|
162
|
+
"""
|
|
163
|
+
cdef PythonPartitionStack cpy
|
|
164
|
+
cpy = PythonPartitionStack(self.c_ps.degree)
|
|
165
|
+
PS_copy_from_to(self.c_ps, cpy.c_ps)
|
|
166
|
+
return cpy
|
|
167
|
+
|
|
168
|
+
def clear(self):
|
|
169
|
+
"""
|
|
170
|
+
Set the current partition to the first shallower one, i.e. forget about
|
|
171
|
+
boundaries between cells that are new to the current level.
|
|
172
|
+
|
|
173
|
+
EXAMPLES::
|
|
174
|
+
|
|
175
|
+
sage: from sage.groups.perm_gps.partn_ref.refinement_python import PythonPartitionStack
|
|
176
|
+
sage: P = PythonPartitionStack(7)
|
|
177
|
+
sage: P.depth(1)
|
|
178
|
+
1
|
|
179
|
+
sage: P.set_level(2,1)
|
|
180
|
+
sage: P.display()
|
|
181
|
+
(0 1 2 3 4 5 6)
|
|
182
|
+
(0 1 2|3 4 5 6)
|
|
183
|
+
sage: P.clear()
|
|
184
|
+
sage: P.display()
|
|
185
|
+
(0 1 2 3 4 5 6)
|
|
186
|
+
(0 1 2 3 4 5 6)
|
|
187
|
+
"""
|
|
188
|
+
PS_clear(self.c_ps)
|
|
189
|
+
|
|
190
|
+
def entries(self):
|
|
191
|
+
"""
|
|
192
|
+
Return the entries array as a Python list of ints.
|
|
193
|
+
|
|
194
|
+
EXAMPLES::
|
|
195
|
+
|
|
196
|
+
sage: from sage.groups.perm_gps.partn_ref.refinement_python import PythonPartitionStack
|
|
197
|
+
sage: P = PythonPartitionStack(7)
|
|
198
|
+
sage: P.entries()
|
|
199
|
+
[0, 1, 2, 3, 4, 5, 6]
|
|
200
|
+
sage: P.levels()
|
|
201
|
+
[7, 7, 7, 7, 7, 7, -1]
|
|
202
|
+
"""
|
|
203
|
+
cdef int i
|
|
204
|
+
return [self.c_ps.entries[i] for i from 0 <= i < self.c_ps.degree]
|
|
205
|
+
|
|
206
|
+
def set_entry(self, int i, int entry):
|
|
207
|
+
"""
|
|
208
|
+
Set the `i`-th entry of the entries array to entry.
|
|
209
|
+
|
|
210
|
+
EXAMPLES::
|
|
211
|
+
|
|
212
|
+
sage: from sage.groups.perm_gps.partn_ref.refinement_python import PythonPartitionStack
|
|
213
|
+
sage: P = PythonPartitionStack(7)
|
|
214
|
+
sage: P.set_entry(1,0)
|
|
215
|
+
sage: P.set_entry(0,1)
|
|
216
|
+
sage: P.display()
|
|
217
|
+
(1 0 2 3 4 5 6)
|
|
218
|
+
"""
|
|
219
|
+
self.c_ps.entries[i] = entry
|
|
220
|
+
|
|
221
|
+
def get_entry(self, int i):
|
|
222
|
+
"""
|
|
223
|
+
Get the `i`-th entry of the entries array.
|
|
224
|
+
|
|
225
|
+
EXAMPLES::
|
|
226
|
+
|
|
227
|
+
sage: from sage.groups.perm_gps.partn_ref.refinement_python import PythonPartitionStack
|
|
228
|
+
sage: P = PythonPartitionStack(7)
|
|
229
|
+
sage: P.get_entry(0)
|
|
230
|
+
0
|
|
231
|
+
"""
|
|
232
|
+
return self.c_ps.entries[i]
|
|
233
|
+
|
|
234
|
+
def levels(self):
|
|
235
|
+
"""
|
|
236
|
+
Return the levels array as a Python list of ints.
|
|
237
|
+
|
|
238
|
+
EXAMPLES::
|
|
239
|
+
|
|
240
|
+
sage: from sage.groups.perm_gps.partn_ref.refinement_python import PythonPartitionStack
|
|
241
|
+
sage: P = PythonPartitionStack(7)
|
|
242
|
+
sage: P.entries()
|
|
243
|
+
[0, 1, 2, 3, 4, 5, 6]
|
|
244
|
+
sage: P.levels()
|
|
245
|
+
[7, 7, 7, 7, 7, 7, -1]
|
|
246
|
+
"""
|
|
247
|
+
return [self.c_ps.levels[i] for i from 0 <= i < self.c_ps.degree]
|
|
248
|
+
|
|
249
|
+
def set_level(self, int i, int level):
|
|
250
|
+
"""
|
|
251
|
+
Set the `i`-th entry of the levels array to entry.
|
|
252
|
+
|
|
253
|
+
EXAMPLES::
|
|
254
|
+
|
|
255
|
+
sage: from sage.groups.perm_gps.partn_ref.refinement_python import PythonPartitionStack
|
|
256
|
+
sage: P = PythonPartitionStack(7)
|
|
257
|
+
sage: P.depth(1)
|
|
258
|
+
1
|
|
259
|
+
sage: P.set_level(2,1)
|
|
260
|
+
sage: P.display()
|
|
261
|
+
(0 1 2 3 4 5 6)
|
|
262
|
+
(0 1 2|3 4 5 6)
|
|
263
|
+
"""
|
|
264
|
+
self.c_ps.levels[i] = level
|
|
265
|
+
|
|
266
|
+
def get_level(self, int i):
|
|
267
|
+
"""
|
|
268
|
+
Get the `i`-th entry of the levels array.
|
|
269
|
+
|
|
270
|
+
EXAMPLES::
|
|
271
|
+
|
|
272
|
+
sage: from sage.groups.perm_gps.partn_ref.refinement_python import PythonPartitionStack
|
|
273
|
+
sage: P = PythonPartitionStack(7)
|
|
274
|
+
sage: P.get_level(0)
|
|
275
|
+
7
|
|
276
|
+
"""
|
|
277
|
+
return self.c_ps.levels[i]
|
|
278
|
+
|
|
279
|
+
def depth(self, new=None):
|
|
280
|
+
"""
|
|
281
|
+
Return the depth of the deepest partition in the stack, setting it to
|
|
282
|
+
new if new is not None.
|
|
283
|
+
|
|
284
|
+
EXAMPLES::
|
|
285
|
+
|
|
286
|
+
sage: from sage.groups.perm_gps.partn_ref.refinement_python import PythonPartitionStack
|
|
287
|
+
sage: P = PythonPartitionStack(7)
|
|
288
|
+
sage: P.depth()
|
|
289
|
+
0
|
|
290
|
+
"""
|
|
291
|
+
if new is not None:
|
|
292
|
+
self.c_ps.depth = new
|
|
293
|
+
return self.c_ps.depth
|
|
294
|
+
|
|
295
|
+
def degree(self, new=None):
|
|
296
|
+
"""
|
|
297
|
+
Return the degree of the partition stack, setting it to
|
|
298
|
+
new if new is not None.
|
|
299
|
+
|
|
300
|
+
EXAMPLES::
|
|
301
|
+
|
|
302
|
+
sage: from sage.groups.perm_gps.partn_ref.refinement_python import PythonPartitionStack
|
|
303
|
+
sage: P = PythonPartitionStack(7)
|
|
304
|
+
sage: P.degree()
|
|
305
|
+
7
|
|
306
|
+
"""
|
|
307
|
+
if new is not None:
|
|
308
|
+
self.c_ps.degree = new
|
|
309
|
+
return self.c_ps.degree
|
|
310
|
+
|
|
311
|
+
def partition(self, int k):
|
|
312
|
+
"""
|
|
313
|
+
Return the partition at level k, as a Python list of lists.
|
|
314
|
+
|
|
315
|
+
EXAMPLES::
|
|
316
|
+
|
|
317
|
+
sage: from sage.groups.perm_gps.partn_ref.refinement_python import PythonPartitionStack
|
|
318
|
+
sage: P = PythonPartitionStack(7)
|
|
319
|
+
sage: P.depth(1)
|
|
320
|
+
1
|
|
321
|
+
sage: P.set_level(2,1)
|
|
322
|
+
sage: P.partition(0)
|
|
323
|
+
[[0, 1, 2, 3, 4, 5, 6]]
|
|
324
|
+
sage: P.partition(1)
|
|
325
|
+
[[0, 1, 2], [3, 4, 5, 6]]
|
|
326
|
+
"""
|
|
327
|
+
cdef int i
|
|
328
|
+
cdef list partition = [], cell = []
|
|
329
|
+
for i from 0 <= i < self.c_ps.degree:
|
|
330
|
+
cell.append(self.c_ps.entries[i])
|
|
331
|
+
if self.c_ps.levels[i] <= k:
|
|
332
|
+
partition.append(cell)
|
|
333
|
+
if i < self.c_ps.degree:
|
|
334
|
+
cell = []
|
|
335
|
+
return partition
|
|
336
|
+
|
|
337
|
+
|
|
338
|
+
class PythonObjectWrapper:
|
|
339
|
+
"""
|
|
340
|
+
Instances of this class wrap a Python object and the refinement functions.
|
|
341
|
+
"""
|
|
342
|
+
def __init__(self, obj, acae_fn, rari_fn, cs_fn, int degree):
|
|
343
|
+
"""
|
|
344
|
+
Initialize a PythonObjectWrapper.
|
|
345
|
+
|
|
346
|
+
EXAMPLES::
|
|
347
|
+
|
|
348
|
+
sage: from sage.groups.perm_gps.partn_ref.refinement_python import PythonObjectWrapper
|
|
349
|
+
sage: def acae(a, b):
|
|
350
|
+
....: return 0
|
|
351
|
+
sage: def rari(a, b, c):
|
|
352
|
+
....: return 0
|
|
353
|
+
sage: def cs(a, b, c, d, e):
|
|
354
|
+
....: return 0
|
|
355
|
+
sage: from sage.groups.perm_gps.partn_ref.refinement_python import PythonObjectWrapper
|
|
356
|
+
sage: P = PythonObjectWrapper(None, acae, rari, cs, 7) # implicit doctest
|
|
357
|
+
sage: P.obj
|
|
358
|
+
sage: P.degree
|
|
359
|
+
7
|
|
360
|
+
sage: P.acae_fn
|
|
361
|
+
<function acae at ...>
|
|
362
|
+
sage: P.rari_fn
|
|
363
|
+
<function rari at ...>
|
|
364
|
+
sage: P.cs_fn
|
|
365
|
+
<function cs at ...>
|
|
366
|
+
"""
|
|
367
|
+
self.degree = degree
|
|
368
|
+
self.obj = obj
|
|
369
|
+
self.acae_fn = acae_fn
|
|
370
|
+
self.rari_fn = rari_fn
|
|
371
|
+
self.cs_fn = cs_fn
|
|
372
|
+
|
|
373
|
+
|
|
374
|
+
cdef bint all_children_are_equivalent_python(PartitionStack *PS, void *S) noexcept:
|
|
375
|
+
"""
|
|
376
|
+
Python conversion of all_children_are_equivalent function.
|
|
377
|
+
"""
|
|
378
|
+
cdef PythonPartitionStack Py_PS = PythonPartitionStack(PS.degree)
|
|
379
|
+
cdef object S_obj = <object> S
|
|
380
|
+
PS_copy_from_to(PS, Py_PS.c_ps)
|
|
381
|
+
return S_obj.acae_fn(Py_PS, S_obj.obj)
|
|
382
|
+
|
|
383
|
+
cdef int refine_and_return_invariant_python(PartitionStack *PS, void *S, int *cells_to_refine_by, int ctrb_len) noexcept:
|
|
384
|
+
"""
|
|
385
|
+
Python conversion of refine_and_return_invariant function.
|
|
386
|
+
"""
|
|
387
|
+
cdef PythonPartitionStack Py_PS = PythonPartitionStack(PS.degree)
|
|
388
|
+
cdef object S_obj = <object> S
|
|
389
|
+
PS_copy_from_to(PS, Py_PS.c_ps)
|
|
390
|
+
cdef int i
|
|
391
|
+
cdef list ctrb_py = [cells_to_refine_by[i] for i from 0 <= i < ctrb_len]
|
|
392
|
+
return S_obj.rari_fn(Py_PS, S_obj.obj, ctrb_py)
|
|
393
|
+
|
|
394
|
+
cdef int compare_structures_python(int *gamma_1, int *gamma_2, void *S1, void *S2, int degree) noexcept:
|
|
395
|
+
"""
|
|
396
|
+
Python conversion of compare_structures function.
|
|
397
|
+
"""
|
|
398
|
+
cdef int i
|
|
399
|
+
cdef object S1_obj = <object> S1, S2_obj = <object> S2
|
|
400
|
+
cdef list gamma_1_py = [gamma_1[i] for i from 0 <= i < degree]
|
|
401
|
+
cdef list gamma_2_py = [gamma_2[i] for i from 0 <= i < degree]
|
|
402
|
+
return S1_obj.cs_fn(gamma_1_py, gamma_2_py, S1_obj.obj, S2_obj.obj, degree)
|
|
403
|
+
|
|
404
|
+
|
|
405
|
+
def aut_gp_and_can_lab_python(S, partition, n,
|
|
406
|
+
all_children_are_equivalent,
|
|
407
|
+
refine_and_return_invariant,
|
|
408
|
+
compare_structures,
|
|
409
|
+
canonical_label, base, order):
|
|
410
|
+
"""
|
|
411
|
+
Call the automorphism group and canonical label function.
|
|
412
|
+
|
|
413
|
+
INPUT:
|
|
414
|
+
|
|
415
|
+
- ``S`` -- the object to examine
|
|
416
|
+
- ``partition`` -- an ordered partition, as a list of lists
|
|
417
|
+
- ``n`` -- the degree of the automorphism group to be computed
|
|
418
|
+
|
|
419
|
+
::
|
|
420
|
+
|
|
421
|
+
all_children_are_equivalent -- Python function of "signature":
|
|
422
|
+
bool all_children_are_equivalent(PythonPartitionStack, object)
|
|
423
|
+
refine_and_return_invariant -- Python function of "signature":
|
|
424
|
+
int refine_and_return_invariant(PythonPartitionStack, object, list)
|
|
425
|
+
compare_structures -- Python function of "signature":
|
|
426
|
+
int compare_structures(list, list, object, object)
|
|
427
|
+
(see automorphism_group_canonical_label.pyx for more documentation)
|
|
428
|
+
|
|
429
|
+
::
|
|
430
|
+
|
|
431
|
+
canonical_label -- boolean; whether to search for a canonical label
|
|
432
|
+
base -- boolean; whether to return a base for the automorphism group
|
|
433
|
+
order -- boolean; whether to return the order of the automorphism group
|
|
434
|
+
|
|
435
|
+
EXAMPLES::
|
|
436
|
+
|
|
437
|
+
sage: from sage.groups.perm_gps.partn_ref.refinement_python import aut_gp_and_can_lab_python
|
|
438
|
+
sage: def acae(a, b):
|
|
439
|
+
....: return 0
|
|
440
|
+
sage: def rari(a, b, c):
|
|
441
|
+
....: return 0
|
|
442
|
+
sage: def cs(a, b, c, d, e):
|
|
443
|
+
....: return 0
|
|
444
|
+
sage: aut_gp_and_can_lab_python(None, [[0,1,2,3],[4,5]], 6, acae, rari, cs, True, True, True)
|
|
445
|
+
([[0, 1, 3, 2, 4, 5],
|
|
446
|
+
[0, 2, 1, 3, 4, 5],
|
|
447
|
+
[1, 0, 2, 3, 4, 5],
|
|
448
|
+
[0, 1, 2, 3, 5, 4]],
|
|
449
|
+
[0, 1, 2, 3, 4, 5],
|
|
450
|
+
[4, 0, 1, 2],
|
|
451
|
+
48)
|
|
452
|
+
sage: factorial(4)*factorial(2)
|
|
453
|
+
48
|
|
454
|
+
"""
|
|
455
|
+
obj_wrapper = PythonObjectWrapper(S, all_children_are_equivalent, refine_and_return_invariant, compare_structures, n)
|
|
456
|
+
cdef aut_gp_and_can_lab *output
|
|
457
|
+
cdef int i, j
|
|
458
|
+
cdef Integer I
|
|
459
|
+
|
|
460
|
+
cdef PartitionStack *part = PS_from_list(partition)
|
|
461
|
+
if part is NULL:
|
|
462
|
+
raise MemoryError
|
|
463
|
+
|
|
464
|
+
output = get_aut_gp_and_can_lab(<void *> obj_wrapper, part, n,
|
|
465
|
+
&all_children_are_equivalent_python,
|
|
466
|
+
&refine_and_return_invariant_python,
|
|
467
|
+
&compare_structures_python,
|
|
468
|
+
canonical_label, NULL, NULL, NULL)
|
|
469
|
+
|
|
470
|
+
list_of_gens = []
|
|
471
|
+
for i in range(output.num_gens):
|
|
472
|
+
list_of_gens.append([output.generators[j+i*n] for j in range(n)])
|
|
473
|
+
return_tuple = [list_of_gens]
|
|
474
|
+
if canonical_label:
|
|
475
|
+
return_tuple.append([output.relabeling[i] for i in range(n)])
|
|
476
|
+
if base:
|
|
477
|
+
return_tuple.append([output.group.base_orbits[i][0] for i from 0 <= i < output.group.base_size])
|
|
478
|
+
if order:
|
|
479
|
+
I = Integer()
|
|
480
|
+
SC_order(output.group, 0, I.value)
|
|
481
|
+
return_tuple.append(I)
|
|
482
|
+
PS_dealloc(part)
|
|
483
|
+
deallocate_agcl_output(output)
|
|
484
|
+
if len(return_tuple) == 1:
|
|
485
|
+
return return_tuple[0]
|
|
486
|
+
else:
|
|
487
|
+
return tuple(return_tuple)
|
|
488
|
+
|
|
489
|
+
|
|
490
|
+
def double_coset_python(S1, S2, partition1, ordering2, n,
|
|
491
|
+
all_children_are_equivalent,
|
|
492
|
+
refine_and_return_invariant,
|
|
493
|
+
compare_structures):
|
|
494
|
+
"""
|
|
495
|
+
Call the double coset function.
|
|
496
|
+
|
|
497
|
+
INPUT:
|
|
498
|
+
|
|
499
|
+
- ``S1``, ``S2`` -- the objects to examine
|
|
500
|
+
- ``partition1`` -- an ordered partition, as a list of lists
|
|
501
|
+
- ``ordering2`` -- represents a partition of the points of ``S2``, as a relabeling of ``partition1``
|
|
502
|
+
- ``n`` -- the degree
|
|
503
|
+
|
|
504
|
+
::
|
|
505
|
+
|
|
506
|
+
all_children_are_equivalent -- Python function of "signature":
|
|
507
|
+
bool all_children_are_equivalent(PythonPartitionStack, object)
|
|
508
|
+
refine_and_return_invariant -- Python function of "signature":
|
|
509
|
+
int refine_and_return_invariant(PythonPartitionStack, object, list)
|
|
510
|
+
compare_structures -- Python function of "signature":
|
|
511
|
+
int compare_structures(list, list, object, object)
|
|
512
|
+
(see double_coset.pyx for more documentation)
|
|
513
|
+
|
|
514
|
+
EXAMPLES::
|
|
515
|
+
|
|
516
|
+
sage: from sage.groups.perm_gps.partn_ref.refinement_python import double_coset_python
|
|
517
|
+
sage: def acae(a, b):
|
|
518
|
+
....: return 0
|
|
519
|
+
sage: def rari(a, b, c):
|
|
520
|
+
....: return 0
|
|
521
|
+
sage: def cs(a, b, c, d, e):
|
|
522
|
+
....: return 0
|
|
523
|
+
sage: double_coset_python(None, None, [[0,1,2,3],[4,5]], [2,3,1,5,0,4], 6, acae, rari, cs)
|
|
524
|
+
[1, 2, 3, 5, 0, 4]
|
|
525
|
+
|
|
526
|
+
sage: def compare_lists(p1, p2, l1, l2, deg):
|
|
527
|
+
....: for i in range(len(l1)):
|
|
528
|
+
....: a1 = l1[p1[i]]
|
|
529
|
+
....: a2 = l2[p2[i]]
|
|
530
|
+
....: if a1 < a2: return -1
|
|
531
|
+
....: if a1 > a2: return 1
|
|
532
|
+
....: return 0
|
|
533
|
+
|
|
534
|
+
sage: double_coset_python([0,0,1], [1,0,0], [[0,1,2]], [0,1,2], 3, acae, rari, compare_lists)
|
|
535
|
+
[1, 2, 0]
|
|
536
|
+
"""
|
|
537
|
+
obj_wrapper1 = PythonObjectWrapper(S1, all_children_are_equivalent, refine_and_return_invariant, compare_structures, n)
|
|
538
|
+
obj_wrapper2 = PythonObjectWrapper(S2, all_children_are_equivalent, refine_and_return_invariant, compare_structures, n)
|
|
539
|
+
|
|
540
|
+
cdef PartitionStack *part = PS_from_list(partition1)
|
|
541
|
+
cdef int *ordering = <int *> sig_malloc(n * sizeof(int))
|
|
542
|
+
cdef int *output = <int *> sig_malloc(n * sizeof(int))
|
|
543
|
+
if part is NULL or ordering is NULL or output is NULL:
|
|
544
|
+
PS_dealloc(part)
|
|
545
|
+
sig_free(ordering)
|
|
546
|
+
sig_free(output)
|
|
547
|
+
raise MemoryError
|
|
548
|
+
for i from 0 <= i < n:
|
|
549
|
+
ordering[i] = ordering2[i]
|
|
550
|
+
|
|
551
|
+
cdef bint isomorphic = double_coset(<void *> obj_wrapper1, <void *> obj_wrapper2,
|
|
552
|
+
part, ordering, n,
|
|
553
|
+
&all_children_are_equivalent_python,
|
|
554
|
+
&refine_and_return_invariant_python,
|
|
555
|
+
&compare_structures_python, NULL, NULL, output)
|
|
556
|
+
|
|
557
|
+
PS_dealloc(part)
|
|
558
|
+
sig_free(ordering)
|
|
559
|
+
if isomorphic:
|
|
560
|
+
output_py = [output[i] for i from 0 <= i < n]
|
|
561
|
+
else:
|
|
562
|
+
output_py = False
|
|
563
|
+
sig_free(output)
|
|
564
|
+
return output_py
|