passagemath-modules 10.5.32__cp310-cp310-macosx_14_0_arm64.whl → 10.6.20__cp310-cp310-macosx_14_0_arm64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of passagemath-modules might be problematic. Click here for more details.
- {passagemath_modules-10.5.32.dist-info → passagemath_modules-10.6.20.dist-info}/METADATA +51 -46
- {passagemath_modules-10.5.32.dist-info → passagemath_modules-10.6.20.dist-info}/RECORD +333 -323
- {passagemath_modules-10.5.32.dist-info → passagemath_modules-10.6.20.dist-info}/WHEEL +1 -1
- passagemath_modules.dylibs/libgcc_s.1.1.dylib +0 -0
- passagemath_modules.dylibs/libgfortran.5.dylib +0 -0
- passagemath_modules.dylibs/libgsl.28.dylib +0 -0
- passagemath_modules.dylibs/libmpc.3.dylib +0 -0
- passagemath_modules.dylibs/libopenblasp-r0.3.29.dylib +0 -0
- passagemath_modules.dylibs/libquadmath.0.dylib +0 -0
- sage/algebras/clifford_algebra.py +2 -2
- sage/algebras/clifford_algebra_element.cpython-310-darwin.so +0 -0
- sage/algebras/clifford_algebra_element.pyx +4 -2
- sage/algebras/exterior_algebra_groebner.cpython-310-darwin.so +0 -0
- sage/algebras/exterior_algebra_groebner.pyx +2 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra.py +83 -5
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.cpython-310-darwin.so +0 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pxd +2 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pyx +28 -3
- sage/algebras/finite_gca.py +1 -1
- sage/algebras/lie_algebras/bgg_dual_module.py +18 -11
- sage/algebras/lie_algebras/classical_lie_algebra.py +3 -3
- sage/algebras/lie_algebras/examples.py +2 -2
- sage/algebras/lie_algebras/free_lie_algebra.py +1 -1
- sage/algebras/lie_algebras/heisenberg.py +4 -4
- sage/algebras/lie_algebras/lie_algebra.py +1 -1
- sage/algebras/lie_algebras/lie_algebra_element.cpython-310-darwin.so +0 -0
- sage/algebras/lie_algebras/lie_algebra_element.pyx +65 -28
- sage/algebras/lie_algebras/quotient.py +40 -29
- sage/algebras/lie_algebras/subalgebra.py +76 -53
- sage/algebras/lie_algebras/verma_module.py +1 -3
- sage/algebras/octonion_algebra.cpython-310-darwin.so +0 -0
- sage/algebras/octonion_algebra.pyx +1 -1
- sage/algebras/orlik_solomon.py +4 -4
- sage/algebras/orlik_terao.py +4 -4
- sage/algebras/steenrod/steenrod_algebra.py +37 -30
- sage/algebras/steenrod/steenrod_algebra_bases.py +2 -2
- sage/algebras/steenrod/steenrod_algebra_misc.py +4 -4
- sage/algebras/steenrod/steenrod_algebra_mult.py +2 -2
- sage/all__sagemath_modules.py +1 -0
- sage/calculus/integration.cpython-310-darwin.so +0 -0
- sage/calculus/integration.pyx +6 -5
- sage/calculus/interpolation.cpython-310-darwin.so +0 -0
- sage/calculus/interpolators.cpython-310-darwin.so +0 -0
- sage/calculus/ode.cpython-310-darwin.so +0 -0
- sage/calculus/ode.pxd +2 -2
- sage/calculus/ode.pyx +6 -4
- sage/calculus/riemann.cpython-310-darwin.so +0 -0
- sage/calculus/riemann.pyx +68 -48
- sage/calculus/transforms/dwt.cpython-310-darwin.so +0 -0
- sage/calculus/transforms/fft.cpython-310-darwin.so +0 -0
- sage/coding/ag_code_decoders.cpython-310-darwin.so +0 -0
- sage/coding/ag_code_decoders.pyx +31 -31
- sage/coding/binary_code.cpython-310-darwin.so +0 -0
- sage/coding/binary_code.pxd +6 -6
- sage/coding/binary_code.pyx +212 -173
- sage/coding/guruswami_sudan/utils.py +3 -5
- sage/coding/kasami_codes.cpython-310-darwin.so +0 -0
- sage/coding/kasami_codes.pyx +20 -24
- sage/coding/linear_code.py +2 -2
- sage/coding/linear_code_no_metric.py +5 -5
- sage/coding/linear_rank_metric.py +81 -19
- sage/combinat/cartesian_product.py +1 -1
- sage/combinat/free_module.py +22 -2
- sage/combinat/root_system/all.py +1 -1
- sage/combinat/root_system/ambient_space.py +1 -1
- sage/combinat/root_system/associahedron.py +4 -4
- sage/combinat/root_system/braid_move_calculator.py +2 -2
- sage/combinat/root_system/braid_orbit.cpython-310-darwin.so +0 -0
- sage/combinat/root_system/braid_orbit.pyx +1 -1
- sage/combinat/root_system/branching_rules.py +3 -3
- sage/combinat/root_system/cartan_type.py +14 -14
- sage/combinat/root_system/coxeter_group.py +3 -3
- sage/combinat/root_system/coxeter_matrix.py +1 -1
- sage/combinat/root_system/coxeter_type.py +12 -1
- sage/combinat/root_system/extended_affine_weyl_group.py +9 -9
- sage/combinat/root_system/fundamental_group.py +3 -5
- sage/combinat/root_system/hecke_algebra_representation.py +1 -1
- sage/combinat/root_system/integrable_representations.py +1 -1
- sage/combinat/root_system/pieri_factors.py +3 -3
- sage/combinat/root_system/root_lattice_realization_algebras.py +1 -1
- sage/combinat/root_system/root_lattice_realizations.py +1 -1
- sage/combinat/root_system/type_folded.py +3 -3
- sage/combinat/root_system/type_reducible.py +8 -7
- sage/combinat/root_system/type_super_A.py +2 -2
- sage/combinat/root_system/weight_lattice_realizations.py +9 -8
- sage/combinat/root_system/weyl_characters.py +2 -2
- sage/crypto/__init__.py +1 -0
- sage/crypto/block_cipher/des.py +1 -1
- sage/crypto/block_cipher/miniaes.py +3 -3
- sage/crypto/block_cipher/present.py +3 -3
- sage/crypto/block_cipher/sdes.py +3 -3
- sage/crypto/boolean_function.cpython-310-darwin.so +0 -0
- sage/crypto/boolean_function.pyx +22 -23
- sage/crypto/key_exchange/diffie_hellman.py +4 -9
- sage/crypto/mq/sr.py +1 -1
- sage/crypto/public_key/blum_goldwasser.py +3 -3
- sage/crypto/sbox.cpython-310-darwin.so +0 -0
- sage/crypto/sbox.pyx +1 -1
- sage/crypto/sboxes.py +22 -0
- sage/crypto/util.py +4 -6
- sage/ext/interpreters/__init__.py +1 -1
- sage/ext/interpreters/all__sagemath_modules.py +1 -1
- sage/ext/interpreters/wrapper_cc.cpython-310-darwin.so +0 -0
- sage/ext/interpreters/wrapper_cc.pxd +5 -5
- sage/ext/interpreters/wrapper_cc.pyx +1 -1
- sage/ext/interpreters/wrapper_cdf.cpython-310-darwin.so +0 -0
- sage/ext/interpreters/wrapper_cdf.pxd +5 -7
- sage/ext/interpreters/wrapper_cdf.pyx +4 -10
- sage/ext/interpreters/wrapper_rdf.cpython-310-darwin.so +0 -0
- sage/ext/interpreters/wrapper_rdf.pxd +1 -1
- sage/ext/interpreters/wrapper_rdf.pyx +1 -1
- sage/ext/interpreters/wrapper_rr.cpython-310-darwin.so +0 -0
- sage/ext/interpreters/wrapper_rr.pxd +5 -5
- sage/ext/interpreters/wrapper_rr.pyx +1 -2
- sage/geometry/toric_lattice.py +3 -3
- sage/geometry/toric_lattice_element.cpython-310-darwin.so +0 -0
- sage/groups/additive_abelian/additive_abelian_group.py +1 -1
- sage/groups/additive_abelian/qmodnz.py +4 -4
- sage/groups/matrix_gps/coxeter_group.py +17 -4
- sage/groups/matrix_gps/group_element.cpython-310-darwin.so +0 -0
- sage/groups/misc_gps/argument_groups.py +2 -2
- sage/groups/misc_gps/imaginary_groups.py +4 -4
- sage/groups/perm_gps/partn_ref/refinement_binary.cpython-310-darwin.so +0 -0
- sage/groups/perm_gps/partn_ref/refinement_matrices.cpython-310-darwin.so +0 -0
- sage/homology/chain_complex.py +0 -2
- sage/homology/hochschild_complex.py +3 -3
- sage/homology/homology_morphism.py +6 -6
- sage/homology/homology_vector_space_with_basis.py +1 -1
- sage/libs/gsl/array.cpython-310-darwin.so +0 -0
- sage/libs/mpmath/utils.cpython-310-darwin.so +0 -0
- sage/matrix/action.cpython-310-darwin.so +0 -0
- sage/matrix/args.cpython-310-darwin.so +0 -0
- sage/matrix/args.pyx +25 -10
- sage/matrix/benchmark.py +8 -4
- sage/matrix/compute_J_ideal.py +2 -2
- sage/matrix/constructor.cpython-310-darwin.so +0 -0
- sage/matrix/echelon_matrix.cpython-310-darwin.so +0 -0
- sage/matrix/echelon_matrix.pyx +1 -1
- sage/matrix/matrix0.cpython-310-darwin.so +0 -0
- sage/matrix/matrix0.pxd +3 -3
- sage/matrix/matrix0.pyx +7 -5
- sage/matrix/matrix1.cpython-310-darwin.so +0 -0
- sage/matrix/matrix1.pyx +87 -48
- sage/matrix/matrix2.cpython-310-darwin.so +0 -0
- sage/matrix/matrix2.pxd +3 -3
- sage/matrix/matrix2.pyx +1261 -63
- sage/matrix/matrix_cdv.cpython-310-darwin.so +0 -0
- sage/matrix/matrix_complex_double_dense.cpython-310-darwin.so +0 -0
- sage/matrix/matrix_complex_double_dense.pyx +1 -1
- sage/matrix/matrix_dense.cpython-310-darwin.so +0 -0
- sage/matrix/matrix_dense.pyx +2 -3
- sage/matrix/matrix_double_dense.cpython-310-darwin.so +0 -0
- sage/matrix/matrix_double_dense.pyx +11 -5
- sage/matrix/matrix_double_sparse.cpython-310-darwin.so +0 -0
- sage/matrix/matrix_generic_dense.cpython-310-darwin.so +0 -0
- sage/matrix/matrix_generic_sparse.cpython-310-darwin.so +0 -0
- sage/matrix/matrix_generic_sparse.pyx +1 -1
- sage/matrix/matrix_laurent_mpolynomial_dense.cpython-310-darwin.so +0 -0
- sage/matrix/matrix_numpy_dense.cpython-310-darwin.so +0 -0
- sage/matrix/matrix_numpy_integer_dense.cpython-310-darwin.so +0 -0
- sage/matrix/matrix_polynomial_dense.cpython-310-darwin.so +0 -0
- sage/matrix/matrix_polynomial_dense.pyx +952 -261
- sage/matrix/matrix_real_double_dense.cpython-310-darwin.so +0 -0
- sage/matrix/matrix_sparse.cpython-310-darwin.so +0 -0
- sage/matrix/matrix_sparse.pyx +6 -7
- sage/matrix/matrix_window.cpython-310-darwin.so +0 -0
- sage/matrix/matrix_window.pyx +2 -2
- sage/matrix/misc_mpfr.cpython-310-darwin.so +0 -0
- sage/matrix/operation_table.py +0 -2
- sage/matrix/special.py +5 -1
- sage/matrix/strassen.cpython-310-darwin.so +0 -0
- sage/matrix/strassen.pyx +1 -1
- sage/matroids/basis_exchange_matroid.cpython-310-darwin.so +0 -0
- sage/matroids/basis_matroid.cpython-310-darwin.so +0 -0
- sage/matroids/chow_ring.py +68 -65
- sage/matroids/chow_ring_ideal.py +41 -38
- sage/matroids/circuit_closures_matroid.cpython-310-darwin.so +0 -0
- sage/matroids/circuits_matroid.cpython-310-darwin.so +0 -0
- sage/matroids/database_matroids.py +16 -5
- sage/matroids/dual_matroid.py +2 -2
- sage/matroids/extension.cpython-310-darwin.so +0 -0
- sage/matroids/flats_matroid.cpython-310-darwin.so +0 -0
- sage/matroids/gammoid.py +1 -1
- sage/matroids/graphic_matroid.cpython-310-darwin.so +0 -0
- sage/matroids/graphic_matroid.pyx +3 -3
- sage/matroids/lean_matrix.cpython-310-darwin.so +0 -0
- sage/matroids/lean_matrix.pyx +22 -22
- sage/matroids/linear_matroid.cpython-310-darwin.so +0 -0
- sage/matroids/linear_matroid.pyx +13 -13
- sage/matroids/matroid.cpython-310-darwin.so +0 -0
- sage/matroids/matroid.pyx +15 -15
- sage/matroids/matroids_plot_helpers.py +48 -46
- sage/matroids/minor_matroid.py +2 -2
- sage/matroids/set_system.cpython-310-darwin.so +0 -0
- sage/matroids/transversal_matroid.cpython-310-darwin.so +0 -0
- sage/matroids/transversal_matroid.pyx +3 -3
- sage/matroids/union_matroid.cpython-310-darwin.so +0 -0
- sage/matroids/union_matroid.pyx +3 -0
- sage/matroids/unpickling.cpython-310-darwin.so +0 -0
- sage/matroids/utilities.py +2 -2
- sage/misc/c3.cpython-310-darwin.so +0 -0
- sage/misc/compat.py +1 -2
- sage/misc/pickle_old.cpython-310-darwin.so +0 -0
- sage/modules/diamond_cutting.py +117 -30
- sage/modules/fg_pid/fgp_module.py +3 -3
- sage/modules/filtered_vector_space.py +4 -4
- sage/modules/finite_submodule_iter.cpython-310-darwin.so +0 -0
- sage/modules/fp_graded/free_module.py +2 -2
- sage/modules/fp_graded/module.py +2 -2
- sage/modules/fp_graded/morphism.py +4 -4
- sage/modules/fp_graded/steenrod/morphism.py +1 -1
- sage/modules/free_module.py +162 -26
- sage/modules/free_module_element.cpython-310-darwin.so +0 -0
- sage/modules/free_module_element.pyx +4 -4
- sage/modules/free_module_integer.py +2 -2
- sage/modules/free_module_morphism.py +3 -3
- sage/modules/free_module_pseudohomspace.py +352 -0
- sage/modules/free_module_pseudomorphism.py +578 -0
- sage/modules/free_quadratic_module_integer_symmetric.py +24 -13
- sage/modules/matrix_morphism.py +9 -9
- sage/modules/multi_filtered_vector_space.py +4 -4
- sage/modules/ore_module.py +2208 -0
- sage/modules/ore_module_element.py +178 -0
- sage/modules/ore_module_homspace.py +147 -0
- sage/modules/ore_module_morphism.py +968 -0
- sage/modules/quotient_module.py +11 -1
- sage/modules/submodule.py +1 -1
- sage/modules/torsion_quadratic_module.py +1 -1
- sage/modules/vector_complex_double_dense.cpython-310-darwin.so +0 -0
- sage/modules/vector_double_dense.cpython-310-darwin.so +0 -0
- sage/modules/vector_integer_dense.cpython-310-darwin.so +0 -0
- sage/modules/vector_integer_sparse.cpython-310-darwin.so +0 -0
- sage/modules/vector_integer_sparse.pyx +4 -4
- sage/modules/vector_modn_dense.cpython-310-darwin.so +0 -0
- sage/modules/vector_modn_sparse.cpython-310-darwin.so +0 -0
- sage/modules/vector_numpy_dense.cpython-310-darwin.so +0 -0
- sage/modules/vector_numpy_integer_dense.cpython-310-darwin.so +0 -0
- sage/modules/vector_rational_dense.cpython-310-darwin.so +0 -0
- sage/modules/vector_rational_dense.pyx +1 -1
- sage/modules/vector_rational_sparse.cpython-310-darwin.so +0 -0
- sage/modules/vector_rational_sparse.pyx +5 -5
- sage/modules/vector_real_double_dense.cpython-310-darwin.so +0 -0
- sage/modules/vector_space_morphism.py +2 -2
- sage/modules/with_basis/cell_module.py +17 -0
- sage/modules/with_basis/indexed_element.cpython-310-darwin.so +0 -0
- sage/modules/with_basis/indexed_element.pyx +1 -1
- sage/modules/with_basis/invariant.py +1 -1
- sage/modules/with_basis/representation.py +0 -1
- sage/modules/with_basis/subquotient.py +2 -2
- sage/numerical/gauss_legendre.cpython-310-darwin.so +0 -0
- sage/probability/probability_distribution.cpython-310-darwin.so +0 -0
- sage/quadratic_forms/binary_qf.py +11 -11
- sage/quadratic_forms/bqf_class_group.py +26 -92
- sage/quadratic_forms/count_local_2.cpython-310-darwin.so +0 -0
- sage/quadratic_forms/extras.py +1 -1
- sage/quadratic_forms/quadratic_form.py +5 -4
- sage/quadratic_forms/quadratic_form__equivalence_testing.py +7 -4
- sage/quadratic_forms/quadratic_form__evaluate.cpython-310-darwin.so +0 -0
- sage/quadratic_forms/quadratic_form__local_field_invariants.py +10 -10
- sage/quadratic_forms/quadratic_form__ternary_Tornaria.py +2 -2
- sage/quadratic_forms/ternary.cpython-310-darwin.so +0 -0
- sage/quadratic_forms/ternary_qf.py +50 -83
- sage/rings/cfinite_sequence.py +16 -17
- sage/rings/complex_conversion.cpython-310-darwin.so +0 -0
- sage/rings/complex_double.cpython-310-darwin.so +0 -0
- sage/rings/complex_double.pxd +1 -0
- sage/rings/complex_double.pyx +37 -32
- sage/rings/complex_mpc.cpython-310-darwin.so +0 -0
- sage/rings/complex_mpc.pyx +27 -23
- sage/rings/complex_mpfr.cpython-310-darwin.so +0 -0
- sage/rings/complex_mpfr.pyx +11 -11
- sage/rings/function_field/drinfeld_modules/charzero_drinfeld_module.py +277 -21
- sage/rings/function_field/drinfeld_modules/drinfeld_module.py +10 -1
- sage/rings/function_field/drinfeld_modules/finite_drinfeld_module.py +1 -1
- sage/rings/function_field/drinfeld_modules/homset.py +1 -2
- sage/rings/function_field/drinfeld_modules/morphism.py +2 -2
- sage/rings/function_field/hermite_form_polynomial.cpython-310-darwin.so +0 -0
- sage/rings/function_field/khuri_makdisi.cpython-310-darwin.so +0 -0
- sage/rings/function_field/khuri_makdisi.pyx +27 -25
- sage/rings/invariants/invariant_theory.py +61 -60
- sage/rings/invariants/reconstruction.py +8 -8
- sage/rings/polynomial/laurent_polynomial_mpair.cpython-310-darwin.so +0 -0
- sage/rings/polynomial/ore_function_element.py +1 -1
- sage/rings/polynomial/ore_polynomial_element.cpython-310-darwin.so +0 -0
- sage/rings/polynomial/ore_polynomial_element.pyx +8 -8
- sage/rings/polynomial/ore_polynomial_ring.py +134 -17
- sage/rings/polynomial/polynomial_real_mpfr_dense.cpython-310-darwin.so +0 -0
- sage/rings/polynomial/skew_polynomial_element.cpython-310-darwin.so +0 -0
- sage/rings/polynomial/skew_polynomial_finite_field.cpython-310-darwin.so +0 -0
- sage/rings/polynomial/skew_polynomial_finite_field.pyx +3 -4
- sage/rings/polynomial/skew_polynomial_finite_order.cpython-310-darwin.so +0 -0
- sage/rings/polynomial/skew_polynomial_finite_order.pyx +2 -5
- sage/rings/real_double_element_gsl.cpython-310-darwin.so +0 -0
- sage/rings/real_mpfr.cpython-310-darwin.so +0 -0
- sage/rings/real_mpfr.pyx +25 -7
- sage/rings/ring_extension.cpython-310-darwin.so +0 -0
- sage/rings/ring_extension.pyx +4 -2
- sage/rings/ring_extension_conversion.cpython-310-darwin.so +0 -0
- sage/rings/ring_extension_element.cpython-310-darwin.so +0 -0
- sage/rings/ring_extension_element.pyx +42 -0
- sage/rings/ring_extension_morphism.cpython-310-darwin.so +0 -0
- sage/schemes/all__sagemath_modules.py +1 -0
- sage/schemes/projective/all__sagemath_modules.py +1 -0
- sage/schemes/projective/coherent_sheaf.py +300 -0
- sage/schemes/projective/cohomology.py +510 -0
- sage/stats/basic_stats.py +17 -15
- sage/stats/distributions/dgs_misc.h +11 -4
- sage/stats/distributions/discrete_gaussian_integer.cpython-310-darwin.so +0 -0
- sage/stats/distributions/discrete_gaussian_integer.pyx +9 -7
- sage/stats/hmm/chmm.cpython-310-darwin.so +0 -0
- sage/stats/hmm/chmm.pyx +13 -13
- sage/stats/hmm/distributions.cpython-310-darwin.so +0 -0
- sage/stats/hmm/distributions.pxd +3 -3
- sage/stats/hmm/distributions.pyx +3 -3
- sage/stats/hmm/hmm.cpython-310-darwin.so +0 -0
- sage/stats/hmm/hmm.pxd +3 -3
- sage/stats/hmm/hmm.pyx +6 -6
- sage/stats/hmm/util.cpython-310-darwin.so +0 -0
- sage/stats/hmm/util.pyx +6 -6
- sage/stats/intlist.cpython-310-darwin.so +0 -0
- sage/stats/intlist.pxd +3 -3
- sage/stats/time_series.cpython-310-darwin.so +0 -0
- sage/tensor/modules/alternating_contr_tensor.py +3 -3
- sage/tensor/modules/comp.py +3 -3
- sage/tensor/modules/ext_pow_free_module.py +3 -3
- sage/tensor/modules/format_utilities.py +3 -3
- sage/tensor/modules/free_module_linear_group.py +3 -3
- sage/tensor/modules/free_module_morphism.py +0 -1
- sage/tensor/modules/tensor_free_module.py +3 -3
- sage/tensor/modules/tensor_free_submodule.py +1 -1
- sage/tensor/modules/tensor_free_submodule_basis.py +1 -1
- sage/tensor/modules/tensor_with_indices.py +5 -5
- passagemath_modules.dylibs/libopenblas_armv8p-r0.3.28.dylib +0 -0
- {passagemath_modules-10.5.32.dist-info → passagemath_modules-10.6.20.dist-info}/top_level.txt +0 -0
|
@@ -414,7 +414,7 @@ def normalize_profile(profile, precision=None, truncation_type='auto', p=2, gene
|
|
|
414
414
|
sage: normalize_profile(lambda n: 3, precision=4, truncation_type=0)
|
|
415
415
|
Traceback (most recent call last):
|
|
416
416
|
...
|
|
417
|
-
ValueError:
|
|
417
|
+
ValueError: invalid profile
|
|
418
418
|
sage: normalize_profile(lambda n: 3, precision=4, truncation_type = Infinity)
|
|
419
419
|
((3, 3, 3), +Infinity)
|
|
420
420
|
|
|
@@ -458,7 +458,7 @@ def normalize_profile(profile, precision=None, truncation_type='auto', p=2, gene
|
|
|
458
458
|
sage: normalize_profile([[0,0,0], [1,2,3,2,1]], p=11)
|
|
459
459
|
Traceback (most recent call last):
|
|
460
460
|
...
|
|
461
|
-
ValueError:
|
|
461
|
+
ValueError: invalid profile
|
|
462
462
|
"""
|
|
463
463
|
from sage.rings.infinity import Infinity
|
|
464
464
|
if truncation_type == 'zero':
|
|
@@ -501,7 +501,7 @@ def normalize_profile(profile, precision=None, truncation_type='auto', p=2, gene
|
|
|
501
501
|
if is_valid_profile(new_profile, truncation_type, p):
|
|
502
502
|
return new_profile, truncation_type
|
|
503
503
|
else:
|
|
504
|
-
raise ValueError("
|
|
504
|
+
raise ValueError("invalid profile")
|
|
505
505
|
else: # p odd
|
|
506
506
|
if profile is None or profile == Infinity:
|
|
507
507
|
# no specified profile or infinite profile: return profile
|
|
@@ -561,7 +561,7 @@ def normalize_profile(profile, precision=None, truncation_type='auto', p=2, gene
|
|
|
561
561
|
if is_valid_profile(new_profile, truncation_type, p, generic=True):
|
|
562
562
|
return new_profile, truncation_type
|
|
563
563
|
else:
|
|
564
|
-
raise ValueError("
|
|
564
|
+
raise ValueError("invalid profile")
|
|
565
565
|
|
|
566
566
|
######################################################
|
|
567
567
|
# string representations for elements
|
|
@@ -195,10 +195,10 @@ squares or `p`-th power operations and Bocksteins into a dictionary
|
|
|
195
195
|
representing a sum of admissible monomials.
|
|
196
196
|
"""
|
|
197
197
|
|
|
198
|
-
|
|
198
|
+
# ****************************************************************************
|
|
199
199
|
# Copyright (C) 2008-2010 John H. Palmieri <palmieri@math.washington.edu>
|
|
200
200
|
# Distributed under the terms of the GNU General Public License (GPL)
|
|
201
|
-
|
|
201
|
+
# ****************************************************************************
|
|
202
202
|
|
|
203
203
|
from sage.misc.cachefunc import cached_function
|
|
204
204
|
|
sage/all__sagemath_modules.py
CHANGED
|
Binary file
|
sage/calculus/integration.pyx
CHANGED
|
@@ -74,7 +74,7 @@ cdef double c_f(double t, void *params) noexcept:
|
|
|
74
74
|
|
|
75
75
|
def numerical_integral(func, a, b=None,
|
|
76
76
|
algorithm='qag',
|
|
77
|
-
max_points=87, params=
|
|
77
|
+
max_points=87, params=None, eps_abs=1e-6,
|
|
78
78
|
eps_rel=1e-6, rule=6):
|
|
79
79
|
r"""
|
|
80
80
|
Return the numerical integral of the function on the interval
|
|
@@ -268,8 +268,6 @@ def numerical_integral(func, a, b=None,
|
|
|
268
268
|
"""
|
|
269
269
|
cdef double abs_err # step size
|
|
270
270
|
cdef double result
|
|
271
|
-
cdef int i
|
|
272
|
-
cdef int j
|
|
273
271
|
cdef double _a, _b
|
|
274
272
|
cdef PyFunctionWrapper wrapper # struct to pass information into GSL C function
|
|
275
273
|
|
|
@@ -289,6 +287,9 @@ def numerical_integral(func, a, b=None,
|
|
|
289
287
|
cdef gsl_integration_workspace* W
|
|
290
288
|
W = NULL
|
|
291
289
|
|
|
290
|
+
if params is None:
|
|
291
|
+
params = []
|
|
292
|
+
|
|
292
293
|
if True:
|
|
293
294
|
from sage.rings.infinity import Infinity
|
|
294
295
|
try:
|
|
@@ -620,7 +621,7 @@ def monte_carlo_integral(func, xl, xu, size_t calls, algorithm='plain',
|
|
|
620
621
|
if len(vars) < target_dim:
|
|
621
622
|
raise ValueError(("The function to be integrated depends on "
|
|
622
623
|
"{} variables {}, and so cannot be "
|
|
623
|
-
|
|
624
|
+
"integrated in {} dimensions. Please fix "
|
|
624
625
|
"additional variables with the 'params' "
|
|
625
626
|
"argument").format(len(vars), tuple(vars),
|
|
626
627
|
target_dim))
|
|
@@ -629,7 +630,7 @@ def monte_carlo_integral(func, xl, xu, size_t calls, algorithm='plain',
|
|
|
629
630
|
"{} variables {}, and so cannot be "
|
|
630
631
|
"integrated in {} dimensions. Please add "
|
|
631
632
|
"more items in upper and lower limits"
|
|
632
|
-
|
|
633
|
+
).format(len(vars), tuple(vars), target_dim))
|
|
633
634
|
|
|
634
635
|
from sage.structure.element import Expression
|
|
635
636
|
if isinstance(func, Expression):
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
sage/calculus/ode.pxd
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# sage_setup: distribution = sagemath-modules
|
|
2
2
|
cdef class ode_system:
|
|
3
|
-
|
|
3
|
+
cdef int c_j(self, double , double *, double *, double *) noexcept
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
cdef int c_f(self, double t, double* , double*) noexcept
|
sage/calculus/ode.pyx
CHANGED
|
@@ -343,7 +343,9 @@ class ode_solver():
|
|
|
343
343
|
sage: with NamedTemporaryFile(suffix='.png') as f:
|
|
344
344
|
....: T.plot_solution(i=0, filename=f.name)
|
|
345
345
|
"""
|
|
346
|
-
def __init__(self, function=None, jacobian=None, h=1e-2, error_abs=1e-10,
|
|
346
|
+
def __init__(self, function=None, jacobian=None, h=1e-2, error_abs=1e-10,
|
|
347
|
+
error_rel=1e-10, a=False, a_dydt=False, scale_abs=False,
|
|
348
|
+
algorithm='rkf45', y_0=None, t_span=None, params=None):
|
|
347
349
|
self.function = function
|
|
348
350
|
self.jacobian = jacobian
|
|
349
351
|
self.h = h
|
|
@@ -355,7 +357,7 @@ class ode_solver():
|
|
|
355
357
|
self.algorithm = algorithm
|
|
356
358
|
self.y_0 = y_0
|
|
357
359
|
self.t_span = t_span
|
|
358
|
-
self.params = params
|
|
360
|
+
self.params = [] if params is None else params
|
|
359
361
|
self.solution = []
|
|
360
362
|
|
|
361
363
|
def __setattr__(self, name, value):
|
|
@@ -408,7 +410,7 @@ class ode_solver():
|
|
|
408
410
|
else:
|
|
409
411
|
G.save(filename=filename)
|
|
410
412
|
|
|
411
|
-
def ode_solve(self, t_span=False, y_0=False, num_points=False, params=
|
|
413
|
+
def ode_solve(self, t_span=False, y_0=False, num_points=False, params=None):
|
|
412
414
|
cdef double h # step size
|
|
413
415
|
h = self.h
|
|
414
416
|
cdef int i
|
|
@@ -416,7 +418,7 @@ class ode_solver():
|
|
|
416
418
|
cdef int type
|
|
417
419
|
cdef int dim
|
|
418
420
|
cdef PyFunctionWrapper wrapper # struct to pass information into GSL C function
|
|
419
|
-
self.params = params
|
|
421
|
+
self.params = [] if params is None else params
|
|
420
422
|
|
|
421
423
|
if t_span:
|
|
422
424
|
self.t_span = t_span
|
|
Binary file
|
sage/calculus/riemann.pyx
CHANGED
|
@@ -52,7 +52,7 @@ from math import pi
|
|
|
52
52
|
from math import sin
|
|
53
53
|
from math import cos
|
|
54
54
|
|
|
55
|
-
from math import log
|
|
55
|
+
from math import log # used for complex plot lightness
|
|
56
56
|
from math import atan
|
|
57
57
|
|
|
58
58
|
from cmath import exp
|
|
@@ -202,7 +202,7 @@ cdef class Riemann_Map:
|
|
|
202
202
|
cdef exterior
|
|
203
203
|
|
|
204
204
|
def __init__(self, fs, fprimes, COMPLEX_T a, int N=500, int ncorners=4,
|
|
205
|
-
|
|
205
|
+
opp=False, exterior=False):
|
|
206
206
|
"""
|
|
207
207
|
Initialize the ``Riemann_Map`` class. See the class :class:`Riemann_Map`
|
|
208
208
|
for full documentation on the input of this initialization method.
|
|
@@ -228,7 +228,7 @@ cdef class Riemann_Map:
|
|
|
228
228
|
self.f = fs[0]
|
|
229
229
|
self.a = a
|
|
230
230
|
self.ncorners = ncorners
|
|
231
|
-
self.N = N
|
|
231
|
+
self.N = N # Number of collocation pts
|
|
232
232
|
self.opp = opp
|
|
233
233
|
self.exterior = exterior
|
|
234
234
|
self.tk = np.array(np.arange(N) * TWOPI / N + 0.001 / N,
|
|
@@ -237,14 +237,14 @@ cdef class Riemann_Map:
|
|
|
237
237
|
for i in range(N):
|
|
238
238
|
self.tk2[i] = self.tk[i]
|
|
239
239
|
self.tk2[N] = TWOPI
|
|
240
|
-
self.B = len(fs)
|
|
240
|
+
self.B = len(fs) # number of boundaries of the figure
|
|
241
241
|
if self.exterior and (self.B > 1):
|
|
242
242
|
raise ValueError(
|
|
243
243
|
"The exterior map is undefined for multiply connected domains")
|
|
244
244
|
cdef np.ndarray[COMPLEX_T,ndim=2] cps = np.zeros([self.B, N],
|
|
245
|
-
|
|
245
|
+
dtype=COMPLEX)
|
|
246
246
|
cdef np.ndarray[COMPLEX_T,ndim=2] dps = np.zeros([self.B, N],
|
|
247
|
-
|
|
247
|
+
dtype=COMPLEX)
|
|
248
248
|
# Find the points on the boundaries and their derivatives.
|
|
249
249
|
if self.exterior:
|
|
250
250
|
for k in range(self.B):
|
|
@@ -322,14 +322,14 @@ cdef class Riemann_Map:
|
|
|
322
322
|
hconj = h.conjugate()
|
|
323
323
|
g = -sadp * hconj
|
|
324
324
|
normalized_dp=dp/adp
|
|
325
|
-
C = I / N * sadp
|
|
326
|
-
errinvalid = np.geterr()['invalid']
|
|
327
|
-
errdivide = np.geterr()['divide']
|
|
325
|
+
C = I / N * sadp # equivalent to -TWOPI / N * 1 / (TWOPI * I) * sadp
|
|
326
|
+
errinvalid = np.geterr()['invalid'] # checks the current error handling for invalid
|
|
327
|
+
errdivide = np.geterr()['divide'] # checks the current error handling for divide
|
|
328
328
|
np.seterr(divide='ignore',invalid='ignore')
|
|
329
329
|
K = np.array([C * sadp[t] * (normalized_dp/(cp-cp[t]) -
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
np.seterr(divide=errdivide,invalid=errinvalid)
|
|
330
|
+
(normalized_dp[t]/(cp-cp[t])).conjugate())
|
|
331
|
+
for t in np.arange(NB)], dtype=np.complex128)
|
|
332
|
+
np.seterr(divide=errdivide,invalid=errinvalid) # resets the error handling
|
|
333
333
|
for i in range(NB):
|
|
334
334
|
K[i, i] = 1
|
|
335
335
|
# Nystrom Method for solving 2nd kind integrals
|
|
@@ -337,7 +337,6 @@ cdef class Riemann_Map:
|
|
|
337
337
|
# the all-important Szego kernel
|
|
338
338
|
szego = np.array(phi.flatten() / np.sqrt(dp), dtype=COMPLEX)
|
|
339
339
|
self.szego = szego.reshape([B, N])
|
|
340
|
-
start = 0
|
|
341
340
|
# Finding the theta correspondence using phase. Misbehaves for some
|
|
342
341
|
# regions.
|
|
343
342
|
if B != 1:
|
|
@@ -432,7 +431,6 @@ cdef class Riemann_Map:
|
|
|
432
431
|
sage: sz0 = m.get_szego(boundary=0)
|
|
433
432
|
sage: sz1 = m.get_szego(boundary=1)
|
|
434
433
|
"""
|
|
435
|
-
cdef int k, B
|
|
436
434
|
if boundary < 0:
|
|
437
435
|
temptk = self.tk
|
|
438
436
|
for i in range(self.B - 1):
|
|
@@ -707,10 +705,11 @@ cdef class Riemann_Map:
|
|
|
707
705
|
else:
|
|
708
706
|
return mapped
|
|
709
707
|
|
|
710
|
-
def plot_boundaries(self, plotjoined=True, rgbcolor=
|
|
708
|
+
def plot_boundaries(self, plotjoined=True, rgbcolor=None, thickness=1):
|
|
711
709
|
"""
|
|
712
|
-
|
|
713
|
-
|
|
710
|
+
Plot the boundaries of the region for the Riemann map.
|
|
711
|
+
|
|
712
|
+
Note that this method DOES work for multiply connected domains.
|
|
714
713
|
|
|
715
714
|
INPUT:
|
|
716
715
|
|
|
@@ -748,6 +747,9 @@ cdef class Riemann_Map:
|
|
|
748
747
|
"""
|
|
749
748
|
from sage.plot.all import list_plot
|
|
750
749
|
|
|
750
|
+
if rgbcolor is None:
|
|
751
|
+
rgbcolor = [0, 0, 0]
|
|
752
|
+
|
|
751
753
|
plots = list(range(self.B))
|
|
752
754
|
for k in range(self.B):
|
|
753
755
|
# This conditional should be eliminated when the thickness/pointsize
|
|
@@ -828,8 +830,9 @@ cdef class Riemann_Map:
|
|
|
828
830
|
|
|
829
831
|
@options(interpolation='catrom')
|
|
830
832
|
def plot_spiderweb(self, spokes=16, circles=4, pts=32, linescale=0.99,
|
|
831
|
-
|
|
832
|
-
|
|
833
|
+
rgbcolor=None, thickness=1,
|
|
834
|
+
plotjoined=True, withcolor=False,
|
|
835
|
+
plot_points=200, min_mag=0.001, **options):
|
|
833
836
|
"""
|
|
834
837
|
Generate a traditional "spiderweb plot" of the Riemann map.
|
|
835
838
|
|
|
@@ -945,12 +948,16 @@ cdef class Riemann_Map:
|
|
|
945
948
|
cdef int k, i
|
|
946
949
|
if self.exterior:
|
|
947
950
|
raise ValueError(
|
|
948
|
-
"Spiderwebs for exterior maps are not currently
|
|
951
|
+
"Spiderwebs for exterior maps are not currently supported")
|
|
952
|
+
|
|
953
|
+
if rgbcolor is None:
|
|
954
|
+
rgbcolor = [0, 0, 0]
|
|
955
|
+
|
|
949
956
|
if self.B == 1: # The efficient simply connected
|
|
950
957
|
edge = self.plot_boundaries(plotjoined=plotjoined,
|
|
951
|
-
|
|
958
|
+
rgbcolor=rgbcolor,
|
|
959
|
+
thickness=thickness)
|
|
952
960
|
circle_list = list(range(circles))
|
|
953
|
-
theta_array = self.theta_array[0]
|
|
954
961
|
s = spline(np.column_stack([self.theta_array[0], self.tk2]).tolist())
|
|
955
962
|
tmax = self.theta_array[0, self.N]
|
|
956
963
|
tmin = self.theta_array[0, 0]
|
|
@@ -961,10 +968,13 @@ cdef class Riemann_Map:
|
|
|
961
968
|
(k + 1) / (circles + 1.0) * exp(I*i * TWOPI / (2*pts)))
|
|
962
969
|
if plotjoined:
|
|
963
970
|
circle_list[k] = list_plot(comp_pt(temp, 1),
|
|
964
|
-
|
|
971
|
+
rgbcolor=rgbcolor,
|
|
972
|
+
thickness=thickness,
|
|
973
|
+
plotjoined=True)
|
|
965
974
|
else:
|
|
966
975
|
circle_list[k] = list_plot(comp_pt(temp, 1),
|
|
967
|
-
|
|
976
|
+
rgbcolor=rgbcolor,
|
|
977
|
+
pointsize=thickness)
|
|
968
978
|
line_list = list(range(spokes))
|
|
969
979
|
for k in range(spokes):
|
|
970
980
|
temp = list(range(pts))
|
|
@@ -990,24 +1000,31 @@ cdef class Riemann_Map:
|
|
|
990
1000
|
self.plot_colored(plot_points=plot_points)
|
|
991
1001
|
else:
|
|
992
1002
|
return edge + sum(circle_list) + sum(line_list)
|
|
993
|
-
else:
|
|
1003
|
+
else: # The more difficult multiply connected
|
|
994
1004
|
z_values, xmin, xmax, ymin, ymax = self.compute_on_grid([],
|
|
995
|
-
|
|
1005
|
+
plot_points)
|
|
996
1006
|
xstep = (xmax-xmin)/plot_points
|
|
997
1007
|
ystep = (ymax-ymin)/plot_points
|
|
998
|
-
dr, dtheta= get_derivatives(z_values, xstep, ystep)
|
|
1008
|
+
dr, dtheta= get_derivatives(z_values, xstep, ystep) # clean later
|
|
999
1009
|
|
|
1000
1010
|
g = Graphics()
|
|
1001
|
-
g.add_primitive(ComplexPlot(complex_to_spiderweb(z_values,dr,
|
|
1002
|
-
|
|
1003
|
-
|
|
1011
|
+
g.add_primitive(ComplexPlot(complex_to_spiderweb(z_values, dr,
|
|
1012
|
+
dtheta, spokes,
|
|
1013
|
+
circles,
|
|
1014
|
+
rgbcolor,
|
|
1015
|
+
thickness,
|
|
1016
|
+
withcolor,
|
|
1017
|
+
min_mag),
|
|
1018
|
+
(xmin, xmax), (ymin, ymax),options))
|
|
1004
1019
|
return g + self.plot_boundaries(thickness = thickness)
|
|
1005
1020
|
|
|
1006
1021
|
@options(interpolation='catrom')
|
|
1007
|
-
def plot_colored(self, plot_range=
|
|
1022
|
+
def plot_colored(self, plot_range=None, int plot_points=100, **options):
|
|
1008
1023
|
"""
|
|
1009
|
-
|
|
1010
|
-
|
|
1024
|
+
Generate a colored plot of the Riemann map.
|
|
1025
|
+
|
|
1026
|
+
A red point on the colored plot corresponds to a red point on
|
|
1027
|
+
the unit disc.
|
|
1011
1028
|
|
|
1012
1029
|
INPUT:
|
|
1013
1030
|
|
|
@@ -1054,11 +1071,14 @@ cdef class Riemann_Map:
|
|
|
1054
1071
|
from sage.plot.complex_plot import ComplexPlot
|
|
1055
1072
|
from sage.plot.all import Graphics
|
|
1056
1073
|
|
|
1074
|
+
if plot_range is None:
|
|
1075
|
+
plot_range = []
|
|
1076
|
+
|
|
1057
1077
|
z_values, xmin, xmax, ymin, ymax = self.compute_on_grid(plot_range,
|
|
1058
|
-
|
|
1078
|
+
plot_points)
|
|
1059
1079
|
g = Graphics()
|
|
1060
1080
|
g.add_primitive(ComplexPlot(complex_to_rgb(z_values), (xmin, xmax),
|
|
1061
|
-
|
|
1081
|
+
(ymin, ymax), options))
|
|
1062
1082
|
return g
|
|
1063
1083
|
|
|
1064
1084
|
cdef comp_pt(clist, loop=True):
|
|
@@ -1090,8 +1110,8 @@ cdef comp_pt(clist, loop=True):
|
|
|
1090
1110
|
list2.append(list2[0])
|
|
1091
1111
|
return list2
|
|
1092
1112
|
|
|
1093
|
-
cpdef get_derivatives(np.ndarray[COMPLEX_T, ndim=2] z_values,
|
|
1094
|
-
|
|
1113
|
+
cpdef get_derivatives(np.ndarray[COMPLEX_T, ndim=2] z_values,
|
|
1114
|
+
FLOAT_T xstep, FLOAT_T ystep):
|
|
1095
1115
|
"""
|
|
1096
1116
|
Compute the r*e^(I*theta) form of derivatives from the grid of points. The
|
|
1097
1117
|
derivatives are computed using quick-and-dirty taylor expansion and
|
|
@@ -1133,8 +1153,6 @@ cpdef get_derivatives(np.ndarray[COMPLEX_T, ndim=2] z_values, FLOAT_T xstep,
|
|
|
1133
1153
|
"""
|
|
1134
1154
|
cdef np.ndarray[COMPLEX_T, ndim=2] xderiv
|
|
1135
1155
|
cdef np.ndarray[FLOAT_T, ndim = 2] dr, dtheta, zabs
|
|
1136
|
-
imax = len(z_values)-2
|
|
1137
|
-
jmax = len(z_values[0])-2
|
|
1138
1156
|
# (f(x+delta)-f(x-delta))/2delta
|
|
1139
1157
|
xderiv = (z_values[1:-1,2:]-z_values[1:-1,:-2])/(2*xstep)
|
|
1140
1158
|
# b/c the function is analytic, we know the magnitude of its
|
|
@@ -1142,12 +1160,14 @@ cpdef get_derivatives(np.ndarray[COMPLEX_T, ndim=2] z_values, FLOAT_T xstep,
|
|
|
1142
1160
|
dr = np.abs(xderiv)
|
|
1143
1161
|
# the abs(derivative) scaled by distance from origin
|
|
1144
1162
|
zabs = np.abs(z_values[1:-1,1:-1])
|
|
1145
|
-
dtheta = np.divide(dr,zabs)
|
|
1163
|
+
dtheta = np.divide(dr, zabs)
|
|
1146
1164
|
return dr, dtheta
|
|
1147
1165
|
|
|
1148
1166
|
cpdef complex_to_spiderweb(np.ndarray[COMPLEX_T, ndim = 2] z_values,
|
|
1149
|
-
|
|
1150
|
-
|
|
1167
|
+
np.ndarray[FLOAT_T, ndim = 2] dr,
|
|
1168
|
+
np.ndarray[FLOAT_T, ndim = 2] dtheta,
|
|
1169
|
+
spokes, circles, rgbcolor, thickness,
|
|
1170
|
+
withcolor, min_mag):
|
|
1151
1171
|
"""
|
|
1152
1172
|
Convert a grid of complex numbers into a matrix containing rgb data
|
|
1153
1173
|
for the Riemann spiderweb plot.
|
|
@@ -1222,9 +1242,9 @@ cpdef complex_to_spiderweb(np.ndarray[COMPLEX_T, ndim = 2] z_values,
|
|
|
1222
1242
|
[1. , 1. , 1. ]]])
|
|
1223
1243
|
"""
|
|
1224
1244
|
cdef Py_ssize_t i, j, imax, jmax
|
|
1225
|
-
cdef FLOAT_T
|
|
1245
|
+
cdef FLOAT_T mag, arg, target, precision, dmag, darg
|
|
1226
1246
|
cdef COMPLEX_T z
|
|
1227
|
-
cdef FLOAT_T DMAX = 70
|
|
1247
|
+
cdef FLOAT_T DMAX = 70 # change to adjust rate_of_change cutoff below
|
|
1228
1248
|
precision = thickness/150.0
|
|
1229
1249
|
imax = len(z_values)
|
|
1230
1250
|
jmax = len(z_values[0])
|
|
@@ -1235,7 +1255,7 @@ cpdef complex_to_spiderweb(np.ndarray[COMPLEX_T, ndim = 2] z_values,
|
|
|
1235
1255
|
rgb = np.zeros(dtype=FLOAT, shape=(imax, jmax, 3))
|
|
1236
1256
|
rgb += 1
|
|
1237
1257
|
if circles != 0:
|
|
1238
|
-
circ_radii = srange(0,1.0,1.0/circles)
|
|
1258
|
+
circ_radii = srange(0, 1.0, 1.0/circles)
|
|
1239
1259
|
else:
|
|
1240
1260
|
circ_radii = []
|
|
1241
1261
|
if spokes != 0:
|
|
@@ -1302,7 +1322,7 @@ cpdef complex_to_rgb(np.ndarray[COMPLEX_T, ndim=2] z_values):
|
|
|
1302
1322
|
TypeError: Argument 'z_values' has incorrect type (expected numpy.ndarray, got list)
|
|
1303
1323
|
"""
|
|
1304
1324
|
cdef Py_ssize_t i, j, imax, jmax
|
|
1305
|
-
cdef FLOAT_T
|
|
1325
|
+
cdef FLOAT_T mag, arg
|
|
1306
1326
|
cdef FLOAT_T lightness, hue, top, bot
|
|
1307
1327
|
cdef FLOAT_T r, g, b
|
|
1308
1328
|
cdef int ihue
|
|
@@ -1495,7 +1515,7 @@ cpdef analytic_interior(COMPLEX_T z, int n, FLOAT_T epsilon):
|
|
|
1495
1515
|
# evaluates the Cauchy integral of the boundary, split into the real
|
|
1496
1516
|
# and imaginary results because numerical_integral can't handle complex data.
|
|
1497
1517
|
rp = 1/(TWOPI)*numerical_integral(cauchy_kernel,0,2*pi,
|
|
1498
|
-
|
|
1518
|
+
params = [epsilon,z,n,'i'])[0]
|
|
1499
1519
|
ip = 1/(TWOPI*I)*numerical_integral(cauchy_kernel,0,2*pi,
|
|
1500
|
-
|
|
1520
|
+
params = [epsilon,z,n,'r'])[0]
|
|
1501
1521
|
return rp + ip
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
sage/coding/ag_code_decoders.pyx
CHANGED
|
@@ -605,15 +605,16 @@ class EvaluationAGCodeUniqueDecoder(Decoder):
|
|
|
605
605
|
|
|
606
606
|
if Q.degree() > 1:
|
|
607
607
|
circuit = EvaluationAGCodeDecoder_K_extension(code._pls, code._G, Q,
|
|
608
|
-
|
|
608
|
+
verbose=verbose)
|
|
609
609
|
else:
|
|
610
610
|
circuit = EvaluationAGCodeDecoder_K(code._pls, code._G, Q,
|
|
611
|
-
|
|
611
|
+
verbose=verbose)
|
|
612
612
|
|
|
613
613
|
if basis is None:
|
|
614
614
|
basis = code._basis_functions
|
|
615
615
|
|
|
616
|
-
C = matrix([circuit.decode(vector(K,
|
|
616
|
+
C = matrix([circuit.decode(vector(K,
|
|
617
|
+
[f.evaluate(p) for p in code._pls]))
|
|
617
618
|
for f in basis])
|
|
618
619
|
|
|
619
620
|
self._extension = Q.degree() > 1
|
|
@@ -648,7 +649,7 @@ class EvaluationAGCodeUniqueDecoder(Decoder):
|
|
|
648
649
|
"""
|
|
649
650
|
return hash((self.code(), self._Q))
|
|
650
651
|
|
|
651
|
-
def __eq__(self, other):
|
|
652
|
+
def __eq__(self, other) -> bool:
|
|
652
653
|
"""
|
|
653
654
|
Check whether ``other`` equals ``self``.
|
|
654
655
|
|
|
@@ -678,7 +679,7 @@ class EvaluationAGCodeUniqueDecoder(Decoder):
|
|
|
678
679
|
return (self.code() == other.code() and self._Q == other._Q
|
|
679
680
|
and self._basis == other._basis)
|
|
680
681
|
|
|
681
|
-
def _repr_(self):
|
|
682
|
+
def _repr_(self) -> str:
|
|
682
683
|
r"""
|
|
683
684
|
Return the string representation of ``self``.
|
|
684
685
|
|
|
@@ -700,7 +701,7 @@ class EvaluationAGCodeUniqueDecoder(Decoder):
|
|
|
700
701
|
"""
|
|
701
702
|
return "Unique decoder for {}".format(self.code())
|
|
702
703
|
|
|
703
|
-
def _latex_(self):
|
|
704
|
+
def _latex_(self) -> str:
|
|
704
705
|
r"""
|
|
705
706
|
Return the latex representation of ``self``.
|
|
706
707
|
|
|
@@ -758,13 +759,13 @@ class EvaluationAGCodeUniqueDecoder(Decoder):
|
|
|
758
759
|
else:
|
|
759
760
|
return circuit.encode(vector(K, message) * C)
|
|
760
761
|
|
|
761
|
-
def _decode(self,
|
|
762
|
+
def _decode(self, vect, **kwargs):
|
|
762
763
|
r"""
|
|
763
|
-
Return the message decoded from ``
|
|
764
|
+
Return the message decoded from the vector ``vect``.
|
|
764
765
|
|
|
765
766
|
INPUT:
|
|
766
767
|
|
|
767
|
-
- ``
|
|
768
|
+
- ``vect`` -- a vector to be decoded to a message
|
|
768
769
|
|
|
769
770
|
TESTS::
|
|
770
771
|
|
|
@@ -788,10 +789,10 @@ class EvaluationAGCodeUniqueDecoder(Decoder):
|
|
|
788
789
|
circuit = self._circuit
|
|
789
790
|
|
|
790
791
|
if self._extension:
|
|
791
|
-
internal_message = circuit.decode(circuit._lift(
|
|
792
|
+
internal_message = circuit.decode(circuit._lift(vect), **kwargs) * Cinv
|
|
792
793
|
return circuit._pull_back(internal_message)
|
|
793
|
-
|
|
794
|
-
|
|
794
|
+
|
|
795
|
+
return circuit.decode(vect, **kwargs) * Cinv
|
|
795
796
|
|
|
796
797
|
def connected_encoder(self, *args, **kwargs):
|
|
797
798
|
r"""
|
|
@@ -1012,10 +1013,10 @@ class DifferentialAGCodeUniqueDecoder(Decoder):
|
|
|
1012
1013
|
|
|
1013
1014
|
if Q.degree() > 1:
|
|
1014
1015
|
circuit = DifferentialAGCodeDecoder_K_extension(code._pls, code._G, Q,
|
|
1015
|
-
|
|
1016
|
+
verbose=verbose)
|
|
1016
1017
|
else:
|
|
1017
1018
|
circuit = DifferentialAGCodeDecoder_K(code._pls, code._G, Q,
|
|
1018
|
-
|
|
1019
|
+
verbose=verbose)
|
|
1019
1020
|
|
|
1020
1021
|
if basis is None:
|
|
1021
1022
|
basis = code._basis_differentials
|
|
@@ -1055,7 +1056,7 @@ class DifferentialAGCodeUniqueDecoder(Decoder):
|
|
|
1055
1056
|
"""
|
|
1056
1057
|
return hash((self.code(), self._Q))
|
|
1057
1058
|
|
|
1058
|
-
def __eq__(self, other):
|
|
1059
|
+
def __eq__(self, other) -> bool:
|
|
1059
1060
|
"""
|
|
1060
1061
|
Check whether ``other`` equals ``self``.
|
|
1061
1062
|
|
|
@@ -1085,7 +1086,7 @@ class DifferentialAGCodeUniqueDecoder(Decoder):
|
|
|
1085
1086
|
return (self.code() == other.code() and self._Q == other._Q
|
|
1086
1087
|
and self._basis == other._basis)
|
|
1087
1088
|
|
|
1088
|
-
def _repr_(self):
|
|
1089
|
+
def _repr_(self) -> str:
|
|
1089
1090
|
r"""
|
|
1090
1091
|
Return the string representation of ``self``.
|
|
1091
1092
|
|
|
@@ -1107,7 +1108,7 @@ class DifferentialAGCodeUniqueDecoder(Decoder):
|
|
|
1107
1108
|
"""
|
|
1108
1109
|
return "Unique decoder for {}".format(self.code())
|
|
1109
1110
|
|
|
1110
|
-
def _latex_(self):
|
|
1111
|
+
def _latex_(self) -> str:
|
|
1111
1112
|
r"""
|
|
1112
1113
|
Return the latex representation of ``self``.
|
|
1113
1114
|
|
|
@@ -1165,13 +1166,13 @@ class DifferentialAGCodeUniqueDecoder(Decoder):
|
|
|
1165
1166
|
else:
|
|
1166
1167
|
return circuit.encode(vector(K, message) * C)
|
|
1167
1168
|
|
|
1168
|
-
def _decode(self,
|
|
1169
|
+
def _decode(self, vect, **kwargs):
|
|
1169
1170
|
r"""
|
|
1170
|
-
Return the message decoded from ``
|
|
1171
|
+
Return the message decoded from the vector ``vect``.
|
|
1171
1172
|
|
|
1172
1173
|
INPUT:
|
|
1173
1174
|
|
|
1174
|
-
- ``
|
|
1175
|
+
- ``vect`` -- a vector to be decoded to a message
|
|
1175
1176
|
|
|
1176
1177
|
TESTS::
|
|
1177
1178
|
|
|
@@ -1195,10 +1196,10 @@ class DifferentialAGCodeUniqueDecoder(Decoder):
|
|
|
1195
1196
|
circuit = self._circuit
|
|
1196
1197
|
|
|
1197
1198
|
if self._extension:
|
|
1198
|
-
internal_message = circuit.decode(circuit._lift(
|
|
1199
|
+
internal_message = circuit.decode(circuit._lift(vect), **kwargs) * Cinv
|
|
1199
1200
|
return circuit._pull_back(internal_message)
|
|
1200
|
-
|
|
1201
|
-
|
|
1201
|
+
|
|
1202
|
+
return circuit.decode(vect, **kwargs) * Cinv
|
|
1202
1203
|
|
|
1203
1204
|
def connected_encoder(self, *args, **kwargs):
|
|
1204
1205
|
r"""
|
|
@@ -1424,7 +1425,7 @@ cdef class Decoder_K():
|
|
|
1424
1425
|
This modified the ``vec`` input.
|
|
1425
1426
|
"""
|
|
1426
1427
|
cdef Py_ssize_t j, m
|
|
1427
|
-
cdef list a,
|
|
1428
|
+
cdef list a, s
|
|
1428
1429
|
cdef FreeModuleElement temp
|
|
1429
1430
|
cdef Polynomial c
|
|
1430
1431
|
|
|
@@ -1508,7 +1509,6 @@ cdef class Decoder_K():
|
|
|
1508
1509
|
coeff_mat = self.coeff_mat
|
|
1509
1510
|
|
|
1510
1511
|
cdef list message_index = self.message_index
|
|
1511
|
-
cdef list code_basis = self.code_basis
|
|
1512
1512
|
|
|
1513
1513
|
cdef int s0 = self.s0
|
|
1514
1514
|
cdef int tau = self.tau
|
|
@@ -1801,7 +1801,7 @@ cdef class Decoder_K():
|
|
|
1801
1801
|
h = [W.zero() for k in range(gamma)]
|
|
1802
1802
|
for j in range(code_length):
|
|
1803
1803
|
t = delta[j]
|
|
1804
|
-
h[<Py_ssize_t> t[1]] += matinv[i,j] * x**(<int> t[0])
|
|
1804
|
+
h[<Py_ssize_t> t[1]] += matinv[i, j] * x**(<int> t[0])
|
|
1805
1805
|
vecs[i] = vector(h)
|
|
1806
1806
|
|
|
1807
1807
|
|
|
@@ -1859,7 +1859,7 @@ cdef class EvaluationAGCodeDecoder_K(Decoder_K):
|
|
|
1859
1859
|
sage: circuit = EvaluationAGCodeDecoder_K(D, G, Q) # long time
|
|
1860
1860
|
sage: TestSuite(circuit).run(skip='_test_pickling') # long time
|
|
1861
1861
|
"""
|
|
1862
|
-
cdef int i, j, s, s0, sk, si, n, r, d
|
|
1862
|
+
cdef int i, j, s, s0, sk, si, n, r, d
|
|
1863
1863
|
cdef int code_length, genus, gamma, dLO, tau
|
|
1864
1864
|
cdef list gaps, dR, yR, dRbar, yRbar, evyRbar, nus, mul_mat
|
|
1865
1865
|
cdef list message_index, code_basis
|
|
@@ -2033,7 +2033,7 @@ cdef class EvaluationAGCodeDecoder_K(Decoder_K):
|
|
|
2033
2033
|
f = yR[i] * yRbar[j]
|
|
2034
2034
|
v = vec_form(f)
|
|
2035
2035
|
self._exponents((<int> dR[i]) + (<int> dRbar[j]), &sk, &si)
|
|
2036
|
-
coeff_mat[i,j] = v[si][sk]
|
|
2036
|
+
coeff_mat[i, j] = v[si][sk]
|
|
2037
2037
|
(<list> mul_mat[i])[j] = v
|
|
2038
2038
|
|
|
2039
2039
|
if verbose:
|
|
@@ -2114,7 +2114,7 @@ cdef class DifferentialAGCodeDecoder_K(Decoder_K):
|
|
|
2114
2114
|
sage: circuit = DifferentialAGCodeDecoder_K(D, G, Q) # long time
|
|
2115
2115
|
sage: TestSuite(circuit).run(skip='_test_pickling') # long time
|
|
2116
2116
|
"""
|
|
2117
|
-
cdef int i, j, s, s0, sk, si, n, r, d
|
|
2117
|
+
cdef int i, j, s, s0, sk, si, n, r, d
|
|
2118
2118
|
cdef int code_length, genus, gamma, dLO, tau
|
|
2119
2119
|
cdef list gaps, dR, yR, dWbar, wWbar, reswWbar, nus, mul_mat
|
|
2120
2120
|
cdef list message_index, code_basis
|
|
@@ -2288,7 +2288,7 @@ cdef class DifferentialAGCodeDecoder_K(Decoder_K):
|
|
|
2288
2288
|
f = yR[i] * wWbar[j]
|
|
2289
2289
|
v = vec_form(f)
|
|
2290
2290
|
self._exponents((<int> dR[i]) + (<int> dWbar[j]), &sk, &si)
|
|
2291
|
-
coeff_mat[i,j] = v[si][sk]
|
|
2291
|
+
coeff_mat[i, j] = v[si][sk]
|
|
2292
2292
|
(<list> mul_mat[i])[j] = v
|
|
2293
2293
|
|
|
2294
2294
|
if verbose:
|
|
@@ -2388,7 +2388,7 @@ cdef class Decoder_K_extension():
|
|
|
2388
2388
|
# construct constant field extension F_ext of F
|
|
2389
2389
|
def_poly = F.polynomial().base_extend(F_ext_base)
|
|
2390
2390
|
F_ext = F_ext_base.extension(def_poly, names=def_poly.variable_name())
|
|
2391
|
-
else:
|
|
2391
|
+
else: # rational function field
|
|
2392
2392
|
F_ext = F_ext_base
|
|
2393
2393
|
|
|
2394
2394
|
O_ext = F_ext.maximal_order()
|