algroots 0.2.0__tar.gz → 0.3.0__tar.gz
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.
- algroots-0.3.0/CHANGELOG.md +48 -0
- {algroots-0.2.0 → algroots-0.3.0}/CITATION.cff +1 -1
- algroots-0.3.0/MANIFEST.in +11 -0
- {algroots-0.2.0 → algroots-0.3.0}/PKG-INFO +56 -41
- {algroots-0.2.0 → algroots-0.3.0}/README.md +33 -19
- {algroots-0.2.0 → algroots-0.3.0}/docs/api.md +97 -258
- algroots-0.3.0/docs/certification-workflow.md +48 -0
- {algroots-0.2.0 → algroots-0.3.0}/docs/choosing-a-backend.md +1 -6
- {algroots-0.2.0 → algroots-0.3.0}/docs/completeness-versus-verification.md +1 -5
- algroots-0.3.0/docs/curves.md +103 -0
- {algroots-0.2.0 → algroots-0.3.0}/docs/exact-recognition.md +1 -2
- algroots-0.3.0/docs/examples-gallery.md +35 -0
- algroots-0.3.0/docs/feature-support-matrix.md +50 -0
- algroots-0.3.0/docs/finite-algebras.md +91 -0
- algroots-0.3.0/docs/function-fields.md +132 -0
- algroots-0.3.0/docs/functional-decomposition.md +214 -0
- {algroots-0.2.0 → algroots-0.3.0}/docs/guarantees-and-result-semantics.md +1 -3
- {algroots-0.2.0 → algroots-0.3.0}/docs/homotopy-continuation.md +3 -11
- {algroots-0.2.0 → algroots-0.3.0}/docs/index.md +10 -4
- algroots-0.3.0/docs/limitations.md +49 -0
- {algroots-0.2.0 → algroots-0.3.0}/docs/multiplicity-and-singular-roots.md +3 -3
- {algroots-0.2.0 → algroots-0.3.0}/docs/numerical-reliability.md +5 -1
- {algroots-0.2.0 → algroots-0.3.0}/docs/performance-model.md +7 -27
- {algroots-0.2.0 → algroots-0.3.0}/docs/quick-start.md +1 -4
- algroots-0.3.0/docs/quotient-tools.md +51 -0
- {algroots-0.2.0 → algroots-0.3.0}/docs/reading-results.md +7 -26
- {algroots-0.2.0 → algroots-0.3.0}/docs/recovery-workflow.md +7 -30
- algroots-0.3.0/docs/singular-certification-and-charts.md +77 -0
- algroots-0.3.0/docs/testing-and-validation.md +57 -0
- algroots-0.3.0/examples/17_generated_subfields.py +44 -0
- algroots-0.3.0/examples/18_normalized_curve_rationality.py +37 -0
- algroots-0.3.0/examples/19_functional_decomposition.py +32 -0
- algroots-0.3.0/examples/20_automatic_algebraic_discovery.py +37 -0
- algroots-0.3.0/examples/21_multivariate_luroth.py +32 -0
- algroots-0.3.0/examples/22_multivariate_decomposition.py +37 -0
- algroots-0.3.0/examples/23_decomposition_chains.py +36 -0
- algroots-0.3.0/examples/24_finite_algebras.py +37 -0
- {algroots-0.2.0 → algroots-0.3.0}/examples/README.md +15 -18
- {algroots-0.2.0 → algroots-0.3.0}/examples/catalog.json +48 -0
- {algroots-0.2.0 → algroots-0.3.0}/pyproject.toml +11 -7
- algroots-0.3.0/setup.cfg +4 -0
- {algroots-0.2.0 → algroots-0.3.0}/src/algroots/__init__.py +1 -1
- algroots-0.3.0/src/algroots/_algebraic_discovery.py +614 -0
- algroots-0.3.0/src/algroots/_coefficient_curves.py +156 -0
- algroots-0.3.0/src/algroots/_curve_constants.py +84 -0
- algroots-0.3.0/src/algroots/_curve_normalization.py +196 -0
- algroots-0.3.0/src/algroots/_curve_parametrization.py +378 -0
- algroots-0.3.0/src/algroots/_decomposition_chains.py +735 -0
- algroots-0.3.0/src/algroots/_decomposition_verification.py +159 -0
- algroots-0.3.0/src/algroots/_luroth.py +176 -0
- algroots-0.3.0/src/algroots/_multivariate_decomposition.py +363 -0
- {algroots-0.2.0 → algroots-0.3.0}/src/algroots/certification.py +13 -0
- algroots-0.3.0/src/algroots/curves.py +385 -0
- algroots-0.3.0/src/algroots/domains.py +187 -0
- {algroots-0.2.0 → algroots-0.3.0}/src/algroots/endgames.py +5 -0
- algroots-0.3.0/src/algroots/finite_decomposition.py +165 -0
- algroots-0.3.0/src/algroots/finite_fields.py +165 -0
- algroots-0.3.0/src/algroots/function_fields.py +766 -0
- algroots-0.3.0/src/algroots/functional_decomposition.py +797 -0
- {algroots-0.2.0 → algroots-0.3.0}/src/algroots/monodromy.py +16 -0
- {algroots-0.2.0 → algroots-0.3.0}/src/algroots/numerical.py +58 -22
- {algroots-0.2.0 → algroots-0.3.0}/src/algroots/quotient.py +304 -47
- {algroots-0.2.0 → algroots-0.3.0}/src/algroots/rational_univariate/linear_algebra.py +4 -3
- {algroots-0.2.0 → algroots-0.3.0}/src/algroots/solver.py +10 -1
- algroots-0.3.0/src/algroots/subfields.py +304 -0
- algroots-0.3.0/src/algroots.egg-info/PKG-INFO +179 -0
- algroots-0.3.0/src/algroots.egg-info/SOURCES.txt +209 -0
- algroots-0.3.0/src/algroots.egg-info/dependency_links.txt +1 -0
- algroots-0.3.0/src/algroots.egg-info/requires.txt +23 -0
- algroots-0.3.0/src/algroots.egg-info/top_level.txt +1 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/regressions/test_pole_component_saturation.py +1 -1
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_action_matrix_math.py +1 -1
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_action_matrix_oracle_randomized.py +1 -1
- algroots-0.3.0/tests/test_algebraic_acb_isolation.py +83 -0
- algroots-0.3.0/tests/test_algebraic_discovery.py +208 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_backend_differential.py +1 -1
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_border_basis.py +1 -1
- algroots-0.3.0/tests/test_coefficient_fields.py +114 -0
- algroots-0.3.0/tests/test_curves.py +222 -0
- algroots-0.3.0/tests/test_decomposition_chains.py +267 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_dispatch_calibration.py +1 -1
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_documentation_consistency.py +26 -0
- algroots-0.3.0/tests/test_domains.py +63 -0
- algroots-0.3.0/tests/test_finite_decomposition.py +42 -0
- algroots-0.3.0/tests/test_finite_fields.py +118 -0
- algroots-0.3.0/tests/test_functional_decomposition.py +263 -0
- algroots-0.3.0/tests/test_luroth.py +283 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_monodromy_recognition_end_to_end.py +1 -1
- algroots-0.3.0/tests/test_multivariate_decomposition.py +325 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_numerical_contracts.py +1 -3
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_path_tracking.py +1 -1
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_quotient_algebra.py +2 -2
- algroots-0.3.0/tests/test_quotient_function_fields.py +178 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_recognition.py +1 -1
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_recovery_orchestration.py +8 -3
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_semialg_shared_algebra_regressions.py +1 -1
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_singular_certification.py +11 -6
- algroots-0.3.0/tests/test_subfields.py +76 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_total_degree_homotopy.py +2 -2
- algroots-0.2.0/.github/workflows/benchmarks.yml +0 -25
- algroots-0.2.0/.github/workflows/mutation.yml +0 -38
- algroots-0.2.0/.github/workflows/python-package.yml +0 -275
- algroots-0.2.0/.gitignore +0 -30
- algroots-0.2.0/CHANGELOG.md +0 -10
- algroots-0.2.0/docs/certification-workflow.md +0 -69
- algroots-0.2.0/docs/examples-gallery.md +0 -22
- algroots-0.2.0/docs/feature-support-matrix.md +0 -37
- algroots-0.2.0/docs/limitations.md +0 -69
- algroots-0.2.0/docs/quotient-tools.md +0 -50
- algroots-0.2.0/docs/singular-certification-and-charts.md +0 -142
- algroots-0.2.0/docs/testing-and-validation.md +0 -67
- {algroots-0.2.0 → algroots-0.3.0}/CONTRIBUTING.md +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/LICENSE +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/benchmarks/README.md +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/benchmarks/expanded_calibration.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/benchmarks/expanded_calibration_results.json +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/benchmarks/portfolio_calibration.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/benchmarks/portfolio_calibration_results.json +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/benchmarks/quotient_profile.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/benchmarks/quotient_profile_baseline.txt +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/benchmarks/quotient_profile_current.txt +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/benchmarks/quotient_profile_results.json +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/benchmarks/test_solver_benchmarks.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/docs/algorithms.md +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/docs/branch-semantics.md +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/docs/continuation-and-monodromy.md +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/docs/end-to-end-example.md +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/docs/exact-border-bases.md +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/docs/precision-and-conditioning.md +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/docs/rational-univariate-representation.md +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/docs/supported-problems.md +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/docs/troubleshooting.md +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/examples/01_polynomial_system.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/examples/02_branches_and_poles.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/examples/03_exact_recognition.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/examples/04_quotient_and_cache.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/examples/05_exact_rur.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/examples/06_algebraic_coefficients.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/examples/07_multiplicity_and_boxes.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/examples/08_clustered_roots.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/examples/09_presolve_and_costs.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/examples/10_border_bases.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/examples/11_singular_deflation.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/examples/12_bounded_homotopy_recovery.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/examples/13_projective_chart_switching.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/examples/14_seeded_monodromy.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/examples/15_limits_and_failures.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/examples/16_multiplicity_views_and_order.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/examples/run_all.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/src/algroots/_validation.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/src/algroots/algebraic.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/src/algroots/algebraization.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/src/algroots/border_basis.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/src/algroots/continuation.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/src/algroots/cost_policy.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/src/algroots/deflation.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/src/algroots/errors.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/src/algroots/monodromy_stopping.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/src/algroots/presolve.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/src/algroots/projective_tracking.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/src/algroots/rational_univariate/__init__.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/src/algroots/rational_univariate/construction.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/src/algroots/rational_univariate/quotient.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/src/algroots/rational_univariate/representation.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/src/algroots/rational_univariate/solve.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/src/algroots/recognition.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/src/algroots/recovery.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/src/algroots/root_output.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/src/algroots/total_degree_homotopy.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/src/algroots/univariate.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/conftest.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/regressions/test_branch_filter_negative_two_thirds.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/regressions/test_separator_collision_retry.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_action_matrix.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_action_matrix_structure.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_adaptive_boxes_and_cache.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_algebraic_systems.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_algebraization_equivalence.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_automatic_certification.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_branch_and_pole_adversarial.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_cancellation_presolve.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_capability_matrix.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_clustered_roots_and_precision.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_coefficient_domain_stress.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_complex_branch_semantics.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_constructed_systems_hypothesis.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_cost_policy.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_diagnostic_retries.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_documentation_examples.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_documented_workflows.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_endgames.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_exact_certification.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_flint_backend_ci.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_homotopy_differential_hypothesis.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_known_point_sets_hypothesis.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_metamorphic_invariance_hypothesis.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_mixed_precision_conditioning.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_monodromy_algebraic_systems.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_monodromy_core_differential.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_monodromy_loop.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_monodromy_metadata_hypothesis.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_monodromy_orbits.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_monodromy_stopping.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_multiplicity_and_singular_roots.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_namespace_function_contracts.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_newton_refinement_adversarial.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_numerical_pipeline.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_profiled_quotient.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_projective_chart_switching.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_public_api.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_rational_univariate.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_representation_invariance.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_root_output.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_runnable_examples.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_rur_backend.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_separator_retry_and_completeness.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_shape_position.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_shared_extraction_and_presolve.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_solver_frontend.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_structural_performance_guards.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_triangular_and_validation.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/tests/test_validation_refinement.py +0 -0
- {algroots-0.2.0 → algroots-0.3.0}/tools/release_artifact_smoke.py +0 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## 0.3.0
|
|
4
|
+
|
|
5
|
+
### Certified rational functional decomposition
|
|
6
|
+
|
|
7
|
+
`rational_decompose` searches for two-component decompositions of univariate rational functions over a specified rational or algebraic-number constant field. It enumerates eligible products of factors of a near-separated polynomial, reconstructs the inner and outer functions, and verifies the composition identity. Results distinguish complete searches, certified indecomposability, successful decompositions, and searches stopped by candidate or degree limits. Original denominator exclusions are retained when present in the input.
|
|
8
|
+
|
|
9
|
+
### Multivariate functional decomposition
|
|
10
|
+
|
|
11
|
+
`multivariate_rational_decompose` implements the decomposition method of Gutiérrez, Rubio and Sevilla, with a univariate rational outer component and multivariate rational inner component. Candidate enumeration is lazy and degree-aware; composition identities and search-status claims are replayable. Passing a tuple or list of variables to `rational_decompose` selects this interface.
|
|
12
|
+
|
|
13
|
+
### Implicit algebraic decomposition
|
|
14
|
+
|
|
15
|
+
`algebraic_decompose` reconstructs components from supplied algebraic factors or discovers coefficient extensions and factors automatically. Discovery uses universal monic-factor algebras and Galois-orbit coverage, avoiding construction of a full splitting field in the supported cases. Certificates verify coefficient normalization and the implicit composition through resultant identities, including necessary powers.
|
|
16
|
+
|
|
17
|
+
### Recursive decomposition chains
|
|
18
|
+
|
|
19
|
+
Added APIs for rational and implicit algebraic decomposition chains, including an optional supplied initial split. Results retain composed identities, replayable split trees, and reasons for unresolved leaves. Chain completeness describes the selected decomposition tree, not enumeration of every possible tree.
|
|
20
|
+
|
|
21
|
+
### Constructive subfields and function fields
|
|
22
|
+
|
|
23
|
+
Finite quotient fields now support generated subfields, exact membership and nonmembership, primitive-element presentations, and verified embeddings. `coefficient_field` builds fields generated by specified coefficients over the declared constants, with saturated image presentations and memebership tests for supported algebraic extensions. Constructive Lüroth generators and inverse maps are available for supported univariate and multivariate rational inputs of transcendence degree at most one.
|
|
24
|
+
|
|
25
|
+
### Normalized plane curves
|
|
26
|
+
|
|
27
|
+
`algroots.curves` computes geometric genus through projective normalisation, including singularities at infinity and infinitely near points. For supported genus-zero curves, it constructs and verifies birational parametrisations, records exceptional affine charts, and distinguishes rationality over the original constant field from rationality after an explicit extension. Conic descent can identify rational-point obstructions over `QQ`.
|
|
28
|
+
|
|
29
|
+
### Rational-function coefficient domains
|
|
30
|
+
|
|
31
|
+
Finite quotient algebras accept explicit rational-function fields over rational or algebraic-number constants. Multiplication matrices, minimal and characteristic polynomials, traces, norms, inverses, and field checks preserve the coefficient domain. `specialize` reconstructs a quotient from its defining equations at parameter values.
|
|
32
|
+
|
|
33
|
+
### Finite-field quotient tools
|
|
34
|
+
|
|
35
|
+
Added finite coefficient-field constructors and univariate factorization, together with nilradical bases, reduced quotients, primary decompositions, and Frobenius operations for supported finite algebras. Nonreduced and nonmonogenic examples are covered.
|
|
36
|
+
|
|
37
|
+
### Documentation and tests
|
|
38
|
+
|
|
39
|
+
Added guides and executable examples for functional decomposition, generated function fields, plane curves, and rational-function quotient domains. Expanded regression tests.
|
|
40
|
+
|
|
41
|
+
## 0.2.0
|
|
42
|
+
|
|
43
|
+
- Faster exact solving with guarded presolve, improved variable ordering and backend selection, and Gröbner order conversion only when needed.
|
|
44
|
+
- Shared quotient algebra for RURs, multiplication matrices and border bases, with selective caching, lower-memory trace calculations and cost diagnostics.
|
|
45
|
+
- Explicit completeness evidence, radical/nonreduced metadata and multiplicities, exact root certificates and adaptive certification boxes.
|
|
46
|
+
- Bounded singular-root recovery through endgames, deflation and automatic projective chart switching, with clear certification limits.
|
|
47
|
+
- More robust small and clustered roots, bounded Arb precision retries and consistent input checks.
|
|
48
|
+
- Expanded tests, benchmarks, documentation; added 15 examples.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
include CHANGELOG.md CITATION.cff CONTRIBUTING.md LICENSE README.md
|
|
2
|
+
recursive-include docs *.md
|
|
3
|
+
recursive-include examples *.py *.md *.json
|
|
4
|
+
recursive-include benchmarks *.py *.md *.json *.txt
|
|
5
|
+
recursive-include tests *.py
|
|
6
|
+
recursive-include tools *.py
|
|
7
|
+
recursive-exclude * __pycache__ *.py[cod] .DS_Store
|
|
8
|
+
prune .pytest_cache
|
|
9
|
+
prune .ruff_cache
|
|
10
|
+
prune build
|
|
11
|
+
prune dist
|
|
@@ -1,16 +1,15 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: algroots
|
|
3
|
-
Version: 0.
|
|
4
|
-
Summary: Exact and
|
|
3
|
+
Version: 0.3.0
|
|
4
|
+
Summary: Exact and numerical algebraic computation: polynomial systems, finite algebras, function fields, functional decomposition, and plane curves.
|
|
5
|
+
Author-email: Bhuvanesh Bhatt <bhuvaneshbhatt@gmail.com>
|
|
6
|
+
License-Expression: GPL-3.0-only
|
|
5
7
|
Project-URL: Homepage, https://github.com/BhuvaneshBhatt/algroots
|
|
6
8
|
Project-URL: Documentation, https://github.com/BhuvaneshBhatt/algroots/tree/main/docs
|
|
7
9
|
Project-URL: Repository, https://github.com/BhuvaneshBhatt/algroots.git
|
|
8
10
|
Project-URL: Issues, https://github.com/BhuvaneshBhatt/algroots/issues
|
|
9
11
|
Project-URL: Changelog, https://github.com/BhuvaneshBhatt/algroots/blob/main/CHANGELOG.md
|
|
10
|
-
|
|
11
|
-
License-Expression: GPL-3.0-only
|
|
12
|
-
License-File: LICENSE
|
|
13
|
-
Keywords: algebraic-equations,algebraic-geometry,algebraic-numbers,border-basis,groebner-basis,numerical-roots,polynomial-systems,radicals,rational-functions,rational-univariate-representation
|
|
12
|
+
Keywords: algebraic-equations,polynomial-systems,radicals,rational-functions,groebner-basis,algebraic-geometry,numerical-roots,algebraic-numbers,rational-univariate-representation,border-basis
|
|
14
13
|
Classifier: Development Status :: 3 - Alpha
|
|
15
14
|
Classifier: Intended Audience :: Science/Research
|
|
16
15
|
Classifier: Programming Language :: Python :: 3
|
|
@@ -20,35 +19,37 @@ Classifier: Programming Language :: Python :: 3.13
|
|
|
20
19
|
Classifier: Programming Language :: Python :: 3.14
|
|
21
20
|
Classifier: Topic :: Scientific/Engineering :: Mathematics
|
|
22
21
|
Requires-Python: >=3.11
|
|
23
|
-
|
|
22
|
+
Description-Content-Type: text/markdown
|
|
23
|
+
License-File: LICENSE
|
|
24
|
+
Requires-Dist: sympy<2,>=1.14
|
|
24
25
|
Requires-Dist: mpmath<2,>=1.3
|
|
25
26
|
Requires-Dist: python-flint<1,>=0.9
|
|
26
|
-
Requires-Dist:
|
|
27
|
-
Provides-Extra:
|
|
28
|
-
Requires-Dist: pytest
|
|
29
|
-
Requires-Dist:
|
|
27
|
+
Requires-Dist: algrecognize>=0.1.1
|
|
28
|
+
Provides-Extra: test
|
|
29
|
+
Requires-Dist: pytest>=8; extra == "test"
|
|
30
|
+
Requires-Dist: hypothesis>=6; extra == "test"
|
|
31
|
+
Requires-Dist: pytest-cov>=6; extra == "test"
|
|
30
32
|
Provides-Extra: dev
|
|
31
|
-
Requires-Dist: ruff>=0.12; extra ==
|
|
32
|
-
Provides-Extra: mutation
|
|
33
|
-
Requires-Dist: mutmut>=3; extra == 'mutation'
|
|
33
|
+
Requires-Dist: ruff>=0.12; extra == "dev"
|
|
34
34
|
Provides-Extra: release
|
|
35
|
-
Requires-Dist: build>=1.2; extra ==
|
|
36
|
-
Requires-Dist: twine>=6; extra ==
|
|
37
|
-
Provides-Extra:
|
|
38
|
-
Requires-Dist:
|
|
39
|
-
Requires-Dist: pytest-
|
|
40
|
-
|
|
41
|
-
|
|
35
|
+
Requires-Dist: build>=1.2; extra == "release"
|
|
36
|
+
Requires-Dist: twine>=6; extra == "release"
|
|
37
|
+
Provides-Extra: benchmark
|
|
38
|
+
Requires-Dist: pytest>=8; extra == "benchmark"
|
|
39
|
+
Requires-Dist: pytest-benchmark>=5.2; extra == "benchmark"
|
|
40
|
+
Provides-Extra: mutation
|
|
41
|
+
Requires-Dist: mutmut>=3; extra == "mutation"
|
|
42
|
+
Dynamic: license-file
|
|
42
43
|
|
|
43
44
|
# algroots
|
|
44
45
|
|
|
45
|
-
`algroots`
|
|
46
|
+
`algroots` provides exact algebraic computation for polynomial systems, rational functions, finite quotient algebras, function fields, functional decomposition, and algebraic curves. It combines exact Gröbner and quotient-algebra structure with arbitrary-precision FLINT/Arb root extraction. It also provides exact rational univariate representations, border bases, isolated-root certificates and targeted deflation.
|
|
46
47
|
|
|
47
48
|
Use `polysolve` for polynomials and `algsolve` for rational functions, principal rational powers and nested radicals. For now, coefficients must be exact: use `sp.Rational(1, 10)`, rather than `0.1`. `algroots` does not support positive-dimensional varieties, inequalities, noisy coefficients or transcendental equations.
|
|
48
49
|
|
|
49
50
|
## Public API
|
|
50
51
|
|
|
51
|
-
Use `polysolve` or `algsolve` from the package root. Manual certification, quotient algebra, RURs, border bases and continuation tools use their public submodules. See the [namespace map](docs/api.md#root-and-specialized-namespaces) for the full API.
|
|
52
|
+
Use `polysolve` or `algsolve` from the package root. Manual certification, quotient algebra, RURs, border bases and continuation tools use their public submodules. See the [namespace map](https://github.com/BhuvaneshBhatt/algroots/blob/main/docs/api.md#root-and-specialized-namespaces) for the full API.
|
|
52
53
|
|
|
53
54
|
## Install and run
|
|
54
55
|
|
|
@@ -74,7 +75,7 @@ print(result.completeness)
|
|
|
74
75
|
|
|
75
76
|
In the result each tuple follows the supplied variable order. `.roots` stores distinct geometric points with aligned per-root metadata. Use `root_mode="with_multiplicity"` for repeated-root iteration and `.output_roots`; `.multiplicities` reports established local multiplicities. Results use canonical coordinate ordering, with `.ordering` distinguishing exact ordering from numerical fallback. `root_order="required"` requires exact ordering within the proof budgets. `digits` requests output precision; working precision may increase, and `verification_digits` controls the numerical residual standard. A small residual by itself is not an exact root or completeness proof.
|
|
76
77
|
|
|
77
|
-
The automatic dispatch applies guarded exact presolve, deterministic ordering and a grevlex (graded reverse lexicographic) Gröbner basis. Action and RUR share quotient work; conversion to lexicographic with FGLM occurs only when needed. Cost hints preserve exact fallback checks. See [Choosing a Backend](docs/choosing-a-backend.md).
|
|
78
|
+
The automatic dispatch applies guarded exact presolve, deterministic ordering and a grevlex (graded reverse lexicographic) Gröbner basis. Action and RUR share quotient work; conversion to lexicographic with FGLM occurs only when needed. Cost hints preserve exact fallback checks. See [Choosing a Backend](https://github.com/BhuvaneshBhatt/algroots/blob/main/docs/choosing-a-backend.md).
|
|
78
79
|
|
|
79
80
|
## Preserve branches and poles
|
|
80
81
|
|
|
@@ -106,9 +107,9 @@ certificate = result.root_certifications[0].certificate
|
|
|
106
107
|
assert certificate.multiplicity == 2 and certificate.verify()
|
|
107
108
|
```
|
|
108
109
|
|
|
109
|
-
`certify="auto"` records best-effort proof attempts; `certify="required"` raises when a proof
|
|
110
|
+
`certify="auto"` records best-effort proof attempts; `certify="required"` raises when a proof can't be established. Automatic boxes currently require rational coefficients and a globally finite ideal. Exact-point certification also supports algebraic coefficients.
|
|
110
111
|
|
|
111
|
-
Recognition is a different operation. By default, solvers attempt exact coordinate recognition through `algrecognize`; successful jointly certified tuples appear in `recognized_roots`. Recognition failure leaves the numerical result available. `recognize=False` disables that post-processing. See [Certification Workflow](docs/certification-workflow.md) and [Reading Results](docs/reading-results.md).
|
|
112
|
+
Recognition is a different operation. By default, solvers attempt exact coordinate recognition through `algrecognize`; successful jointly certified tuples appear in `recognized_roots`. Recognition failure leaves the numerical result available. `recognize=False` disables that post-processing. See [Certification Workflow](https://github.com/BhuvaneshBhatt/algroots/blob/main/docs/certification-workflow.md) and [Reading Results](https://github.com/BhuvaneshBhatt/algroots/blob/main/docs/reading-results.md).
|
|
112
113
|
|
|
113
114
|
| Evidence | What it establishes |
|
|
114
115
|
|---|---|
|
|
@@ -118,36 +119,50 @@ Recognition is a different operation. By default, solvers attempt exact coordina
|
|
|
118
119
|
| Certified bounded recovery | Distinct exact endpoint proofs account for the exact finite-root count |
|
|
119
120
|
| Numerical paths / monodromy stopping | Numerical or statistical evidence; no certified path or infinity accounting |
|
|
120
121
|
|
|
121
|
-
Per-root certificates and recognition don't automatically upgrade the result-wide completeness status.
|
|
122
|
-
|
|
123
122
|
## Exact algebra and advanced solving
|
|
124
123
|
|
|
125
124
|
| Task | API | Guide |
|
|
126
125
|
|---|---|---|
|
|
127
|
-
| Quotient basis, normal forms, matrices, traces | `QuotientAlgebra` | [Quotient tools](docs/quotient-tools.md) |
|
|
128
|
-
| Exact RUR and exact algebraic points | `compute_rational_univariate_representation`, `solve_rur_representation` | [RUR](docs/rational-univariate-representation.md) |
|
|
129
|
-
| Exact rational border bases | `compute_border_basis`, `compute_border_basis_linear` | [Border bases](docs/exact-border-bases.md) |
|
|
130
|
-
| Singular-root proof and exact local deflation | `certify_isolated_root`, `deflate_isolated_root` | [Singular certification](docs/singular-certification-and-charts.md) |
|
|
131
|
-
| Bounded endgame/deflation/chart recovery | `polysolve(method="homotopy", homotopy_recovery=True)` | [Recovery](docs/recovery-workflow.md) |
|
|
132
|
-
| Numerical projective tracking | `projective_homotopy`, `track_projective_path` | [Chart switching](docs/singular-certification-and-charts.md) |
|
|
133
|
-
| Seeded experimental monodromy | `discover_monodromy_orbit` | [Monodromy](docs/continuation-and-monodromy.md) |
|
|
126
|
+
| Quotient basis, normal forms, matrices, traces | `QuotientAlgebra` | [Quotient tools](https://github.com/BhuvaneshBhatt/algroots/blob/main/docs/quotient-tools.md) |
|
|
127
|
+
| Exact RUR and exact algebraic points | `compute_rational_univariate_representation`, `solve_rur_representation` | [RUR](https://github.com/BhuvaneshBhatt/algroots/blob/main/docs/rational-univariate-representation.md) |
|
|
128
|
+
| Exact rational border bases | `compute_border_basis`, `compute_border_basis_linear` | [Border bases](https://github.com/BhuvaneshBhatt/algroots/blob/main/docs/exact-border-bases.md) |
|
|
129
|
+
| Singular-root proof and exact local deflation | `certify_isolated_root`, `deflate_isolated_root` | [Singular certification](https://github.com/BhuvaneshBhatt/algroots/blob/main/docs/singular-certification-and-charts.md) |
|
|
130
|
+
| Bounded endgame/deflation/chart recovery | `polysolve(method="homotopy", homotopy_recovery=True)` | [Recovery](https://github.com/BhuvaneshBhatt/algroots/blob/main/docs/recovery-workflow.md) |
|
|
131
|
+
| Numerical projective tracking | `projective_homotopy`, `track_projective_path` | [Chart switching](https://github.com/BhuvaneshBhatt/algroots/blob/main/docs/singular-certification-and-charts.md) |
|
|
132
|
+
| Seeded experimental monodromy | `discover_monodromy_orbit` | [Monodromy](https://github.com/BhuvaneshBhatt/algroots/blob/main/docs/continuation-and-monodromy.md) |
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
## Functional decomposition, fields, and curves
|
|
136
|
+
|
|
137
|
+
Algebraic methods also address structural questions for which enumerating roots is not the goal:
|
|
138
|
+
|
|
139
|
+
| Question | Expert API | Guide |
|
|
140
|
+
|---|---|---|
|
|
141
|
+
| Can a rational function be written as a composition of simpler rational functions? | `algroots.functional_decomposition.rational_decompose`, `rational_decomposition_chain` | [Functional decomposition](https://github.com/BhuvaneshBhatt/algroots/blob/main/docs/functional-decomposition.md) |
|
|
142
|
+
| Does an algebraic relation admit a compositional factorization, possibly over a coefficient extension? | `algroots.functional_decomposition.algebraic_decompose`, `discover_algebraic_factors` | [Functional decomposition](https://github.com/BhuvaneshBhatt/algroots/blob/main/docs/functional-decomposition.md) |
|
|
143
|
+
| What subfield is generated by a collection of algebraic or rational elements? | `QuotientAlgebra.subfield`, `algroots.function_fields.coefficient_field`, `luroth_generator` | [Generated subfields](https://github.com/BhuvaneshBhatt/algroots/blob/main/docs/function-fields.md) |
|
|
144
|
+
| What is the geometric genus of a plane curve, and does it have a rational parametrization? | `algroots.curves.PlaneCurve` | [Curve geometry](https://github.com/BhuvaneshBhatt/algroots/blob/main/docs/curves.md) |
|
|
145
|
+
| How can a finite quotient algebra be decomposed into local factors or reduced? | `algroots.finite_decomposition.primary_decomposition`, `reduced_algebra`, `nilradical_basis` | [Finite algebras](https://github.com/BhuvaneshBhatt/algroots/blob/main/docs/finite-algebras.md) |
|
|
146
|
+
| How can one construct a finite coefficient field and factor polynomials over it? | `algroots.finite_fields.finite_field`, `factor_univariate` | [Finite algebras](https://github.com/BhuvaneshBhatt/algroots/blob/main/docs/finite-algebras.md) |
|
|
147
|
+
|
|
148
|
+
These specialized APIs use exact coefficients and explicit search limits. Successful decompositions carry identities that can be checked. Plane-curve operations are distinct from solving a positive-dimensional system by listing all its points.
|
|
134
149
|
|
|
135
150
|
Ordinary `method="homotopy"` targets regular square systems whose required Bézout paths reach finite nonsingular endpoints. Recovery is opt-in, sequential, rational-coefficient and bounded. It adds a finite quotient for proof accounting, preserves successful endpoint proofs across retries, and reports unresolved paths. Neither of those modes certifies numerical paths or roots at infinity. Homotopy is not selected by `auto`.
|
|
136
151
|
|
|
137
152
|
## Numerical precision and stopping
|
|
138
153
|
|
|
139
|
-
Numerical precision and integer budgets follow a common contract: nonzero coordinate components are preserved, root comparisons are relative to coordinate scale, and univariate Arb retries respect the working precision ceiling. Monodromy curvature stopping is a heuristic and gives no completeness evidence. See [precision and conditioning](docs/precision-and-conditioning.md) and [continuation and monodromy](docs/continuation-and-monodromy.md).
|
|
154
|
+
Numerical precision and integer budgets follow a common contract: nonzero coordinate components are preserved, root comparisons are relative to coordinate scale, and univariate Arb retries respect the working precision ceiling. Monodromy curvature stopping is a heuristic and gives no completeness evidence. See [precision and conditioning](https://github.com/BhuvaneshBhatt/algroots/blob/main/docs/precision-and-conditioning.md) and [continuation and monodromy](https://github.com/BhuvaneshBhatt/algroots/blob/main/docs/continuation-and-monodromy.md).
|
|
140
155
|
|
|
141
156
|
## Examples and documentation
|
|
142
157
|
|
|
143
|
-
The [examples catalog](examples/README.md) contains 16 scripts covering solving, branch filtering, recognition, quotient caches, RUR, algebraic fields, multiplicities, clusters, diagnostics, border bases, deflation, recovery, charts, monodromy and failures.
|
|
158
|
+
The [examples catalog](https://github.com/BhuvaneshBhatt/algroots/blob/main/examples/README.md) contains 16 scripts covering solving, branch filtering, recognition, quotient caches, RUR, algebraic fields, multiplicities, clusters, diagnostics, border bases, deflation, recovery, charts, monodromy and failures.
|
|
144
159
|
|
|
145
160
|
```bash
|
|
146
161
|
python examples/run_all.py
|
|
147
162
|
python examples/run_all.py 07_multiplicity_and_boxes.py 15_limits_and_failures.py
|
|
148
163
|
```
|
|
149
164
|
|
|
150
|
-
Start with [Quick Start](docs/quick-start.md), [Supported Problems](docs/supported-problems.md), [Support Matrix](docs/feature-support-matrix.md) and [Reading Results](docs/reading-results.md). The [documentation index](docs/index.md) links every topic, including the [API reference](docs/api.md), [limitations](docs/limitations.md) and [troubleshooting](docs/troubleshooting.md).
|
|
165
|
+
Start with [Quick Start](https://github.com/BhuvaneshBhatt/algroots/blob/main/docs/quick-start.md), [Supported Problems](https://github.com/BhuvaneshBhatt/algroots/blob/main/docs/supported-problems.md), [Support Matrix](https://github.com/BhuvaneshBhatt/algroots/blob/main/docs/feature-support-matrix.md) and [Reading Results](https://github.com/BhuvaneshBhatt/algroots/blob/main/docs/reading-results.md). The [documentation index](https://github.com/BhuvaneshBhatt/algroots/blob/main/docs/index.md) links every topic, including the [API reference](https://github.com/BhuvaneshBhatt/algroots/blob/main/docs/api.md), [limitations](https://github.com/BhuvaneshBhatt/algroots/blob/main/docs/limitations.md) and [troubleshooting](https://github.com/BhuvaneshBhatt/algroots/blob/main/docs/troubleshooting.md).
|
|
151
166
|
|
|
152
167
|
## Development
|
|
153
168
|
|
|
@@ -157,8 +172,8 @@ python -m ruff check .
|
|
|
157
172
|
python -m ruff format --check .
|
|
158
173
|
```
|
|
159
174
|
|
|
160
|
-
Tests execute marked documentation and every catalog example, check navigation and API defaults, compare exact algebra against independent oracles, and exercise adversarial/resource limits. Benchmarks retain exact correctness checks but do not enforce wall-clock thresholds. See [Testing and Validation](docs/testing-and-validation.md) and [Contributing](CONTRIBUTING.md).
|
|
175
|
+
Tests execute marked documentation and every catalog example, check navigation and API defaults, compare exact algebra against independent oracles, and exercise adversarial/resource limits. Benchmarks retain exact correctness checks but do not enforce wall-clock thresholds. See [Testing and Validation](https://github.com/BhuvaneshBhatt/algroots/blob/main/docs/testing-and-validation.md) and [Contributing](https://github.com/BhuvaneshBhatt/algroots/blob/main/CONTRIBUTING.md).
|
|
161
176
|
|
|
162
177
|
## License
|
|
163
178
|
|
|
164
|
-
The package is distributed under the [GPL-3.0 license](https://github.com/BhuvaneshBhatt/
|
|
179
|
+
The package is distributed under the [GPL-3.0 license](https://github.com/BhuvaneshBhatt/algroots/blob/main/LICENSE).
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# algroots
|
|
2
2
|
|
|
3
|
-
`algroots`
|
|
3
|
+
`algroots` provides exact algebraic computation for polynomial systems, rational functions, finite quotient algebras, function fields, functional decomposition, and algebraic curves. It combines exact Gröbner and quotient-algebra structure with arbitrary-precision FLINT/Arb root extraction. It also provides exact rational univariate representations, border bases, isolated-root certificates and targeted deflation.
|
|
4
4
|
|
|
5
5
|
Use `polysolve` for polynomials and `algsolve` for rational functions, principal rational powers and nested radicals. For now, coefficients must be exact: use `sp.Rational(1, 10)`, rather than `0.1`. `algroots` does not support positive-dimensional varieties, inequalities, noisy coefficients or transcendental equations.
|
|
6
6
|
|
|
7
7
|
## Public API
|
|
8
8
|
|
|
9
|
-
Use `polysolve` or `algsolve` from the package root. Manual certification, quotient algebra, RURs, border bases and continuation tools use their public submodules. See the [namespace map](docs/api.md#root-and-specialized-namespaces) for the full API.
|
|
9
|
+
Use `polysolve` or `algsolve` from the package root. Manual certification, quotient algebra, RURs, border bases and continuation tools use their public submodules. See the [namespace map](https://github.com/BhuvaneshBhatt/algroots/blob/main/docs/api.md#root-and-specialized-namespaces) for the full API.
|
|
10
10
|
|
|
11
11
|
## Install and run
|
|
12
12
|
|
|
@@ -32,7 +32,7 @@ print(result.completeness)
|
|
|
32
32
|
|
|
33
33
|
In the result each tuple follows the supplied variable order. `.roots` stores distinct geometric points with aligned per-root metadata. Use `root_mode="with_multiplicity"` for repeated-root iteration and `.output_roots`; `.multiplicities` reports established local multiplicities. Results use canonical coordinate ordering, with `.ordering` distinguishing exact ordering from numerical fallback. `root_order="required"` requires exact ordering within the proof budgets. `digits` requests output precision; working precision may increase, and `verification_digits` controls the numerical residual standard. A small residual by itself is not an exact root or completeness proof.
|
|
34
34
|
|
|
35
|
-
The automatic dispatch applies guarded exact presolve, deterministic ordering and a grevlex (graded reverse lexicographic) Gröbner basis. Action and RUR share quotient work; conversion to lexicographic with FGLM occurs only when needed. Cost hints preserve exact fallback checks. See [Choosing a Backend](docs/choosing-a-backend.md).
|
|
35
|
+
The automatic dispatch applies guarded exact presolve, deterministic ordering and a grevlex (graded reverse lexicographic) Gröbner basis. Action and RUR share quotient work; conversion to lexicographic with FGLM occurs only when needed. Cost hints preserve exact fallback checks. See [Choosing a Backend](https://github.com/BhuvaneshBhatt/algroots/blob/main/docs/choosing-a-backend.md).
|
|
36
36
|
|
|
37
37
|
## Preserve branches and poles
|
|
38
38
|
|
|
@@ -64,9 +64,9 @@ certificate = result.root_certifications[0].certificate
|
|
|
64
64
|
assert certificate.multiplicity == 2 and certificate.verify()
|
|
65
65
|
```
|
|
66
66
|
|
|
67
|
-
`certify="auto"` records best-effort proof attempts; `certify="required"` raises when a proof
|
|
67
|
+
`certify="auto"` records best-effort proof attempts; `certify="required"` raises when a proof can't be established. Automatic boxes currently require rational coefficients and a globally finite ideal. Exact-point certification also supports algebraic coefficients.
|
|
68
68
|
|
|
69
|
-
Recognition is a different operation. By default, solvers attempt exact coordinate recognition through `algrecognize`; successful jointly certified tuples appear in `recognized_roots`. Recognition failure leaves the numerical result available. `recognize=False` disables that post-processing. See [Certification Workflow](docs/certification-workflow.md) and [Reading Results](docs/reading-results.md).
|
|
69
|
+
Recognition is a different operation. By default, solvers attempt exact coordinate recognition through `algrecognize`; successful jointly certified tuples appear in `recognized_roots`. Recognition failure leaves the numerical result available. `recognize=False` disables that post-processing. See [Certification Workflow](https://github.com/BhuvaneshBhatt/algroots/blob/main/docs/certification-workflow.md) and [Reading Results](https://github.com/BhuvaneshBhatt/algroots/blob/main/docs/reading-results.md).
|
|
70
70
|
|
|
71
71
|
| Evidence | What it establishes |
|
|
72
72
|
|---|---|
|
|
@@ -76,36 +76,50 @@ Recognition is a different operation. By default, solvers attempt exact coordina
|
|
|
76
76
|
| Certified bounded recovery | Distinct exact endpoint proofs account for the exact finite-root count |
|
|
77
77
|
| Numerical paths / monodromy stopping | Numerical or statistical evidence; no certified path or infinity accounting |
|
|
78
78
|
|
|
79
|
-
Per-root certificates and recognition don't automatically upgrade the result-wide completeness status.
|
|
80
|
-
|
|
81
79
|
## Exact algebra and advanced solving
|
|
82
80
|
|
|
83
81
|
| Task | API | Guide |
|
|
84
82
|
|---|---|---|
|
|
85
|
-
| Quotient basis, normal forms, matrices, traces | `QuotientAlgebra` | [Quotient tools](docs/quotient-tools.md) |
|
|
86
|
-
| Exact RUR and exact algebraic points | `compute_rational_univariate_representation`, `solve_rur_representation` | [RUR](docs/rational-univariate-representation.md) |
|
|
87
|
-
| Exact rational border bases | `compute_border_basis`, `compute_border_basis_linear` | [Border bases](docs/exact-border-bases.md) |
|
|
88
|
-
| Singular-root proof and exact local deflation | `certify_isolated_root`, `deflate_isolated_root` | [Singular certification](docs/singular-certification-and-charts.md) |
|
|
89
|
-
| Bounded endgame/deflation/chart recovery | `polysolve(method="homotopy", homotopy_recovery=True)` | [Recovery](docs/recovery-workflow.md) |
|
|
90
|
-
| Numerical projective tracking | `projective_homotopy`, `track_projective_path` | [Chart switching](docs/singular-certification-and-charts.md) |
|
|
91
|
-
| Seeded experimental monodromy | `discover_monodromy_orbit` | [Monodromy](docs/continuation-and-monodromy.md) |
|
|
83
|
+
| Quotient basis, normal forms, matrices, traces | `QuotientAlgebra` | [Quotient tools](https://github.com/BhuvaneshBhatt/algroots/blob/main/docs/quotient-tools.md) |
|
|
84
|
+
| Exact RUR and exact algebraic points | `compute_rational_univariate_representation`, `solve_rur_representation` | [RUR](https://github.com/BhuvaneshBhatt/algroots/blob/main/docs/rational-univariate-representation.md) |
|
|
85
|
+
| Exact rational border bases | `compute_border_basis`, `compute_border_basis_linear` | [Border bases](https://github.com/BhuvaneshBhatt/algroots/blob/main/docs/exact-border-bases.md) |
|
|
86
|
+
| Singular-root proof and exact local deflation | `certify_isolated_root`, `deflate_isolated_root` | [Singular certification](https://github.com/BhuvaneshBhatt/algroots/blob/main/docs/singular-certification-and-charts.md) |
|
|
87
|
+
| Bounded endgame/deflation/chart recovery | `polysolve(method="homotopy", homotopy_recovery=True)` | [Recovery](https://github.com/BhuvaneshBhatt/algroots/blob/main/docs/recovery-workflow.md) |
|
|
88
|
+
| Numerical projective tracking | `projective_homotopy`, `track_projective_path` | [Chart switching](https://github.com/BhuvaneshBhatt/algroots/blob/main/docs/singular-certification-and-charts.md) |
|
|
89
|
+
| Seeded experimental monodromy | `discover_monodromy_orbit` | [Monodromy](https://github.com/BhuvaneshBhatt/algroots/blob/main/docs/continuation-and-monodromy.md) |
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
## Functional decomposition, fields, and curves
|
|
93
|
+
|
|
94
|
+
Algebraic methods also address structural questions for which enumerating roots is not the goal:
|
|
95
|
+
|
|
96
|
+
| Question | Expert API | Guide |
|
|
97
|
+
|---|---|---|
|
|
98
|
+
| Can a rational function be written as a composition of simpler rational functions? | `algroots.functional_decomposition.rational_decompose`, `rational_decomposition_chain` | [Functional decomposition](https://github.com/BhuvaneshBhatt/algroots/blob/main/docs/functional-decomposition.md) |
|
|
99
|
+
| Does an algebraic relation admit a compositional factorization, possibly over a coefficient extension? | `algroots.functional_decomposition.algebraic_decompose`, `discover_algebraic_factors` | [Functional decomposition](https://github.com/BhuvaneshBhatt/algroots/blob/main/docs/functional-decomposition.md) |
|
|
100
|
+
| What subfield is generated by a collection of algebraic or rational elements? | `QuotientAlgebra.subfield`, `algroots.function_fields.coefficient_field`, `luroth_generator` | [Generated subfields](https://github.com/BhuvaneshBhatt/algroots/blob/main/docs/function-fields.md) |
|
|
101
|
+
| What is the geometric genus of a plane curve, and does it have a rational parametrization? | `algroots.curves.PlaneCurve` | [Curve geometry](https://github.com/BhuvaneshBhatt/algroots/blob/main/docs/curves.md) |
|
|
102
|
+
| How can a finite quotient algebra be decomposed into local factors or reduced? | `algroots.finite_decomposition.primary_decomposition`, `reduced_algebra`, `nilradical_basis` | [Finite algebras](https://github.com/BhuvaneshBhatt/algroots/blob/main/docs/finite-algebras.md) |
|
|
103
|
+
| How can one construct a finite coefficient field and factor polynomials over it? | `algroots.finite_fields.finite_field`, `factor_univariate` | [Finite algebras](https://github.com/BhuvaneshBhatt/algroots/blob/main/docs/finite-algebras.md) |
|
|
104
|
+
|
|
105
|
+
These specialized APIs use exact coefficients and explicit search limits. Successful decompositions carry identities that can be checked. Plane-curve operations are distinct from solving a positive-dimensional system by listing all its points.
|
|
92
106
|
|
|
93
107
|
Ordinary `method="homotopy"` targets regular square systems whose required Bézout paths reach finite nonsingular endpoints. Recovery is opt-in, sequential, rational-coefficient and bounded. It adds a finite quotient for proof accounting, preserves successful endpoint proofs across retries, and reports unresolved paths. Neither of those modes certifies numerical paths or roots at infinity. Homotopy is not selected by `auto`.
|
|
94
108
|
|
|
95
109
|
## Numerical precision and stopping
|
|
96
110
|
|
|
97
|
-
Numerical precision and integer budgets follow a common contract: nonzero coordinate components are preserved, root comparisons are relative to coordinate scale, and univariate Arb retries respect the working precision ceiling. Monodromy curvature stopping is a heuristic and gives no completeness evidence. See [precision and conditioning](docs/precision-and-conditioning.md) and [continuation and monodromy](docs/continuation-and-monodromy.md).
|
|
111
|
+
Numerical precision and integer budgets follow a common contract: nonzero coordinate components are preserved, root comparisons are relative to coordinate scale, and univariate Arb retries respect the working precision ceiling. Monodromy curvature stopping is a heuristic and gives no completeness evidence. See [precision and conditioning](https://github.com/BhuvaneshBhatt/algroots/blob/main/docs/precision-and-conditioning.md) and [continuation and monodromy](https://github.com/BhuvaneshBhatt/algroots/blob/main/docs/continuation-and-monodromy.md).
|
|
98
112
|
|
|
99
113
|
## Examples and documentation
|
|
100
114
|
|
|
101
|
-
The [examples catalog](examples/README.md) contains 16 scripts covering solving, branch filtering, recognition, quotient caches, RUR, algebraic fields, multiplicities, clusters, diagnostics, border bases, deflation, recovery, charts, monodromy and failures.
|
|
115
|
+
The [examples catalog](https://github.com/BhuvaneshBhatt/algroots/blob/main/examples/README.md) contains 16 scripts covering solving, branch filtering, recognition, quotient caches, RUR, algebraic fields, multiplicities, clusters, diagnostics, border bases, deflation, recovery, charts, monodromy and failures.
|
|
102
116
|
|
|
103
117
|
```bash
|
|
104
118
|
python examples/run_all.py
|
|
105
119
|
python examples/run_all.py 07_multiplicity_and_boxes.py 15_limits_and_failures.py
|
|
106
120
|
```
|
|
107
121
|
|
|
108
|
-
Start with [Quick Start](docs/quick-start.md), [Supported Problems](docs/supported-problems.md), [Support Matrix](docs/feature-support-matrix.md) and [Reading Results](docs/reading-results.md). The [documentation index](docs/index.md) links every topic, including the [API reference](docs/api.md), [limitations](docs/limitations.md) and [troubleshooting](docs/troubleshooting.md).
|
|
122
|
+
Start with [Quick Start](https://github.com/BhuvaneshBhatt/algroots/blob/main/docs/quick-start.md), [Supported Problems](https://github.com/BhuvaneshBhatt/algroots/blob/main/docs/supported-problems.md), [Support Matrix](https://github.com/BhuvaneshBhatt/algroots/blob/main/docs/feature-support-matrix.md) and [Reading Results](https://github.com/BhuvaneshBhatt/algroots/blob/main/docs/reading-results.md). The [documentation index](https://github.com/BhuvaneshBhatt/algroots/blob/main/docs/index.md) links every topic, including the [API reference](https://github.com/BhuvaneshBhatt/algroots/blob/main/docs/api.md), [limitations](https://github.com/BhuvaneshBhatt/algroots/blob/main/docs/limitations.md) and [troubleshooting](https://github.com/BhuvaneshBhatt/algroots/blob/main/docs/troubleshooting.md).
|
|
109
123
|
|
|
110
124
|
## Development
|
|
111
125
|
|
|
@@ -115,8 +129,8 @@ python -m ruff check .
|
|
|
115
129
|
python -m ruff format --check .
|
|
116
130
|
```
|
|
117
131
|
|
|
118
|
-
Tests execute marked documentation and every catalog example, check navigation and API defaults, compare exact algebra against independent oracles, and exercise adversarial/resource limits. Benchmarks retain exact correctness checks but do not enforce wall-clock thresholds. See [Testing and Validation](docs/testing-and-validation.md) and [Contributing](CONTRIBUTING.md).
|
|
132
|
+
Tests execute marked documentation and every catalog example, check navigation and API defaults, compare exact algebra against independent oracles, and exercise adversarial/resource limits. Benchmarks retain exact correctness checks but do not enforce wall-clock thresholds. See [Testing and Validation](https://github.com/BhuvaneshBhatt/algroots/blob/main/docs/testing-and-validation.md) and [Contributing](https://github.com/BhuvaneshBhatt/algroots/blob/main/CONTRIBUTING.md).
|
|
119
133
|
|
|
120
134
|
## License
|
|
121
135
|
|
|
122
|
-
The package is distributed under the [GPL-3.0 license](https://github.com/BhuvaneshBhatt/
|
|
136
|
+
The package is distributed under the [GPL-3.0 license](https://github.com/BhuvaneshBhatt/algroots/blob/main/LICENSE).
|