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.
Files changed (223) hide show
  1. algroots-0.3.0/CHANGELOG.md +48 -0
  2. {algroots-0.2.0 → algroots-0.3.0}/CITATION.cff +1 -1
  3. algroots-0.3.0/MANIFEST.in +11 -0
  4. {algroots-0.2.0 → algroots-0.3.0}/PKG-INFO +56 -41
  5. {algroots-0.2.0 → algroots-0.3.0}/README.md +33 -19
  6. {algroots-0.2.0 → algroots-0.3.0}/docs/api.md +97 -258
  7. algroots-0.3.0/docs/certification-workflow.md +48 -0
  8. {algroots-0.2.0 → algroots-0.3.0}/docs/choosing-a-backend.md +1 -6
  9. {algroots-0.2.0 → algroots-0.3.0}/docs/completeness-versus-verification.md +1 -5
  10. algroots-0.3.0/docs/curves.md +103 -0
  11. {algroots-0.2.0 → algroots-0.3.0}/docs/exact-recognition.md +1 -2
  12. algroots-0.3.0/docs/examples-gallery.md +35 -0
  13. algroots-0.3.0/docs/feature-support-matrix.md +50 -0
  14. algroots-0.3.0/docs/finite-algebras.md +91 -0
  15. algroots-0.3.0/docs/function-fields.md +132 -0
  16. algroots-0.3.0/docs/functional-decomposition.md +214 -0
  17. {algroots-0.2.0 → algroots-0.3.0}/docs/guarantees-and-result-semantics.md +1 -3
  18. {algroots-0.2.0 → algroots-0.3.0}/docs/homotopy-continuation.md +3 -11
  19. {algroots-0.2.0 → algroots-0.3.0}/docs/index.md +10 -4
  20. algroots-0.3.0/docs/limitations.md +49 -0
  21. {algroots-0.2.0 → algroots-0.3.0}/docs/multiplicity-and-singular-roots.md +3 -3
  22. {algroots-0.2.0 → algroots-0.3.0}/docs/numerical-reliability.md +5 -1
  23. {algroots-0.2.0 → algroots-0.3.0}/docs/performance-model.md +7 -27
  24. {algroots-0.2.0 → algroots-0.3.0}/docs/quick-start.md +1 -4
  25. algroots-0.3.0/docs/quotient-tools.md +51 -0
  26. {algroots-0.2.0 → algroots-0.3.0}/docs/reading-results.md +7 -26
  27. {algroots-0.2.0 → algroots-0.3.0}/docs/recovery-workflow.md +7 -30
  28. algroots-0.3.0/docs/singular-certification-and-charts.md +77 -0
  29. algroots-0.3.0/docs/testing-and-validation.md +57 -0
  30. algroots-0.3.0/examples/17_generated_subfields.py +44 -0
  31. algroots-0.3.0/examples/18_normalized_curve_rationality.py +37 -0
  32. algroots-0.3.0/examples/19_functional_decomposition.py +32 -0
  33. algroots-0.3.0/examples/20_automatic_algebraic_discovery.py +37 -0
  34. algroots-0.3.0/examples/21_multivariate_luroth.py +32 -0
  35. algroots-0.3.0/examples/22_multivariate_decomposition.py +37 -0
  36. algroots-0.3.0/examples/23_decomposition_chains.py +36 -0
  37. algroots-0.3.0/examples/24_finite_algebras.py +37 -0
  38. {algroots-0.2.0 → algroots-0.3.0}/examples/README.md +15 -18
  39. {algroots-0.2.0 → algroots-0.3.0}/examples/catalog.json +48 -0
  40. {algroots-0.2.0 → algroots-0.3.0}/pyproject.toml +11 -7
  41. algroots-0.3.0/setup.cfg +4 -0
  42. {algroots-0.2.0 → algroots-0.3.0}/src/algroots/__init__.py +1 -1
  43. algroots-0.3.0/src/algroots/_algebraic_discovery.py +614 -0
  44. algroots-0.3.0/src/algroots/_coefficient_curves.py +156 -0
  45. algroots-0.3.0/src/algroots/_curve_constants.py +84 -0
  46. algroots-0.3.0/src/algroots/_curve_normalization.py +196 -0
  47. algroots-0.3.0/src/algroots/_curve_parametrization.py +378 -0
  48. algroots-0.3.0/src/algroots/_decomposition_chains.py +735 -0
  49. algroots-0.3.0/src/algroots/_decomposition_verification.py +159 -0
  50. algroots-0.3.0/src/algroots/_luroth.py +176 -0
  51. algroots-0.3.0/src/algroots/_multivariate_decomposition.py +363 -0
  52. {algroots-0.2.0 → algroots-0.3.0}/src/algroots/certification.py +13 -0
  53. algroots-0.3.0/src/algroots/curves.py +385 -0
  54. algroots-0.3.0/src/algroots/domains.py +187 -0
  55. {algroots-0.2.0 → algroots-0.3.0}/src/algroots/endgames.py +5 -0
  56. algroots-0.3.0/src/algroots/finite_decomposition.py +165 -0
  57. algroots-0.3.0/src/algroots/finite_fields.py +165 -0
  58. algroots-0.3.0/src/algroots/function_fields.py +766 -0
  59. algroots-0.3.0/src/algroots/functional_decomposition.py +797 -0
  60. {algroots-0.2.0 → algroots-0.3.0}/src/algroots/monodromy.py +16 -0
  61. {algroots-0.2.0 → algroots-0.3.0}/src/algroots/numerical.py +58 -22
  62. {algroots-0.2.0 → algroots-0.3.0}/src/algroots/quotient.py +304 -47
  63. {algroots-0.2.0 → algroots-0.3.0}/src/algroots/rational_univariate/linear_algebra.py +4 -3
  64. {algroots-0.2.0 → algroots-0.3.0}/src/algroots/solver.py +10 -1
  65. algroots-0.3.0/src/algroots/subfields.py +304 -0
  66. algroots-0.3.0/src/algroots.egg-info/PKG-INFO +179 -0
  67. algroots-0.3.0/src/algroots.egg-info/SOURCES.txt +209 -0
  68. algroots-0.3.0/src/algroots.egg-info/dependency_links.txt +1 -0
  69. algroots-0.3.0/src/algroots.egg-info/requires.txt +23 -0
  70. algroots-0.3.0/src/algroots.egg-info/top_level.txt +1 -0
  71. {algroots-0.2.0 → algroots-0.3.0}/tests/regressions/test_pole_component_saturation.py +1 -1
  72. {algroots-0.2.0 → algroots-0.3.0}/tests/test_action_matrix_math.py +1 -1
  73. {algroots-0.2.0 → algroots-0.3.0}/tests/test_action_matrix_oracle_randomized.py +1 -1
  74. algroots-0.3.0/tests/test_algebraic_acb_isolation.py +83 -0
  75. algroots-0.3.0/tests/test_algebraic_discovery.py +208 -0
  76. {algroots-0.2.0 → algroots-0.3.0}/tests/test_backend_differential.py +1 -1
  77. {algroots-0.2.0 → algroots-0.3.0}/tests/test_border_basis.py +1 -1
  78. algroots-0.3.0/tests/test_coefficient_fields.py +114 -0
  79. algroots-0.3.0/tests/test_curves.py +222 -0
  80. algroots-0.3.0/tests/test_decomposition_chains.py +267 -0
  81. {algroots-0.2.0 → algroots-0.3.0}/tests/test_dispatch_calibration.py +1 -1
  82. {algroots-0.2.0 → algroots-0.3.0}/tests/test_documentation_consistency.py +26 -0
  83. algroots-0.3.0/tests/test_domains.py +63 -0
  84. algroots-0.3.0/tests/test_finite_decomposition.py +42 -0
  85. algroots-0.3.0/tests/test_finite_fields.py +118 -0
  86. algroots-0.3.0/tests/test_functional_decomposition.py +263 -0
  87. algroots-0.3.0/tests/test_luroth.py +283 -0
  88. {algroots-0.2.0 → algroots-0.3.0}/tests/test_monodromy_recognition_end_to_end.py +1 -1
  89. algroots-0.3.0/tests/test_multivariate_decomposition.py +325 -0
  90. {algroots-0.2.0 → algroots-0.3.0}/tests/test_numerical_contracts.py +1 -3
  91. {algroots-0.2.0 → algroots-0.3.0}/tests/test_path_tracking.py +1 -1
  92. {algroots-0.2.0 → algroots-0.3.0}/tests/test_quotient_algebra.py +2 -2
  93. algroots-0.3.0/tests/test_quotient_function_fields.py +178 -0
  94. {algroots-0.2.0 → algroots-0.3.0}/tests/test_recognition.py +1 -1
  95. {algroots-0.2.0 → algroots-0.3.0}/tests/test_recovery_orchestration.py +8 -3
  96. {algroots-0.2.0 → algroots-0.3.0}/tests/test_semialg_shared_algebra_regressions.py +1 -1
  97. {algroots-0.2.0 → algroots-0.3.0}/tests/test_singular_certification.py +11 -6
  98. algroots-0.3.0/tests/test_subfields.py +76 -0
  99. {algroots-0.2.0 → algroots-0.3.0}/tests/test_total_degree_homotopy.py +2 -2
  100. algroots-0.2.0/.github/workflows/benchmarks.yml +0 -25
  101. algroots-0.2.0/.github/workflows/mutation.yml +0 -38
  102. algroots-0.2.0/.github/workflows/python-package.yml +0 -275
  103. algroots-0.2.0/.gitignore +0 -30
  104. algroots-0.2.0/CHANGELOG.md +0 -10
  105. algroots-0.2.0/docs/certification-workflow.md +0 -69
  106. algroots-0.2.0/docs/examples-gallery.md +0 -22
  107. algroots-0.2.0/docs/feature-support-matrix.md +0 -37
  108. algroots-0.2.0/docs/limitations.md +0 -69
  109. algroots-0.2.0/docs/quotient-tools.md +0 -50
  110. algroots-0.2.0/docs/singular-certification-and-charts.md +0 -142
  111. algroots-0.2.0/docs/testing-and-validation.md +0 -67
  112. {algroots-0.2.0 → algroots-0.3.0}/CONTRIBUTING.md +0 -0
  113. {algroots-0.2.0 → algroots-0.3.0}/LICENSE +0 -0
  114. {algroots-0.2.0 → algroots-0.3.0}/benchmarks/README.md +0 -0
  115. {algroots-0.2.0 → algroots-0.3.0}/benchmarks/expanded_calibration.py +0 -0
  116. {algroots-0.2.0 → algroots-0.3.0}/benchmarks/expanded_calibration_results.json +0 -0
  117. {algroots-0.2.0 → algroots-0.3.0}/benchmarks/portfolio_calibration.py +0 -0
  118. {algroots-0.2.0 → algroots-0.3.0}/benchmarks/portfolio_calibration_results.json +0 -0
  119. {algroots-0.2.0 → algroots-0.3.0}/benchmarks/quotient_profile.py +0 -0
  120. {algroots-0.2.0 → algroots-0.3.0}/benchmarks/quotient_profile_baseline.txt +0 -0
  121. {algroots-0.2.0 → algroots-0.3.0}/benchmarks/quotient_profile_current.txt +0 -0
  122. {algroots-0.2.0 → algroots-0.3.0}/benchmarks/quotient_profile_results.json +0 -0
  123. {algroots-0.2.0 → algroots-0.3.0}/benchmarks/test_solver_benchmarks.py +0 -0
  124. {algroots-0.2.0 → algroots-0.3.0}/docs/algorithms.md +0 -0
  125. {algroots-0.2.0 → algroots-0.3.0}/docs/branch-semantics.md +0 -0
  126. {algroots-0.2.0 → algroots-0.3.0}/docs/continuation-and-monodromy.md +0 -0
  127. {algroots-0.2.0 → algroots-0.3.0}/docs/end-to-end-example.md +0 -0
  128. {algroots-0.2.0 → algroots-0.3.0}/docs/exact-border-bases.md +0 -0
  129. {algroots-0.2.0 → algroots-0.3.0}/docs/precision-and-conditioning.md +0 -0
  130. {algroots-0.2.0 → algroots-0.3.0}/docs/rational-univariate-representation.md +0 -0
  131. {algroots-0.2.0 → algroots-0.3.0}/docs/supported-problems.md +0 -0
  132. {algroots-0.2.0 → algroots-0.3.0}/docs/troubleshooting.md +0 -0
  133. {algroots-0.2.0 → algroots-0.3.0}/examples/01_polynomial_system.py +0 -0
  134. {algroots-0.2.0 → algroots-0.3.0}/examples/02_branches_and_poles.py +0 -0
  135. {algroots-0.2.0 → algroots-0.3.0}/examples/03_exact_recognition.py +0 -0
  136. {algroots-0.2.0 → algroots-0.3.0}/examples/04_quotient_and_cache.py +0 -0
  137. {algroots-0.2.0 → algroots-0.3.0}/examples/05_exact_rur.py +0 -0
  138. {algroots-0.2.0 → algroots-0.3.0}/examples/06_algebraic_coefficients.py +0 -0
  139. {algroots-0.2.0 → algroots-0.3.0}/examples/07_multiplicity_and_boxes.py +0 -0
  140. {algroots-0.2.0 → algroots-0.3.0}/examples/08_clustered_roots.py +0 -0
  141. {algroots-0.2.0 → algroots-0.3.0}/examples/09_presolve_and_costs.py +0 -0
  142. {algroots-0.2.0 → algroots-0.3.0}/examples/10_border_bases.py +0 -0
  143. {algroots-0.2.0 → algroots-0.3.0}/examples/11_singular_deflation.py +0 -0
  144. {algroots-0.2.0 → algroots-0.3.0}/examples/12_bounded_homotopy_recovery.py +0 -0
  145. {algroots-0.2.0 → algroots-0.3.0}/examples/13_projective_chart_switching.py +0 -0
  146. {algroots-0.2.0 → algroots-0.3.0}/examples/14_seeded_monodromy.py +0 -0
  147. {algroots-0.2.0 → algroots-0.3.0}/examples/15_limits_and_failures.py +0 -0
  148. {algroots-0.2.0 → algroots-0.3.0}/examples/16_multiplicity_views_and_order.py +0 -0
  149. {algroots-0.2.0 → algroots-0.3.0}/examples/run_all.py +0 -0
  150. {algroots-0.2.0 → algroots-0.3.0}/src/algroots/_validation.py +0 -0
  151. {algroots-0.2.0 → algroots-0.3.0}/src/algroots/algebraic.py +0 -0
  152. {algroots-0.2.0 → algroots-0.3.0}/src/algroots/algebraization.py +0 -0
  153. {algroots-0.2.0 → algroots-0.3.0}/src/algroots/border_basis.py +0 -0
  154. {algroots-0.2.0 → algroots-0.3.0}/src/algroots/continuation.py +0 -0
  155. {algroots-0.2.0 → algroots-0.3.0}/src/algroots/cost_policy.py +0 -0
  156. {algroots-0.2.0 → algroots-0.3.0}/src/algroots/deflation.py +0 -0
  157. {algroots-0.2.0 → algroots-0.3.0}/src/algroots/errors.py +0 -0
  158. {algroots-0.2.0 → algroots-0.3.0}/src/algroots/monodromy_stopping.py +0 -0
  159. {algroots-0.2.0 → algroots-0.3.0}/src/algroots/presolve.py +0 -0
  160. {algroots-0.2.0 → algroots-0.3.0}/src/algroots/projective_tracking.py +0 -0
  161. {algroots-0.2.0 → algroots-0.3.0}/src/algroots/rational_univariate/__init__.py +0 -0
  162. {algroots-0.2.0 → algroots-0.3.0}/src/algroots/rational_univariate/construction.py +0 -0
  163. {algroots-0.2.0 → algroots-0.3.0}/src/algroots/rational_univariate/quotient.py +0 -0
  164. {algroots-0.2.0 → algroots-0.3.0}/src/algroots/rational_univariate/representation.py +0 -0
  165. {algroots-0.2.0 → algroots-0.3.0}/src/algroots/rational_univariate/solve.py +0 -0
  166. {algroots-0.2.0 → algroots-0.3.0}/src/algroots/recognition.py +0 -0
  167. {algroots-0.2.0 → algroots-0.3.0}/src/algroots/recovery.py +0 -0
  168. {algroots-0.2.0 → algroots-0.3.0}/src/algroots/root_output.py +0 -0
  169. {algroots-0.2.0 → algroots-0.3.0}/src/algroots/total_degree_homotopy.py +0 -0
  170. {algroots-0.2.0 → algroots-0.3.0}/src/algroots/univariate.py +0 -0
  171. {algroots-0.2.0 → algroots-0.3.0}/tests/conftest.py +0 -0
  172. {algroots-0.2.0 → algroots-0.3.0}/tests/regressions/test_branch_filter_negative_two_thirds.py +0 -0
  173. {algroots-0.2.0 → algroots-0.3.0}/tests/regressions/test_separator_collision_retry.py +0 -0
  174. {algroots-0.2.0 → algroots-0.3.0}/tests/test_action_matrix.py +0 -0
  175. {algroots-0.2.0 → algroots-0.3.0}/tests/test_action_matrix_structure.py +0 -0
  176. {algroots-0.2.0 → algroots-0.3.0}/tests/test_adaptive_boxes_and_cache.py +0 -0
  177. {algroots-0.2.0 → algroots-0.3.0}/tests/test_algebraic_systems.py +0 -0
  178. {algroots-0.2.0 → algroots-0.3.0}/tests/test_algebraization_equivalence.py +0 -0
  179. {algroots-0.2.0 → algroots-0.3.0}/tests/test_automatic_certification.py +0 -0
  180. {algroots-0.2.0 → algroots-0.3.0}/tests/test_branch_and_pole_adversarial.py +0 -0
  181. {algroots-0.2.0 → algroots-0.3.0}/tests/test_cancellation_presolve.py +0 -0
  182. {algroots-0.2.0 → algroots-0.3.0}/tests/test_capability_matrix.py +0 -0
  183. {algroots-0.2.0 → algroots-0.3.0}/tests/test_clustered_roots_and_precision.py +0 -0
  184. {algroots-0.2.0 → algroots-0.3.0}/tests/test_coefficient_domain_stress.py +0 -0
  185. {algroots-0.2.0 → algroots-0.3.0}/tests/test_complex_branch_semantics.py +0 -0
  186. {algroots-0.2.0 → algroots-0.3.0}/tests/test_constructed_systems_hypothesis.py +0 -0
  187. {algroots-0.2.0 → algroots-0.3.0}/tests/test_cost_policy.py +0 -0
  188. {algroots-0.2.0 → algroots-0.3.0}/tests/test_diagnostic_retries.py +0 -0
  189. {algroots-0.2.0 → algroots-0.3.0}/tests/test_documentation_examples.py +0 -0
  190. {algroots-0.2.0 → algroots-0.3.0}/tests/test_documented_workflows.py +0 -0
  191. {algroots-0.2.0 → algroots-0.3.0}/tests/test_endgames.py +0 -0
  192. {algroots-0.2.0 → algroots-0.3.0}/tests/test_exact_certification.py +0 -0
  193. {algroots-0.2.0 → algroots-0.3.0}/tests/test_flint_backend_ci.py +0 -0
  194. {algroots-0.2.0 → algroots-0.3.0}/tests/test_homotopy_differential_hypothesis.py +0 -0
  195. {algroots-0.2.0 → algroots-0.3.0}/tests/test_known_point_sets_hypothesis.py +0 -0
  196. {algroots-0.2.0 → algroots-0.3.0}/tests/test_metamorphic_invariance_hypothesis.py +0 -0
  197. {algroots-0.2.0 → algroots-0.3.0}/tests/test_mixed_precision_conditioning.py +0 -0
  198. {algroots-0.2.0 → algroots-0.3.0}/tests/test_monodromy_algebraic_systems.py +0 -0
  199. {algroots-0.2.0 → algroots-0.3.0}/tests/test_monodromy_core_differential.py +0 -0
  200. {algroots-0.2.0 → algroots-0.3.0}/tests/test_monodromy_loop.py +0 -0
  201. {algroots-0.2.0 → algroots-0.3.0}/tests/test_monodromy_metadata_hypothesis.py +0 -0
  202. {algroots-0.2.0 → algroots-0.3.0}/tests/test_monodromy_orbits.py +0 -0
  203. {algroots-0.2.0 → algroots-0.3.0}/tests/test_monodromy_stopping.py +0 -0
  204. {algroots-0.2.0 → algroots-0.3.0}/tests/test_multiplicity_and_singular_roots.py +0 -0
  205. {algroots-0.2.0 → algroots-0.3.0}/tests/test_namespace_function_contracts.py +0 -0
  206. {algroots-0.2.0 → algroots-0.3.0}/tests/test_newton_refinement_adversarial.py +0 -0
  207. {algroots-0.2.0 → algroots-0.3.0}/tests/test_numerical_pipeline.py +0 -0
  208. {algroots-0.2.0 → algroots-0.3.0}/tests/test_profiled_quotient.py +0 -0
  209. {algroots-0.2.0 → algroots-0.3.0}/tests/test_projective_chart_switching.py +0 -0
  210. {algroots-0.2.0 → algroots-0.3.0}/tests/test_public_api.py +0 -0
  211. {algroots-0.2.0 → algroots-0.3.0}/tests/test_rational_univariate.py +0 -0
  212. {algroots-0.2.0 → algroots-0.3.0}/tests/test_representation_invariance.py +0 -0
  213. {algroots-0.2.0 → algroots-0.3.0}/tests/test_root_output.py +0 -0
  214. {algroots-0.2.0 → algroots-0.3.0}/tests/test_runnable_examples.py +0 -0
  215. {algroots-0.2.0 → algroots-0.3.0}/tests/test_rur_backend.py +0 -0
  216. {algroots-0.2.0 → algroots-0.3.0}/tests/test_separator_retry_and_completeness.py +0 -0
  217. {algroots-0.2.0 → algroots-0.3.0}/tests/test_shape_position.py +0 -0
  218. {algroots-0.2.0 → algroots-0.3.0}/tests/test_shared_extraction_and_presolve.py +0 -0
  219. {algroots-0.2.0 → algroots-0.3.0}/tests/test_solver_frontend.py +0 -0
  220. {algroots-0.2.0 → algroots-0.3.0}/tests/test_structural_performance_guards.py +0 -0
  221. {algroots-0.2.0 → algroots-0.3.0}/tests/test_triangular_and_validation.py +0 -0
  222. {algroots-0.2.0 → algroots-0.3.0}/tests/test_validation_refinement.py +0 -0
  223. {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.
@@ -5,6 +5,6 @@ type: software
5
5
  authors:
6
6
  - family-names: "Bhatt"
7
7
  given-names: "Bhuvanesh"
8
- version: "0.2.0"
8
+ version: "0.3.0"
9
9
  license: "GPL-3.0-only"
10
10
  url: "https://pypi.org/project/algroots/"
@@ -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.5
1
+ Metadata-Version: 2.4
2
2
  Name: algroots
3
- Version: 0.2.0
4
- Summary: Exact and approximate methods for solving zero-dimensional polynomial and algebraic systems.
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
- Author-email: Bhuvanesh Bhatt <bhuvaneshbhatt@gmail.com>
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
- Requires-Dist: algrecognize>=0.1.1
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: sympy<2,>=1.13
27
- Provides-Extra: benchmark
28
- Requires-Dist: pytest-benchmark>=5.2; extra == 'benchmark'
29
- Requires-Dist: pytest>=8; extra == 'benchmark'
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 == 'dev'
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 == 'release'
36
- Requires-Dist: twine>=6; extra == 'release'
37
- Provides-Extra: test
38
- Requires-Dist: hypothesis>=6; extra == 'test'
39
- Requires-Dist: pytest-cov>=6; extra == 'test'
40
- Requires-Dist: pytest>=8; extra == 'test'
41
- Description-Content-Type: text/markdown
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` solves **exact polynomial and supported algebraic equations with finite complex solution sets (zero-dimensional systems)**. 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
+ `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 cannot be established. Automatic boxes currently require rational coefficients and a globally finite ideal. Exact-point certification also supports algebraic coefficients. Dimension, refinement and box-attempt budgets are explicit.
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/asymptotic/blob/main/LICENSE).
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` solves **exact polynomial and supported algebraic equations with finite complex solution sets (zero-dimensional systems)**. 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.
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 cannot be established. Automatic boxes currently require rational coefficients and a globally finite ideal. Exact-point certification also supports algebraic coefficients. Dimension, refinement and box-attempt budgets are explicit.
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/asymptotic/blob/main/LICENSE).
136
+ The package is distributed under the [GPL-3.0 license](https://github.com/BhuvaneshBhatt/algroots/blob/main/LICENSE).