funcprops 0.2.0__tar.gz → 0.4.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 (328) hide show
  1. funcprops-0.4.0/PKG-INFO +281 -0
  2. funcprops-0.4.0/README.md +244 -0
  3. {funcprops-0.2.0 → funcprops-0.4.0}/pyproject.toml +32 -28
  4. funcprops-0.4.0/src/funcprops/__init__.py +1052 -0
  5. funcprops-0.4.0/src/funcprops/_checkpoints.py +33 -0
  6. funcprops-0.4.0/src/funcprops/_semialg.py +499 -0
  7. funcprops-0.4.0/src/funcprops/_source_transport.py +72 -0
  8. funcprops-0.4.0/src/funcprops/adaptive_roots.py +607 -0
  9. funcprops-0.4.0/src/funcprops/algebraic_coefficients.py +202 -0
  10. funcprops-0.4.0/src/funcprops/algebraic_complex.py +625 -0
  11. funcprops-0.4.0/src/funcprops/analytic_contours.py +556 -0
  12. funcprops-0.4.0/src/funcprops/api.py +781 -0
  13. funcprops-0.4.0/src/funcprops/assumption_closure.py +73 -0
  14. {funcprops-0.2.0 → funcprops-0.4.0}/src/funcprops/assumption_normalization.py +3 -1
  15. {funcprops-0.2.0 → funcprops-0.4.0}/src/funcprops/assumptions.py +50 -4
  16. funcprops-0.4.0/src/funcprops/asymptotic_tails.py +282 -0
  17. funcprops-0.4.0/src/funcprops/branch_atlas.py +462 -0
  18. funcprops-0.4.0/src/funcprops/branch_gluing.py +438 -0
  19. {funcprops-0.2.0 → funcprops-0.4.0}/src/funcprops/branchcuts/__init__.py +7 -2
  20. {funcprops-0.2.0 → funcprops-0.4.0}/src/funcprops/branchcuts/computation.py +37 -11
  21. {funcprops-0.2.0 → funcprops-0.4.0}/src/funcprops/branchcuts/core.py +202 -84
  22. {funcprops-0.2.0 → funcprops-0.4.0}/src/funcprops/branchcuts/post_simplify.py +18 -2
  23. {funcprops-0.2.0 → funcprops-0.4.0}/src/funcprops/cache_control.py +20 -2
  24. funcprops-0.4.0/src/funcprops/certified_balls.py +119 -0
  25. funcprops-0.4.0/src/funcprops/certified_inequalities.py +437 -0
  26. funcprops-0.4.0/src/funcprops/certified_operations.py +1317 -0
  27. funcprops-0.4.0/src/funcprops/certified_optimization.py +249 -0
  28. funcprops-0.4.0/src/funcprops/complex_certification.py +277 -0
  29. funcprops-0.4.0/src/funcprops/complex_clusters.py +323 -0
  30. funcprops-0.4.0/src/funcprops/complex_cofinal.py +417 -0
  31. funcprops-0.4.0/src/funcprops/complex_coverage.py +211 -0
  32. funcprops-0.4.0/src/funcprops/complex_interval.py +404 -0
  33. funcprops-0.4.0/src/funcprops/complex_isolation.py +1043 -0
  34. funcprops-0.4.0/src/funcprops/complex_multiplicity.py +589 -0
  35. funcprops-0.4.0/src/funcprops/complex_newton.py +583 -0
  36. funcprops-0.4.0/src/funcprops/component_optimization.py +199 -0
  37. {funcprops-0.2.0 → funcprops-0.4.0}/src/funcprops/conditional.py +4 -0
  38. funcprops-0.4.0/src/funcprops/conditions.py +158 -0
  39. funcprops-0.4.0/src/funcprops/coverage_cells.py +26 -0
  40. funcprops-0.4.0/src/funcprops/coverage_checker.py +805 -0
  41. funcprops-0.4.0/src/funcprops/coverage_contract.py +321 -0
  42. funcprops-0.4.0/src/funcprops/coverage_search.py +427 -0
  43. funcprops-0.4.0/src/funcprops/data/catalogue.json +176657 -0
  44. funcprops-0.4.0/src/funcprops/data/proof_api_manifest.json +4691 -0
  45. funcprops-0.4.0/src/funcprops/derivative_inequalities.py +139 -0
  46. funcprops-0.4.0/src/funcprops/diagnostics.py +358 -0
  47. funcprops-0.4.0/src/funcprops/domain_tracking.py +546 -0
  48. funcprops-0.4.0/src/funcprops/enclosure_policy.py +49 -0
  49. funcprops-0.4.0/src/funcprops/enclosures.py +352 -0
  50. {funcprops-0.2.0 → funcprops-0.4.0}/src/funcprops/engine.py +95 -72
  51. funcprops-0.4.0/src/funcprops/entire_cancellation.py +95 -0
  52. {funcprops-0.2.0 → funcprops-0.4.0}/src/funcprops/exactness.py +62 -5
  53. {funcprops-0.2.0 → funcprops-0.4.0}/src/funcprops/exceptions.py +3 -6
  54. funcprops-0.4.0/src/funcprops/explanations.py +50 -0
  55. funcprops-0.4.0/src/funcprops/extrema_bounds.py +423 -0
  56. {funcprops-0.2.0 → funcprops-0.4.0}/src/funcprops/geometry.py +153 -77
  57. funcprops-0.4.0/src/funcprops/global_analysis.py +143 -0
  58. funcprops-0.4.0/src/funcprops/global_multivariate.py +254 -0
  59. funcprops-0.4.0/src/funcprops/guarded_affine.py +355 -0
  60. funcprops-0.4.0/src/funcprops/implicit_orders.py +595 -0
  61. funcprops-0.4.0/src/funcprops/infinite_checker.py +452 -0
  62. funcprops-0.4.0/src/funcprops/infinite_contract.py +115 -0
  63. funcprops-0.4.0/src/funcprops/infinite_root_families.py +118 -0
  64. funcprops-0.4.0/src/funcprops/infinite_roots.py +346 -0
  65. funcprops-0.4.0/src/funcprops/integration.py +517 -0
  66. funcprops-0.4.0/src/funcprops/local_analyticity.py +355 -0
  67. funcprops-0.4.0/src/funcprops/local_branches.py +108 -0
  68. funcprops-0.4.0/src/funcprops/meromorphic_contours.py +148 -0
  69. funcprops-0.4.0/src/funcprops/metric_proofs.py +403 -0
  70. funcprops-0.4.0/src/funcprops/multiple_root_checker.py +258 -0
  71. funcprops-0.4.0/src/funcprops/multiple_roots.py +157 -0
  72. funcprops-0.4.0/src/funcprops/multivariate_intervals.py +240 -0
  73. {funcprops-0.2.0 → funcprops-0.4.0}/src/funcprops/native_registry.py +28 -28
  74. funcprops-0.4.0/src/funcprops/parameter_cells.py +240 -0
  75. funcprops-0.4.0/src/funcprops/parameter_checker.py +762 -0
  76. funcprops-0.4.0/src/funcprops/parameter_contract.py +317 -0
  77. funcprops-0.4.0/src/funcprops/parameter_coverage.py +562 -0
  78. funcprops-0.4.0/src/funcprops/parameter_discriminants.py +168 -0
  79. funcprops-0.4.0/src/funcprops/parameter_geometry.py +508 -0
  80. funcprops-0.4.0/src/funcprops/piecewise_proofs.py +229 -0
  81. funcprops-0.4.0/src/funcprops/proof_budget.py +46 -0
  82. {funcprops-0.2.0 → funcprops-0.4.0}/src/funcprops/proof_cache.py +67 -8
  83. funcprops-0.4.0/src/funcprops/proof_explanations.py +54 -0
  84. funcprops-0.4.0/src/funcprops/proof_inventory.py +17 -0
  85. funcprops-0.4.0/src/funcprops/proof_telemetry.py +37 -0
  86. funcprops-0.4.0/src/funcprops/property_checker.py +472 -0
  87. funcprops-0.4.0/src/funcprops/property_composition.py +130 -0
  88. funcprops-0.4.0/src/funcprops/property_contract.py +117 -0
  89. funcprops-0.4.0/src/funcprops/property_coverage.py +286 -0
  90. funcprops-0.4.0/src/funcprops/quotient_cofinal.py +431 -0
  91. funcprops-0.4.0/src/funcprops/quotient_isolation.py +1617 -0
  92. funcprops-0.4.0/src/funcprops/quotient_refinement.py +317 -0
  93. funcprops-0.4.0/src/funcprops/real_analysis/__init__.py +1 -0
  94. {funcprops-0.2.0 → funcprops-0.4.0}/src/funcprops/real_analysis/advanced_convexity.py +35 -22
  95. {funcprops-0.2.0 → funcprops-0.4.0}/src/funcprops/real_analysis/boundedness.py +49 -17
  96. {funcprops-0.2.0 → funcprops-0.4.0}/src/funcprops/real_analysis/common.py +148 -8
  97. {funcprops-0.2.0 → funcprops-0.4.0}/src/funcprops/real_analysis/complete_monotonicity.py +19 -5
  98. {funcprops-0.2.0 → funcprops-0.4.0}/src/funcprops/real_analysis/convexity.py +299 -55
  99. {funcprops-0.2.0 → funcprops-0.4.0}/src/funcprops/real_analysis/differentiability.py +3 -3
  100. funcprops-0.4.0/src/funcprops/real_analysis/domain.py +447 -0
  101. funcprops-0.4.0/src/funcprops/real_analysis/hessian_bounds.py +307 -0
  102. funcprops-0.4.0/src/funcprops/real_analysis/image_rules.py +270 -0
  103. funcprops-0.4.0/src/funcprops/real_analysis/integrability.py +107 -0
  104. {funcprops-0.2.0 → funcprops-0.4.0}/src/funcprops/real_analysis/mapping.py +171 -60
  105. {funcprops-0.2.0 → funcprops-0.4.0}/src/funcprops/real_analysis/monotonic_certificates.py +338 -60
  106. {funcprops-0.2.0 → funcprops-0.4.0}/src/funcprops/real_analysis/monotonicity.py +154 -63
  107. {funcprops-0.2.0 → funcprops-0.4.0}/src/funcprops/real_analysis/oscillation.py +24 -16
  108. {funcprops-0.2.0 → funcprops-0.4.0}/src/funcprops/real_analysis/piecewise.py +39 -26
  109. {funcprops-0.2.0 → funcprops-0.4.0}/src/funcprops/real_analysis/range.py +337 -88
  110. funcprops-0.4.0/src/funcprops/real_analysis/regularity_extensions.py +362 -0
  111. funcprops-0.4.0/src/funcprops/real_analysis/restricted_simplify.py +73 -0
  112. {funcprops-0.2.0 → funcprops-0.4.0}/src/funcprops/real_analysis/sign.py +139 -51
  113. funcprops-0.4.0/src/funcprops/real_analysis/sign_rules.py +368 -0
  114. {funcprops-0.2.0 → funcprops-0.4.0}/src/funcprops/real_analysis/smoothness.py +61 -32
  115. {funcprops-0.2.0 → funcprops-0.4.0}/src/funcprops/real_analysis/special_functions.py +101 -2
  116. funcprops-0.4.0/src/funcprops/real_analysis/staging.py +6 -0
  117. {funcprops-0.2.0 → funcprops-0.4.0}/src/funcprops/real_analysis/structural_properties.py +407 -52
  118. funcprops-0.4.0/src/funcprops/real_analysis/variation.py +229 -0
  119. {funcprops-0.2.0 → funcprops-0.4.0}/src/funcprops/real_analysis/zeros.py +4 -6
  120. {funcprops-0.2.0 → funcprops-0.4.0}/src/funcprops/registry.py +148 -182
  121. {funcprops-0.2.0 → funcprops-0.4.0}/src/funcprops/registry_derivatives.py +158 -33
  122. {funcprops-0.2.0 → funcprops-0.4.0}/src/funcprops/registry_transport.py +36 -26
  123. funcprops-0.4.0/src/funcprops/regularity_evidence.py +462 -0
  124. {funcprops-0.2.0 → funcprops-0.4.0}/src/funcprops/results.py +138 -14
  125. funcprops-0.4.0/src/funcprops/root_coverage.py +527 -0
  126. funcprops-0.4.0/src/funcprops/seam_regularity.py +263 -0
  127. funcprops-0.4.0/src/funcprops/shared_zeros.py +437 -0
  128. funcprops-0.4.0/src/funcprops/singularities/__init__.py +145 -0
  129. funcprops-0.4.0/src/funcprops/singularities/analysis.py +346 -0
  130. funcprops-0.4.0/src/funcprops/singularities/geometry.py +655 -0
  131. funcprops-0.4.0/src/funcprops/singularities/records.py +1100 -0
  132. funcprops-0.4.0/src/funcprops/singularities/regularity.py +1264 -0
  133. funcprops-0.4.0/src/funcprops/source_syntax.py +112 -0
  134. funcprops-0.4.0/src/funcprops/special_theorems.py +156 -0
  135. {funcprops-0.2.0 → funcprops-0.4.0}/src/funcprops/statistical_special_functions.py +18 -4
  136. {funcprops-0.2.0 → funcprops-0.4.0}/src/funcprops/stratification.py +75 -46
  137. {funcprops-0.2.0 → funcprops-0.4.0}/src/funcprops/sympy_compare.py +4 -0
  138. funcprops-0.4.0/src/funcprops/taylor_models.py +138 -0
  139. funcprops-0.4.0/src/funcprops/theorem_closure.py +38 -0
  140. funcprops-0.4.0/src/funcprops/theorem_registry.py +92 -0
  141. funcprops-0.4.0/src/funcprops/transcendental/__init__.py +1 -0
  142. funcprops-0.4.0/src/funcprops/transcendental/algebraize.py +397 -0
  143. {funcprops-0.2.0 → funcprops-0.4.0}/src/funcprops/transcendental/analytic.py +19 -25
  144. funcprops-0.4.0/src/funcprops/transcendental/complex_roots.py +891 -0
  145. {funcprops-0.2.0 → funcprops-0.4.0}/src/funcprops/transcendental/exp_fourier.py +5 -2
  146. {funcprops-0.2.0 → funcprops-0.4.0}/src/funcprops/transcendental/extrema.py +65 -10
  147. {funcprops-0.2.0 → funcprops-0.4.0}/src/funcprops/transcendental/periodic.py +28 -4
  148. {funcprops-0.2.0 → funcprops-0.4.0}/src/funcprops/transcendental/proof.py +6 -0
  149. funcprops-0.4.0/src/funcprops/transcendental/real_interval.py +270 -0
  150. {funcprops-0.2.0 → funcprops-0.4.0}/src/funcprops/transcendental/real_sign.py +12 -2
  151. {funcprops-0.2.0 → funcprops-0.4.0}/src/funcprops/transcendental/reduce.py +2 -0
  152. funcprops-0.4.0/src/funcprops/transcendental/root_geometry.py +84 -0
  153. {funcprops-0.2.0 → funcprops-0.4.0}/src/funcprops/transcendental/roots.py +138 -14
  154. funcprops-0.4.0/src/funcprops/transcendental/unified_real.py +58 -0
  155. {funcprops-0.2.0 → funcprops-0.4.0}/src/funcprops/transcendental/zero_geometry.py +51 -3
  156. funcprops-0.4.0/src/funcprops/transformation.py +760 -0
  157. funcprops-0.4.0/src/funcprops/verification.py +1152 -0
  158. funcprops-0.4.0/src/funcprops/verified_roots.py +149 -0
  159. funcprops-0.4.0/src/funcprops/work_budget.py +461 -0
  160. funcprops-0.4.0/src/funcprops.egg-info/PKG-INFO +281 -0
  161. funcprops-0.4.0/src/funcprops.egg-info/SOURCES.txt +303 -0
  162. {funcprops-0.2.0 → funcprops-0.4.0}/src/funcprops.egg-info/requires.txt +1 -1
  163. funcprops-0.4.0/tests/test_adaptive_root_coverage.py +182 -0
  164. {funcprops-0.2.0 → funcprops-0.4.0}/tests/test_advanced_convexity.py +13 -11
  165. funcprops-0.4.0/tests/test_advanced_property_families.py +86 -0
  166. funcprops-0.4.0/tests/test_algebraic_coefficient_support.py +138 -0
  167. funcprops-0.4.0/tests/test_algebraization_chart_soundness.py +176 -0
  168. funcprops-0.4.0/tests/test_algebraization_principal_branches.py +120 -0
  169. funcprops-0.4.0/tests/test_algroots_complex_adapter.py +291 -0
  170. funcprops-0.4.0/tests/test_analytic_contours.py +214 -0
  171. funcprops-0.4.0/tests/test_api_contract.py +130 -0
  172. {funcprops-0.2.0 → funcprops-0.4.0}/tests/test_boundary_and_attainment_geometry.py +25 -25
  173. funcprops-0.4.0/tests/test_branch_atlas.py +122 -0
  174. funcprops-0.4.0/tests/test_branch_gluing.py +172 -0
  175. {funcprops-0.2.0 → funcprops-0.4.0}/tests/test_branchcut_post_simplify.py +3 -3
  176. funcprops-0.4.0/tests/test_branchcuts_integration.py +53 -0
  177. funcprops-0.4.0/tests/test_budgeted_proof_composition.py +219 -0
  178. funcprops-0.4.0/tests/test_certified_global_analysis.py +35 -0
  179. funcprops-0.4.0/tests/test_certified_numerical_analysis.py +56 -0
  180. funcprops-0.4.0/tests/test_certified_operations.py +124 -0
  181. funcprops-0.4.0/tests/test_certified_real_root_isolation.py +18 -0
  182. funcprops-0.4.0/tests/test_checkpoints.py +49 -0
  183. funcprops-0.4.0/tests/test_coefficient_routing.py +90 -0
  184. funcprops-0.4.0/tests/test_complex_clusters.py +91 -0
  185. funcprops-0.4.0/tests/test_complex_completion.py +505 -0
  186. funcprops-0.4.0/tests/test_complex_cover_assembly.py +481 -0
  187. funcprops-0.4.0/tests/test_complex_isolation_soundness.py +155 -0
  188. funcprops-0.4.0/tests/test_complex_newton.py +417 -0
  189. funcprops-0.4.0/tests/test_complex_operations_soundness.py +226 -0
  190. {funcprops-0.2.0 → funcprops-0.4.0}/tests/test_complex_root_isolation.py +2 -3
  191. funcprops-0.4.0/tests/test_compositional_proof_soundness.py +314 -0
  192. {funcprops-0.2.0 → funcprops-0.4.0}/tests/test_conditional_expression_inputs.py +4 -4
  193. funcprops-0.4.0/tests/test_conditional_singularity_analysis.py +189 -0
  194. funcprops-0.4.0/tests/test_consistent_helper_proofs.py +208 -0
  195. funcprops-0.4.0/tests/test_consumer_soundness.py +229 -0
  196. funcprops-0.4.0/tests/test_coverage_guards.py +123 -0
  197. funcprops-0.4.0/tests/test_coverage_kernel.py +309 -0
  198. funcprops-0.4.0/tests/test_curvature_minimum_soundness.py +55 -0
  199. {funcprops-0.2.0 → funcprops-0.4.0}/tests/test_derivative_cache.py +2 -2
  200. funcprops-0.4.0/tests/test_differential_soundness.py +220 -0
  201. {funcprops-0.2.0 → funcprops-0.4.0}/tests/test_dlmf_formula_audit.py +16 -17
  202. {funcprops-0.2.0 → funcprops-0.4.0}/tests/test_dlmf_stratification.py +20 -16
  203. funcprops-0.4.0/tests/test_domain_and_mapping_soundness.py +184 -0
  204. {funcprops-0.2.0 → funcprops-0.4.0}/tests/test_domain_cell_root_isolation.py +12 -12
  205. funcprops-0.4.0/tests/test_domain_components_and_replay.py +345 -0
  206. funcprops-0.4.0/tests/test_domain_inverse_branch_contracts.py +57 -0
  207. funcprops-0.4.0/tests/test_enclosure_contracts.py +65 -0
  208. funcprops-0.4.0/tests/test_equation_and_contour_contracts.py +337 -0
  209. {funcprops-0.2.0 → funcprops-0.4.0}/tests/test_exported_helpers_and_replay.py +52 -121
  210. funcprops-0.4.0/tests/test_extended_regularity_integrability.py +40 -0
  211. funcprops-0.4.0/tests/test_extension_budgets.py +81 -0
  212. funcprops-0.4.0/tests/test_extrema_bounds.py +141 -0
  213. {funcprops-0.2.0 → funcprops-0.4.0}/tests/test_extremum_ordering.py +6 -7
  214. funcprops-0.4.0/tests/test_finite_domain_properties.py +418 -0
  215. funcprops-0.4.0/tests/test_global_property_extensions.py +55 -0
  216. funcprops-0.4.0/tests/test_guarded_proofs_and_status.py +242 -0
  217. funcprops-0.4.0/tests/test_implicit_orders.py +214 -0
  218. {funcprops-0.2.0 → funcprops-0.4.0}/tests/test_indexed_extrema.py +8 -10
  219. {funcprops-0.2.0 → funcprops-0.4.0}/tests/test_indexed_tail_inversion.py +4 -4
  220. funcprops-0.4.0/tests/test_integration_parametric_contours.py +101 -0
  221. funcprops-0.4.0/tests/test_local_branch_proofs.py +194 -0
  222. funcprops-0.4.0/tests/test_local_germ_and_equation_soundness.py +115 -0
  223. funcprops-0.4.0/tests/test_mathematical_soundness_regressions.py +57 -0
  224. funcprops-0.4.0/tests/test_metric_and_jump_properties.py +207 -0
  225. funcprops-0.4.0/tests/test_metric_replay.py +160 -0
  226. {funcprops-0.2.0 → funcprops-0.4.0}/tests/test_monotonicity_and_singularities.py +7 -10
  227. funcprops-0.4.0/tests/test_multivariate_certification.py +31 -0
  228. {funcprops-0.2.0 → funcprops-0.4.0}/tests/test_multivariate_singularity_loci.py +21 -27
  229. {funcprops-0.2.0 → funcprops-0.4.0}/tests/test_native_property_regressions.py +18 -24
  230. funcprops-0.4.0/tests/test_numeric_and_symbolic_exactness.py +180 -0
  231. funcprops-0.4.0/tests/test_parameter_case_soundness.py +79 -0
  232. funcprops-0.4.0/tests/test_parameter_geometry.py +193 -0
  233. funcprops-0.4.0/tests/test_parameter_prerequisite_soundness.py +100 -0
  234. funcprops-0.4.0/tests/test_parameter_root_coverage.py +191 -0
  235. funcprops-0.4.0/tests/test_parameterized_property_extensions.py +38 -0
  236. funcprops-0.4.0/tests/test_periodic_root_coverage.py +141 -0
  237. {funcprops-0.2.0 → funcprops-0.4.0}/tests/test_piecewise_certified_analysis.py +10 -13
  238. funcprops-0.4.0/tests/test_piecewise_partitions.py +103 -0
  239. funcprops-0.4.0/tests/test_practical_proofs.py +423 -0
  240. funcprops-0.4.0/tests/test_principal_branch_and_tail_soundness.py +121 -0
  241. funcprops-0.4.0/tests/test_proof_obligations.py +80 -0
  242. funcprops-0.4.0/tests/test_proof_payload_integrity.py +270 -0
  243. funcprops-0.4.0/tests/test_property_coverage.py +209 -0
  244. funcprops-0.4.0/tests/test_property_work_budgets.py +82 -0
  245. {funcprops-0.2.0 → funcprops-0.4.0}/tests/test_public_assumptions_contract.py +9 -10
  246. {funcprops-0.2.0 → funcprops-0.4.0}/tests/test_public_option_semantics.py +12 -16
  247. funcprops-0.4.0/tests/test_quadratic_images.py +125 -0
  248. funcprops-0.4.0/tests/test_quotient_isolation.py +581 -0
  249. funcprops-0.4.0/tests/test_quotient_shared_orders.py +499 -0
  250. funcprops-0.4.0/tests/test_quotient_soundness_audit.py +460 -0
  251. funcprops-0.4.0/tests/test_real_enclosures.py +249 -0
  252. funcprops-0.4.0/tests/test_real_multiplicity.py +129 -0
  253. funcprops-0.4.0/tests/test_real_output_domains.py +205 -0
  254. {funcprops-0.2.0 → funcprops-0.4.0}/tests/test_real_root_pipeline.py +7 -10
  255. {funcprops-0.2.0 → funcprops-0.4.0}/tests/test_registry.py +2 -2
  256. {funcprops-0.2.0 → funcprops-0.4.0}/tests/test_registry_derivative_certificates.py +1 -1
  257. {funcprops-0.2.0 → funcprops-0.4.0}/tests/test_registry_localization.py +2 -2
  258. {funcprops-0.2.0 → funcprops-0.4.0}/tests/test_registry_multiargument_paths.py +6 -7
  259. {funcprops-0.2.0 → funcprops-0.4.0}/tests/test_registry_multivariate_transport.py +5 -9
  260. {funcprops-0.2.0 → funcprops-0.4.0}/tests/test_registry_native_families.py +0 -2
  261. funcprops-0.4.0/tests/test_registry_patterns.py +74 -0
  262. funcprops-0.4.0/tests/test_regularity_proof_soundness.py +227 -0
  263. funcprops-0.4.0/tests/test_restricted_property_soundness.py +180 -0
  264. funcprops-0.4.0/tests/test_restricted_transcendental_range.py +154 -0
  265. {funcprops-0.2.0 → funcprops-0.4.0}/tests/test_result_and_cache_management.py +5 -5
  266. funcprops-0.4.0/tests/test_robustness_contracts.py +240 -0
  267. funcprops-0.4.0/tests/test_root_coverage_checker.py +307 -0
  268. {funcprops-0.2.0 → funcprops-0.4.0}/tests/test_semialg_delegation.py +29 -35
  269. funcprops-0.4.0/tests/test_shared_domain_facts.py +168 -0
  270. {funcprops-0.2.0 → funcprops-0.4.0}/tests/test_shared_monotonic_partition.py +15 -22
  271. {funcprops-0.2.0 → funcprops-0.4.0}/tests/test_shared_proof_cache.py +12 -12
  272. funcprops-0.4.0/tests/test_sign_routes.py +299 -0
  273. {funcprops-0.2.0 → funcprops-0.4.0}/tests/test_singularity_locus_api.py +6 -6
  274. funcprops-0.4.0/tests/test_singularity_soundness_regressions.py +47 -0
  275. funcprops-0.4.0/tests/test_small_bug_fixes.py +110 -0
  276. funcprops-0.4.0/tests/test_source_binding.py +264 -0
  277. funcprops-0.4.0/tests/test_source_domain_contracts.py +232 -0
  278. funcprops-0.4.0/tests/test_source_transport.py +90 -0
  279. {funcprops-0.2.0 → funcprops-0.4.0}/tests/test_statistical_special_functions.py +35 -59
  280. {funcprops-0.2.0 → funcprops-0.4.0}/tests/test_structural_properties.py +69 -34
  281. funcprops-0.4.0/tests/test_symbolic_property_families.py +120 -0
  282. funcprops-0.4.0/tests/test_tail_root_coverage.py +100 -0
  283. {funcprops-0.2.0 → funcprops-0.4.0}/tests/test_transcendental_algebraization.py +14 -19
  284. {funcprops-0.2.0 → funcprops-0.4.0}/tests/test_transcendental_certification.py +10 -6
  285. funcprops-0.4.0/tests/test_transcendental_real_analysis.py +71 -0
  286. {funcprops-0.2.0 → funcprops-0.4.0}/tests/test_transformation_geometry.py +28 -32
  287. funcprops-0.4.0/tests/test_uniform_parameter_coverage.py +134 -0
  288. funcprops-0.4.0/tests/test_user_friendly_root_api.py +115 -0
  289. {funcprops-0.2.0 → funcprops-0.4.0}/tests/test_zero_geometry.py +13 -9
  290. {funcprops-0.2.0 → funcprops-0.4.0}/tests/test_zeros_mapping_and_smoothness.py +33 -34
  291. funcprops-0.2.0/PKG-INFO +0 -212
  292. funcprops-0.2.0/README.md +0 -183
  293. funcprops-0.2.0/src/funcprops/__init__.py +0 -378
  294. funcprops-0.2.0/src/funcprops/_semialg.py +0 -246
  295. funcprops-0.2.0/src/funcprops/api.py +0 -389
  296. funcprops-0.2.0/src/funcprops/conditions.py +0 -124
  297. funcprops-0.2.0/src/funcprops/data/catalogue.json +0 -127449
  298. funcprops-0.2.0/src/funcprops/real_analysis/__init__.py +0 -66
  299. funcprops-0.2.0/src/funcprops/real_analysis/domain.py +0 -188
  300. funcprops-0.2.0/src/funcprops/singularities.py +0 -2849
  301. funcprops-0.2.0/src/funcprops/transcendental/__init__.py +0 -140
  302. funcprops-0.2.0/src/funcprops/transcendental/algebraize.py +0 -201
  303. funcprops-0.2.0/src/funcprops/transcendental/complex_roots.py +0 -542
  304. funcprops-0.2.0/src/funcprops/transcendental/real_interval.py +0 -128
  305. funcprops-0.2.0/src/funcprops/transformation.py +0 -417
  306. funcprops-0.2.0/src/funcprops/verification.py +0 -455
  307. funcprops-0.2.0/src/funcprops.egg-info/PKG-INFO +0 -212
  308. funcprops-0.2.0/src/funcprops.egg-info/SOURCES.txt +0 -123
  309. funcprops-0.2.0/tests/test_api_contract.py +0 -122
  310. funcprops-0.2.0/tests/test_branchcuts_integration.py +0 -32
  311. funcprops-0.2.0/tests/test_certified_real_root_isolation.py +0 -18
  312. funcprops-0.2.0/tests/test_conditional_singularity_analysis.py +0 -167
  313. funcprops-0.2.0/tests/test_transcendental_real_analysis.py +0 -76
  314. {funcprops-0.2.0 → funcprops-0.4.0}/LICENSE +0 -0
  315. {funcprops-0.2.0 → funcprops-0.4.0}/setup.cfg +0 -0
  316. {funcprops-0.2.0 → funcprops-0.4.0}/src/funcprops/data/dlmf_audit.json +0 -0
  317. {funcprops-0.2.0 → funcprops-0.4.0}/src/funcprops/data/registry_capabilities.json +0 -0
  318. {funcprops-0.2.0 → funcprops-0.4.0}/src/funcprops/dlmf.py +0 -0
  319. {funcprops-0.2.0 → funcprops-0.4.0}/src/funcprops.egg-info/dependency_links.txt +0 -0
  320. {funcprops-0.2.0 → funcprops-0.4.0}/src/funcprops.egg-info/top_level.txt +0 -0
  321. {funcprops-0.2.0 → funcprops-0.4.0}/tests/test_branchcut_core.py +0 -0
  322. {funcprops-0.2.0 → funcprops-0.4.0}/tests/test_branchcut_input_validation.py +0 -0
  323. {funcprops-0.2.0 → funcprops-0.4.0}/tests/test_branchcut_restrictions.py +0 -0
  324. {funcprops-0.2.0 → funcprops-0.4.0}/tests/test_cache_input_validation.py +0 -0
  325. {funcprops-0.2.0 → funcprops-0.4.0}/tests/test_exactness_boundary.py +0 -0
  326. {funcprops-0.2.0 → funcprops-0.4.0}/tests/test_indexed_tail_brackets.py +0 -0
  327. {funcprops-0.2.0 → funcprops-0.4.0}/tests/test_registry_scalar_transport.py +0 -0
  328. {funcprops-0.2.0 → funcprops-0.4.0}/tests/test_vocabulary.py +0 -0
@@ -0,0 +1,281 @@
1
+ Metadata-Version: 2.4
2
+ Name: funcprops
3
+ Version: 0.4.0
4
+ Summary: Symbolic analysis of real, complex, and multivariate function properties for SymPy
5
+ Author-email: Bhuvanesh Bhatt <bhuvaneshbhatt@gmail.com>
6
+ License-Expression: GPL-3.0-only
7
+ Project-URL: Homepage, https://github.com/BhuvaneshBhatt/funcprops
8
+ Project-URL: Documentation, https://github.com/BhuvaneshBhatt/funcprops#readme
9
+ Project-URL: Repository, https://github.com/BhuvaneshBhatt/funcprops
10
+ Project-URL: Issues, https://github.com/BhuvaneshBhatt/funcprops/issues
11
+ Project-URL: Changelog, https://github.com/BhuvaneshBhatt/funcprops/blob/main/CHANGELOG.md
12
+ Keywords: sympy,symbolic mathematics,symbolic computation,function analysis,function properties,real analysis,complex analysis,domains,ranges,zeros,root isolation,monotonicity,convexity,smoothness,singularities,branch cuts,mapping properties,sign analysis,semialgebraic,certified computation,exact computation
13
+ Classifier: Development Status :: 4 - Beta
14
+ Classifier: Intended Audience :: Science/Research
15
+ Classifier: Operating System :: OS Independent
16
+ Classifier: Programming Language :: Python :: 3.11
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Programming Language :: Python :: 3.13
19
+ Classifier: Programming Language :: Python :: 3
20
+ Classifier: Programming Language :: Python :: 3 :: Only
21
+ Classifier: Topic :: Scientific/Engineering :: Mathematics
22
+ Requires-Python: >=3.11
23
+ Description-Content-Type: text/markdown
24
+ License-File: LICENSE
25
+ Requires-Dist: sympy>=1.14
26
+ Requires-Dist: mpmath>=1.3
27
+ Requires-Dist: semialg>=1.3.2
28
+ Requires-Dist: exprtest>=0.1.0
29
+ Provides-Extra: test
30
+ Requires-Dist: pytest>=8; extra == "test"
31
+ Requires-Dist: hypothesis>=6; extra == "test"
32
+ Provides-Extra: dev
33
+ Requires-Dist: pytest>=8; extra == "dev"
34
+ Requires-Dist: hypothesis>=6; extra == "dev"
35
+ Requires-Dist: ruff>=0.8; extra == "dev"
36
+ Dynamic: license-file
37
+
38
+ # funcprops
39
+
40
+ `funcprops` is a SymPy-backed package for global mathematical properties of real, complex, and multivariate functions — including domains, ranges, zeros, monotonicity, convexity, regularity, singularities, extrema, mapping properties, and transformation geometry —while supporting assumptions, parameter-dependent answers, and replayable proof certificates. It combines a conditional function property registry, exact semialgebraic reasoning from the semialgebraic geometry package `semialg`, exact algebraic geometry from `algroots`, transcendental interval analysis, special-function zero geometry, and branch-cut/singularity analysis.
41
+
42
+ When a result cannot be established by the available symbolic, semialgebraic, theorem-based, or validated numerical methods, `funcprops` preserves unresolved conditions or returns "unknown" for the result.
43
+
44
+ ## Installation
45
+
46
+ ```bash
47
+ pip install funcprops
48
+ ```
49
+
50
+ The runtime requires Python 3.11+, SymPy 1.14+, mpmath 1.3+, semialg 1.3.2+, algroots 0.3.0+ and exprtest 0.1.0+.
51
+
52
+ ## Quick start
53
+
54
+ ```python
55
+ import sympy as sp
56
+ import funcprops as fp
57
+
58
+ x, y = sp.symbols("x y", real=True)
59
+ z = sp.Symbol("z")
60
+
61
+ fp.domain(sp.sqrt(x - 1), x)
62
+ # x >= 1
63
+
64
+ fp.range(x**2, x, y)
65
+ # y >= 0
66
+
67
+ fp.monotonicity(sp.exp(x), x)
68
+ # Monotonicity.STRICTLY_INCREASING
69
+
70
+ fp.convexity(x**2, x)
71
+ # Convexity.STRONGLY_CONVEX
72
+
73
+ fp.complete_monotonicity(sp.exp(-x), x, domain=sp.Interval(0, sp.oo))
74
+ # TruthValue.TRUE
75
+
76
+ fp.periodicity(sp.sin(2*x) + sp.cos(3*x), x, return_result=True).period
77
+ # 2*pi
78
+
79
+ fp.branch_cuts(sp.log(1 - z), z)
80
+ # (z > 1,)
81
+
82
+ fp.geometry(x**2, x).minimum_exists.exists
83
+ # True
84
+
85
+ fp.jacobian((2*x + y, x - y), (x, y))
86
+ # Matrix([[2, 1], [1, -1]])
87
+
88
+ fp.change_of_variables((2*x + y, x - y), (x, y)).volume_factor
89
+ # 3
90
+ ```
91
+
92
+ All root-level property queries use the same public conventions: scalar analysis variables are named `variable`, multivariate variables are named `variables`, `assumptions=` carries symbolic assumptions, and `return_result=True` requests the detailed result/proof view (without changing the default mathematical answer).
93
+
94
+ ```python
95
+ a = sp.symbols("a", real=True)
96
+
97
+ fp.injective(a*x, x)
98
+ # parameter-stratified answer: a != 0 -> true; a = 0 -> false
99
+
100
+ detail = fp.convexity(x**2, x, return_result=True)
101
+ print(fp.explain_result(detail))
102
+ ```
103
+
104
+ To discover supported high-level properties interactively:
105
+
106
+ ```python
107
+ fp.properties()
108
+ fp.properties(category="mapping")
109
+ fp.properties(category="regularity")
110
+ ```
111
+
112
+ ## Property model
113
+
114
+ Root-level property queries return exact classifications when the available proof machinery is sufficient. `PropertyResult` and `ConditionalExpression` retain parameter strata instead of collapsing unresolved guards into one answer, and `PropertyResult.as_piecewise()` provides a Piecewise-style view when useful.
115
+
116
+ ## Result conventions
117
+
118
+ Mathematical values are the default. Boolean-style properties use `TruthValue.TRUE`, `TruthValue.FALSE`, and `TruthValue.UNKNOWN`; categorical properties use their corresponding enum with an `UNKNOWN` member. Parameter dependence is represented by `PropertyResult`.
119
+
120
+ Detailed results are opt-in (via the option return_result=True) and consistent across the root API:
121
+
122
+ ```python
123
+ result = fp.monotonicity(a*x, x, return_result=True)
124
+ print(result)
125
+ print(fp.explain_result(result))
126
+ ```
127
+
128
+ In notebooks, conditional and detailed results render as compact tables so the mathematical answer is prominent and proof metadata remains secondary.
129
+
130
+ ## Real-domain analysis
131
+
132
+ `funcprops` owns the public property vocabulary. For semialgebraic functions on semalgebraic real domains it delegates exact domain, range, sign, monotonicity, convexity, smoothness, and mapping problems to `semialg`, while retaining stronger `funcprops` certificates when they are already available.
133
+
134
+ The main real-analysis queries are:
135
+
136
+ - `domain()` and `range()`;
137
+ - `sign()` and `boundedness()`;
138
+ - `monotonicity()` and `oscillation()`;
139
+ - `convexity()` and `complete_monotonicity()`;
140
+ - `injective()`, `surjective()`, and `bijective()`;
141
+ - `continuous()`, `differentiability()`,
142
+ `smoothness()`, and `analytic()`;
143
+ - `periodicity()`, `symmetry()`, and
144
+ `homogeneity()`.
145
+
146
+ Mixed variable/parameter domains are split by shared stratification layer and analyzed branch by branch. Finite `Piecewise` expressions use the same effective branch representation, with each property adding only the interface conditions it requires.
147
+
148
+ ## Monotonic partitions, inverse solving, and real roots
149
+
150
+ `MonotonicPartition` is the shared exact interval representation used by monotonicity, range, injectivity, inverse solving, oscillation, and extrema. Finite partitions retain exact critical points and endpoint behavior; infinite oscillatory partitions retain indexed zero geometry without truncating an infinite sequence.
151
+
152
+ `solve_monotonic_inverse()` and `certified_monotonic_inverse()` reuse those cells to isolate inverse solutions. Real-root isolation is domain-cell aware: poles, logarithmic boundaries, radical boundaries, Piecewise switch points, and other exact exclusions split the problem before interval certificates are constructed. Identically-zero interval cells remain part of the mathematical zero set.
153
+
154
+ For supported exponential polynomials, `exponential_fourier_count()` provides a restricted derivative-sequence root counter. Exact endpoint and critical-point signs then certify the number of distinct roots on an interval.
155
+
156
+ ## Zero geometry and oscillatory extrema
157
+
158
+ Special-function zeros are represented symbolically when closed forms are not available. `IndexedZero`, `ZeroOrdering`, `ZeroInterlacing`, and `ZeroGeometryCertificate` encode support, simplicity, ordering, interlacing, and completeness.
159
+
160
+ `IndexedExtremumValue`, `ExtremumEnvelope`, and indexed-tail inversion extend the same exact representation to infinite extremum families. Supported Airy, Bessel, and classical orthogonal-polynomial families can therefore participate in range, boundedness, and inverse reasoning without numerical truncation.
161
+
162
+ ## Singularities, branch cuts, and complex zeros
163
+
164
+ `singularity_analysis()` performs condition-aware structural traversal of poles, removable and essential singularities, branch points, branch cuts, definition cuts, and discontinuities. Multivariate loci retain their joint conditions instead of being projected onto an artificial scalar coordinate.
165
+
166
+ `branch_cuts()` provides inexpensive structural pullback of principal cuts; boundary-value and jump computations are available under `funcprops.branchcuts`.
167
+
168
+ `complex_zeros()` isolates zeros in finite complex rectangles. It uses exact complex solving when available, otherwise a validated argument-principle contour with structural holomorphy checks, complex-interval boundary enclosures, winding-number counting, and count-preserving rational subdivision. Uncertified numerical winding estimates remain only diagnostic.
169
+
170
+ ## Function geometry and attainment
171
+
172
+ `geometry()` combines regularity, singularity, convexity, boundary escape, level-boundedness, and structural mode-existence information in one summary. Related focussed queries are:
173
+
174
+ - `boundary_behavior()` for certified limits at unbounded boundaries;
175
+ - `level_boundedness()` for a compact coercivity classification, with certificates via `return_result=True`;
176
+ - `mode_existence()` for compact structural minimum/maximum attainment, with proof metadata via `return_result=True`.
177
+
178
+ The attainment machinery is implication-based. Failure to establish continuity, closedness, or level-boundedness yields an unresolved result.
179
+
180
+ ## Transformation geometry
181
+
182
+ For an explicit coordinate map, `funcprops` can compute and certify:
183
+
184
+ - `jacobian()` — exact Jacobian matrices by default, with derivative certificates via `return_result=True`;
185
+ - `determinant_nonvanishing()` — domain-wide nonvanishing of `det J`;
186
+ - `local_invertibility()` — inverse-function-theorem certificates;
187
+ - `change_of_variables()` — the local volume factor `Abs(det J)`;
188
+ - `transformation_geometry()` — combined transformation summary.
189
+
190
+ A nonzero Jacobian determinant proves local invertibility, not global injectivity. The API keeps those claims separate so change-of-variables reasoning does not silently overstate a local theorem.
191
+
192
+ ## Special-function registry and provenance
193
+
194
+ The conditional registry stores audited special-function metadata and exact parameter guards in deterministic SymPy constructor syntax. Concrete overloads are matched before guards are instantiated, and more-specific rules take precedence over generic ones.
195
+
196
+ Selected identities and real-variable facts are cross-checked against the NIST Digital Library of Mathematical Functions (DLMF). The machine-readable audit manifest is `src/funcprops/data/dlmf_audit.json`; see [the DLMF audit methodology](https://github.com/BhuvaneshBhatt/funcprops/blob/main/docs/dlmf-coverage.md).
197
+
198
+ ## Statistical special functions
199
+
200
+ The theorem registry includes probability- and statistics-oriented facts for `loggamma`, digamma/polygamma, incomplete and regularized Gamma/Beta functions, `erf`/`erfc`, modified Bessel families, and generalized Marcum Q.
201
+
202
+ For statistical functions not represented by the supported SymPy release, `funcprops` provides lightweight symbolic heads:
203
+
204
+ - `OwenT(h, a)`;
205
+ - `MittagLefflerE(alpha, z)` and `MittagLefflerE(alpha, beta, z)`;
206
+ - `RegularizedGammaP(a, x)` and `RegularizedGammaQ(a, x)`.
207
+
208
+ These heads are simply symbolic theorem carriers, not replacements for numerical libraries. Parameter-sensitive statements are guarded: outside a certified parameter/domain stratum the property engine returns a conditional or unknown result. Complete-monotonicity support includes elementary exponential kernels, Pollard-type Mittag-Leffler results, and supported Bessel-K regimes.
209
+
210
+ See [Statistical special functions](https://github.com/BhuvaneshBhatt/funcprops/blob/main/docs/statistical-special-functions.md) for the current theorem coverage and provenance notes.
211
+
212
+ ## Proof cache and certificate replay
213
+
214
+ Reusable proof primitives are coordinated through lazy `PropertyProofContext` objects. Independent bounded caches hold derivatives, natural domains, sign results, endpoint limits, zero geometry, singularity analyses, and monotonic partitions. Cache-key normalization is syntactic and avoids expensive proof work to construct a key.
215
+
216
+ Proof objects can be "replayed" with `verify_certificate()` and specialized verifiers. For replay, an undecidable comparison never counts as a successful verification.
217
+
218
+ ## Capabilities and limits
219
+
220
+ | Task | Supported scope | Completion boundary |
221
+ | --- | --- | --- |
222
+ | Domains, range and sign | Structural rules, exact restriction transfer, selected semialgebraic and elementary families | Source definition and every requested restriction remain premises |
223
+ | Shape and regularity | Monotonicity, convexity, symmetry, periodicity, finite metric constants, variation and supported Piecewise seams | Cell coverage, global order and replay support are separate |
224
+ | Exact coefficients | Up to four real algebraic constants in a field of degree at most four | Larger fields and coefficient parameters can decline the lift |
225
+ | Parameter roots | Selected uniform families and rational polynomial geometry of degree at most four with up to four real parameters | Every parameter region needs a count or an explicit unresolved status |
226
+ | Real roots and extrema | Compact covers, selected multiple roots, periodic families, tails and outward extrema bounds | Every source region needs a root or exclusion proof |
227
+ | Complex roots and poles | Algebraic enumeration, supported entire/quotient contours, subdivision and Newton refinement | Declared grammar, rational rectangles, source guards and clear boundaries |
228
+ | Branches and local analysis | Finite atlases, supplied holomorphic recipes, implicit orders, residues, selected essential-series/classification rules and continuation | Selected local values do not redefine global principal expressions; essential-singularity isolation is unsupported |
229
+ | Certified operations | Supported equations, inverses, integration, winding and homotopy | Each operation has its own premises and replay contract |
230
+
231
+ General transcendental parameter geometry, automatic discovery of arbitrary implicit branches, unrestricted branch-surface gluing, arbitrary analytic common-factor discovery and essential-singularity isolation remain capability gaps. Bounded work can leave supported problems partial. See the [full matrix](https://github.com/BhuvaneshBhatt/funcprops/blob/main/docs/capabilities.md), [result contracts](https://github.com/BhuvaneshBhatt/funcprops/blob/main/docs/reference/result-contracts.md) and [troubleshooting](https://github.com/BhuvaneshBhatt/funcprops/blob/main/docs/troubleshooting.md).
232
+
233
+ ## Documentation and examples
234
+
235
+ - [Documentation index](https://github.com/BhuvaneshBhatt/funcprops/blob/main/docs/index.md)
236
+ - [Function property reference](https://github.com/BhuvaneshBhatt/funcprops/blob/main/docs/properties/index.md) — canonical reference pages for every public function property
237
+ - [Working with results, assumptions, certificates, and caches](https://github.com/BhuvaneshBhatt/funcprops/blob/main/docs/using-results.md)
238
+ - [Executable tutorial notebook](https://github.com/BhuvaneshBhatt/funcprops/blob/main/docs/notebooks/function-properties-tour.ipynb) — generated from the same canonical example corpus used by the reference pages
239
+ - [Task tutorials by level](https://github.com/BhuvaneshBhatt/funcprops/blob/main/docs/tutorials/index.md)
240
+ - [Runnable examples](https://github.com/BhuvaneshBhatt/funcprops/blob/main/examples/README.md)
241
+ - [Workflow notebook](https://github.com/BhuvaneshBhatt/funcprops/blob/main/docs/notebooks/certified-workflows.ipynb)
242
+ - [Statistical special functions](https://github.com/BhuvaneshBhatt/funcprops/blob/main/docs/statistical-special-functions.md)
243
+ - [Mathematical conventions](https://github.com/BhuvaneshBhatt/funcprops/blob/main/docs/mathematical-conventions.md)
244
+ - [Complex analysis](https://github.com/BhuvaneshBhatt/funcprops/blob/main/docs/complex-analysis.md)
245
+ - [Homotopy and contour deformation](https://github.com/BhuvaneshBhatt/funcprops/blob/main/docs/homotopy.md)
246
+ - [Capability matrix and limitations](https://github.com/BhuvaneshBhatt/funcprops/blob/main/docs/capabilities.md)
247
+ - [Architecture](https://github.com/BhuvaneshBhatt/funcprops/blob/main/docs/architecture.md)
248
+ - [Proof design](https://github.com/BhuvaneshBhatt/funcprops/blob/main/docs/design/index.md)
249
+ - [Testing](https://github.com/BhuvaneshBhatt/funcprops/blob/main/docs/guides/testing.md)
250
+ - [DLMF property-table audit](https://github.com/BhuvaneshBhatt/funcprops/blob/main/docs/dlmf-coverage.md)
251
+ - [Source semantics](https://github.com/BhuvaneshBhatt/funcprops/blob/main/docs/source-semantics.md)
252
+ - [Domains and branches](https://github.com/BhuvaneshBhatt/funcprops/blob/main/docs/guides/domains-and-branches.md)
253
+ - [Budgets](https://github.com/BhuvaneshBhatt/funcprops/blob/main/docs/guides/budgets-and-resume.md)
254
+ - [Certification model](https://github.com/BhuvaneshBhatt/funcprops/blob/main/docs/certification.md)
255
+
256
+ The canonical examples live in `examples/property_examples.py`. Documentation specification tests execute those examples and verify that the reference and notebook stay synchronized with the public API.
257
+
258
+ ## Development
259
+
260
+ Contributions – whether they are bug reports, suggestions, or code – are welcome!
261
+
262
+ Run the source-tree tests with:
263
+
264
+ ```bash
265
+ PYTHONPATH=src:. pytest
266
+ ```
267
+
268
+ Run the static gates with:
269
+
270
+ ```bash
271
+ ruff format --check src tests examples tools
272
+ ruff check src tests examples tools
273
+ python -m compileall -q src tests examples tools
274
+ ```
275
+
276
+ The package keeps exact fast paths ahead of heavier partition, root-isolation, or semialgebraic machinery. Structural refactors should preserve that ordering unless a benchmark and correctness argument justify changing it.
277
+
278
+ ## License
279
+
280
+ `funcprops` is licensed under the GNU General Public License version 3 only
281
+ (GPL-3.0-only). See [LICENSE](https://github.com/BhuvaneshBhatt/funcprops/blob/main/LICENSE).
@@ -0,0 +1,244 @@
1
+ # funcprops
2
+
3
+ `funcprops` is a SymPy-backed package for global mathematical properties of real, complex, and multivariate functions — including domains, ranges, zeros, monotonicity, convexity, regularity, singularities, extrema, mapping properties, and transformation geometry —while supporting assumptions, parameter-dependent answers, and replayable proof certificates. It combines a conditional function property registry, exact semialgebraic reasoning from the semialgebraic geometry package `semialg`, exact algebraic geometry from `algroots`, transcendental interval analysis, special-function zero geometry, and branch-cut/singularity analysis.
4
+
5
+ When a result cannot be established by the available symbolic, semialgebraic, theorem-based, or validated numerical methods, `funcprops` preserves unresolved conditions or returns "unknown" for the result.
6
+
7
+ ## Installation
8
+
9
+ ```bash
10
+ pip install funcprops
11
+ ```
12
+
13
+ The runtime requires Python 3.11+, SymPy 1.14+, mpmath 1.3+, semialg 1.3.2+, algroots 0.3.0+ and exprtest 0.1.0+.
14
+
15
+ ## Quick start
16
+
17
+ ```python
18
+ import sympy as sp
19
+ import funcprops as fp
20
+
21
+ x, y = sp.symbols("x y", real=True)
22
+ z = sp.Symbol("z")
23
+
24
+ fp.domain(sp.sqrt(x - 1), x)
25
+ # x >= 1
26
+
27
+ fp.range(x**2, x, y)
28
+ # y >= 0
29
+
30
+ fp.monotonicity(sp.exp(x), x)
31
+ # Monotonicity.STRICTLY_INCREASING
32
+
33
+ fp.convexity(x**2, x)
34
+ # Convexity.STRONGLY_CONVEX
35
+
36
+ fp.complete_monotonicity(sp.exp(-x), x, domain=sp.Interval(0, sp.oo))
37
+ # TruthValue.TRUE
38
+
39
+ fp.periodicity(sp.sin(2*x) + sp.cos(3*x), x, return_result=True).period
40
+ # 2*pi
41
+
42
+ fp.branch_cuts(sp.log(1 - z), z)
43
+ # (z > 1,)
44
+
45
+ fp.geometry(x**2, x).minimum_exists.exists
46
+ # True
47
+
48
+ fp.jacobian((2*x + y, x - y), (x, y))
49
+ # Matrix([[2, 1], [1, -1]])
50
+
51
+ fp.change_of_variables((2*x + y, x - y), (x, y)).volume_factor
52
+ # 3
53
+ ```
54
+
55
+ All root-level property queries use the same public conventions: scalar analysis variables are named `variable`, multivariate variables are named `variables`, `assumptions=` carries symbolic assumptions, and `return_result=True` requests the detailed result/proof view (without changing the default mathematical answer).
56
+
57
+ ```python
58
+ a = sp.symbols("a", real=True)
59
+
60
+ fp.injective(a*x, x)
61
+ # parameter-stratified answer: a != 0 -> true; a = 0 -> false
62
+
63
+ detail = fp.convexity(x**2, x, return_result=True)
64
+ print(fp.explain_result(detail))
65
+ ```
66
+
67
+ To discover supported high-level properties interactively:
68
+
69
+ ```python
70
+ fp.properties()
71
+ fp.properties(category="mapping")
72
+ fp.properties(category="regularity")
73
+ ```
74
+
75
+ ## Property model
76
+
77
+ Root-level property queries return exact classifications when the available proof machinery is sufficient. `PropertyResult` and `ConditionalExpression` retain parameter strata instead of collapsing unresolved guards into one answer, and `PropertyResult.as_piecewise()` provides a Piecewise-style view when useful.
78
+
79
+ ## Result conventions
80
+
81
+ Mathematical values are the default. Boolean-style properties use `TruthValue.TRUE`, `TruthValue.FALSE`, and `TruthValue.UNKNOWN`; categorical properties use their corresponding enum with an `UNKNOWN` member. Parameter dependence is represented by `PropertyResult`.
82
+
83
+ Detailed results are opt-in (via the option return_result=True) and consistent across the root API:
84
+
85
+ ```python
86
+ result = fp.monotonicity(a*x, x, return_result=True)
87
+ print(result)
88
+ print(fp.explain_result(result))
89
+ ```
90
+
91
+ In notebooks, conditional and detailed results render as compact tables so the mathematical answer is prominent and proof metadata remains secondary.
92
+
93
+ ## Real-domain analysis
94
+
95
+ `funcprops` owns the public property vocabulary. For semialgebraic functions on semalgebraic real domains it delegates exact domain, range, sign, monotonicity, convexity, smoothness, and mapping problems to `semialg`, while retaining stronger `funcprops` certificates when they are already available.
96
+
97
+ The main real-analysis queries are:
98
+
99
+ - `domain()` and `range()`;
100
+ - `sign()` and `boundedness()`;
101
+ - `monotonicity()` and `oscillation()`;
102
+ - `convexity()` and `complete_monotonicity()`;
103
+ - `injective()`, `surjective()`, and `bijective()`;
104
+ - `continuous()`, `differentiability()`,
105
+ `smoothness()`, and `analytic()`;
106
+ - `periodicity()`, `symmetry()`, and
107
+ `homogeneity()`.
108
+
109
+ Mixed variable/parameter domains are split by shared stratification layer and analyzed branch by branch. Finite `Piecewise` expressions use the same effective branch representation, with each property adding only the interface conditions it requires.
110
+
111
+ ## Monotonic partitions, inverse solving, and real roots
112
+
113
+ `MonotonicPartition` is the shared exact interval representation used by monotonicity, range, injectivity, inverse solving, oscillation, and extrema. Finite partitions retain exact critical points and endpoint behavior; infinite oscillatory partitions retain indexed zero geometry without truncating an infinite sequence.
114
+
115
+ `solve_monotonic_inverse()` and `certified_monotonic_inverse()` reuse those cells to isolate inverse solutions. Real-root isolation is domain-cell aware: poles, logarithmic boundaries, radical boundaries, Piecewise switch points, and other exact exclusions split the problem before interval certificates are constructed. Identically-zero interval cells remain part of the mathematical zero set.
116
+
117
+ For supported exponential polynomials, `exponential_fourier_count()` provides a restricted derivative-sequence root counter. Exact endpoint and critical-point signs then certify the number of distinct roots on an interval.
118
+
119
+ ## Zero geometry and oscillatory extrema
120
+
121
+ Special-function zeros are represented symbolically when closed forms are not available. `IndexedZero`, `ZeroOrdering`, `ZeroInterlacing`, and `ZeroGeometryCertificate` encode support, simplicity, ordering, interlacing, and completeness.
122
+
123
+ `IndexedExtremumValue`, `ExtremumEnvelope`, and indexed-tail inversion extend the same exact representation to infinite extremum families. Supported Airy, Bessel, and classical orthogonal-polynomial families can therefore participate in range, boundedness, and inverse reasoning without numerical truncation.
124
+
125
+ ## Singularities, branch cuts, and complex zeros
126
+
127
+ `singularity_analysis()` performs condition-aware structural traversal of poles, removable and essential singularities, branch points, branch cuts, definition cuts, and discontinuities. Multivariate loci retain their joint conditions instead of being projected onto an artificial scalar coordinate.
128
+
129
+ `branch_cuts()` provides inexpensive structural pullback of principal cuts; boundary-value and jump computations are available under `funcprops.branchcuts`.
130
+
131
+ `complex_zeros()` isolates zeros in finite complex rectangles. It uses exact complex solving when available, otherwise a validated argument-principle contour with structural holomorphy checks, complex-interval boundary enclosures, winding-number counting, and count-preserving rational subdivision. Uncertified numerical winding estimates remain only diagnostic.
132
+
133
+ ## Function geometry and attainment
134
+
135
+ `geometry()` combines regularity, singularity, convexity, boundary escape, level-boundedness, and structural mode-existence information in one summary. Related focussed queries are:
136
+
137
+ - `boundary_behavior()` for certified limits at unbounded boundaries;
138
+ - `level_boundedness()` for a compact coercivity classification, with certificates via `return_result=True`;
139
+ - `mode_existence()` for compact structural minimum/maximum attainment, with proof metadata via `return_result=True`.
140
+
141
+ The attainment machinery is implication-based. Failure to establish continuity, closedness, or level-boundedness yields an unresolved result.
142
+
143
+ ## Transformation geometry
144
+
145
+ For an explicit coordinate map, `funcprops` can compute and certify:
146
+
147
+ - `jacobian()` — exact Jacobian matrices by default, with derivative certificates via `return_result=True`;
148
+ - `determinant_nonvanishing()` — domain-wide nonvanishing of `det J`;
149
+ - `local_invertibility()` — inverse-function-theorem certificates;
150
+ - `change_of_variables()` — the local volume factor `Abs(det J)`;
151
+ - `transformation_geometry()` — combined transformation summary.
152
+
153
+ A nonzero Jacobian determinant proves local invertibility, not global injectivity. The API keeps those claims separate so change-of-variables reasoning does not silently overstate a local theorem.
154
+
155
+ ## Special-function registry and provenance
156
+
157
+ The conditional registry stores audited special-function metadata and exact parameter guards in deterministic SymPy constructor syntax. Concrete overloads are matched before guards are instantiated, and more-specific rules take precedence over generic ones.
158
+
159
+ Selected identities and real-variable facts are cross-checked against the NIST Digital Library of Mathematical Functions (DLMF). The machine-readable audit manifest is `src/funcprops/data/dlmf_audit.json`; see [the DLMF audit methodology](https://github.com/BhuvaneshBhatt/funcprops/blob/main/docs/dlmf-coverage.md).
160
+
161
+ ## Statistical special functions
162
+
163
+ The theorem registry includes probability- and statistics-oriented facts for `loggamma`, digamma/polygamma, incomplete and regularized Gamma/Beta functions, `erf`/`erfc`, modified Bessel families, and generalized Marcum Q.
164
+
165
+ For statistical functions not represented by the supported SymPy release, `funcprops` provides lightweight symbolic heads:
166
+
167
+ - `OwenT(h, a)`;
168
+ - `MittagLefflerE(alpha, z)` and `MittagLefflerE(alpha, beta, z)`;
169
+ - `RegularizedGammaP(a, x)` and `RegularizedGammaQ(a, x)`.
170
+
171
+ These heads are simply symbolic theorem carriers, not replacements for numerical libraries. Parameter-sensitive statements are guarded: outside a certified parameter/domain stratum the property engine returns a conditional or unknown result. Complete-monotonicity support includes elementary exponential kernels, Pollard-type Mittag-Leffler results, and supported Bessel-K regimes.
172
+
173
+ See [Statistical special functions](https://github.com/BhuvaneshBhatt/funcprops/blob/main/docs/statistical-special-functions.md) for the current theorem coverage and provenance notes.
174
+
175
+ ## Proof cache and certificate replay
176
+
177
+ Reusable proof primitives are coordinated through lazy `PropertyProofContext` objects. Independent bounded caches hold derivatives, natural domains, sign results, endpoint limits, zero geometry, singularity analyses, and monotonic partitions. Cache-key normalization is syntactic and avoids expensive proof work to construct a key.
178
+
179
+ Proof objects can be "replayed" with `verify_certificate()` and specialized verifiers. For replay, an undecidable comparison never counts as a successful verification.
180
+
181
+ ## Capabilities and limits
182
+
183
+ | Task | Supported scope | Completion boundary |
184
+ | --- | --- | --- |
185
+ | Domains, range and sign | Structural rules, exact restriction transfer, selected semialgebraic and elementary families | Source definition and every requested restriction remain premises |
186
+ | Shape and regularity | Monotonicity, convexity, symmetry, periodicity, finite metric constants, variation and supported Piecewise seams | Cell coverage, global order and replay support are separate |
187
+ | Exact coefficients | Up to four real algebraic constants in a field of degree at most four | Larger fields and coefficient parameters can decline the lift |
188
+ | Parameter roots | Selected uniform families and rational polynomial geometry of degree at most four with up to four real parameters | Every parameter region needs a count or an explicit unresolved status |
189
+ | Real roots and extrema | Compact covers, selected multiple roots, periodic families, tails and outward extrema bounds | Every source region needs a root or exclusion proof |
190
+ | Complex roots and poles | Algebraic enumeration, supported entire/quotient contours, subdivision and Newton refinement | Declared grammar, rational rectangles, source guards and clear boundaries |
191
+ | Branches and local analysis | Finite atlases, supplied holomorphic recipes, implicit orders, residues, selected essential-series/classification rules and continuation | Selected local values do not redefine global principal expressions; essential-singularity isolation is unsupported |
192
+ | Certified operations | Supported equations, inverses, integration, winding and homotopy | Each operation has its own premises and replay contract |
193
+
194
+ General transcendental parameter geometry, automatic discovery of arbitrary implicit branches, unrestricted branch-surface gluing, arbitrary analytic common-factor discovery and essential-singularity isolation remain capability gaps. Bounded work can leave supported problems partial. See the [full matrix](https://github.com/BhuvaneshBhatt/funcprops/blob/main/docs/capabilities.md), [result contracts](https://github.com/BhuvaneshBhatt/funcprops/blob/main/docs/reference/result-contracts.md) and [troubleshooting](https://github.com/BhuvaneshBhatt/funcprops/blob/main/docs/troubleshooting.md).
195
+
196
+ ## Documentation and examples
197
+
198
+ - [Documentation index](https://github.com/BhuvaneshBhatt/funcprops/blob/main/docs/index.md)
199
+ - [Function property reference](https://github.com/BhuvaneshBhatt/funcprops/blob/main/docs/properties/index.md) — canonical reference pages for every public function property
200
+ - [Working with results, assumptions, certificates, and caches](https://github.com/BhuvaneshBhatt/funcprops/blob/main/docs/using-results.md)
201
+ - [Executable tutorial notebook](https://github.com/BhuvaneshBhatt/funcprops/blob/main/docs/notebooks/function-properties-tour.ipynb) — generated from the same canonical example corpus used by the reference pages
202
+ - [Task tutorials by level](https://github.com/BhuvaneshBhatt/funcprops/blob/main/docs/tutorials/index.md)
203
+ - [Runnable examples](https://github.com/BhuvaneshBhatt/funcprops/blob/main/examples/README.md)
204
+ - [Workflow notebook](https://github.com/BhuvaneshBhatt/funcprops/blob/main/docs/notebooks/certified-workflows.ipynb)
205
+ - [Statistical special functions](https://github.com/BhuvaneshBhatt/funcprops/blob/main/docs/statistical-special-functions.md)
206
+ - [Mathematical conventions](https://github.com/BhuvaneshBhatt/funcprops/blob/main/docs/mathematical-conventions.md)
207
+ - [Complex analysis](https://github.com/BhuvaneshBhatt/funcprops/blob/main/docs/complex-analysis.md)
208
+ - [Homotopy and contour deformation](https://github.com/BhuvaneshBhatt/funcprops/blob/main/docs/homotopy.md)
209
+ - [Capability matrix and limitations](https://github.com/BhuvaneshBhatt/funcprops/blob/main/docs/capabilities.md)
210
+ - [Architecture](https://github.com/BhuvaneshBhatt/funcprops/blob/main/docs/architecture.md)
211
+ - [Proof design](https://github.com/BhuvaneshBhatt/funcprops/blob/main/docs/design/index.md)
212
+ - [Testing](https://github.com/BhuvaneshBhatt/funcprops/blob/main/docs/guides/testing.md)
213
+ - [DLMF property-table audit](https://github.com/BhuvaneshBhatt/funcprops/blob/main/docs/dlmf-coverage.md)
214
+ - [Source semantics](https://github.com/BhuvaneshBhatt/funcprops/blob/main/docs/source-semantics.md)
215
+ - [Domains and branches](https://github.com/BhuvaneshBhatt/funcprops/blob/main/docs/guides/domains-and-branches.md)
216
+ - [Budgets](https://github.com/BhuvaneshBhatt/funcprops/blob/main/docs/guides/budgets-and-resume.md)
217
+ - [Certification model](https://github.com/BhuvaneshBhatt/funcprops/blob/main/docs/certification.md)
218
+
219
+ The canonical examples live in `examples/property_examples.py`. Documentation specification tests execute those examples and verify that the reference and notebook stay synchronized with the public API.
220
+
221
+ ## Development
222
+
223
+ Contributions – whether they are bug reports, suggestions, or code – are welcome!
224
+
225
+ Run the source-tree tests with:
226
+
227
+ ```bash
228
+ PYTHONPATH=src:. pytest
229
+ ```
230
+
231
+ Run the static gates with:
232
+
233
+ ```bash
234
+ ruff format --check src tests examples tools
235
+ ruff check src tests examples tools
236
+ python -m compileall -q src tests examples tools
237
+ ```
238
+
239
+ The package keeps exact fast paths ahead of heavier partition, root-isolation, or semialgebraic machinery. Structural refactors should preserve that ordering unless a benchmark and correctness argument justify changing it.
240
+
241
+ ## License
242
+
243
+ `funcprops` is licensed under the GNU General Public License version 3 only
244
+ (GPL-3.0-only). See [LICENSE](https://github.com/BhuvaneshBhatt/funcprops/blob/main/LICENSE).
@@ -4,8 +4,8 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "funcprops"
7
- version = "0.2.0"
8
- description = "Symbolic global function properties backed by SymPy"
7
+ version = "0.4.0"
8
+ description = "Symbolic analysis of real, complex, and multivariate function properties for SymPy"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
11
11
  license = "GPL-3.0-only"
@@ -13,37 +13,39 @@ authors = [{name = "Bhuvanesh Bhatt", email = "bhuvaneshbhatt@gmail.com"}]
13
13
  dependencies = [
14
14
  "sympy>=1.14",
15
15
  "mpmath>=1.3",
16
- "semialg>=1.2.0",
16
+ "semialg>=1.3.2",
17
17
  "exprtest>=0.1.0",
18
18
  ]
19
19
  keywords = [
20
- "sympy",
21
- "symbolic mathematics",
22
- "symbolic computation",
23
- "function analysis",
24
- "function properties",
25
- "real analysis",
26
- "complex analysis",
27
- "domains",
28
- "ranges",
29
- "zeros",
30
- "root isolation",
31
- "monotonicity",
32
- "convexity",
33
- "continuity",
34
- "differentiability",
35
- "smoothness",
36
- "singularities",
37
- "branch cuts",
38
- "injectivity",
39
- "surjectivity",
40
- "bijectivity",
41
- "sign analysis",
42
- "semialgebraic",
43
- "certified computation",
44
- "exact computation",
20
+ "sympy",
21
+ "symbolic mathematics",
22
+ "symbolic computation",
23
+ "function analysis",
24
+ "function properties",
25
+ "real analysis",
26
+ "complex analysis",
27
+ "domains",
28
+ "ranges",
29
+ "zeros",
30
+ "root isolation",
31
+ "monotonicity",
32
+ "convexity",
33
+ "smoothness",
34
+ "singularities",
35
+ "branch cuts",
36
+ "mapping properties",
37
+ "sign analysis",
38
+ "semialgebraic",
39
+ "certified computation",
40
+ "exact computation",
45
41
  ]
46
42
  classifiers = [
43
+ "Development Status :: 4 - Beta",
44
+ "Intended Audience :: Science/Research",
45
+ "Operating System :: OS Independent",
46
+ "Programming Language :: Python :: 3.11",
47
+ "Programming Language :: Python :: 3.12",
48
+ "Programming Language :: Python :: 3.13",
47
49
  "Programming Language :: Python :: 3",
48
50
  "Programming Language :: Python :: 3 :: Only",
49
51
  "Topic :: Scientific/Engineering :: Mathematics",
@@ -54,6 +56,8 @@ classifiers = [
54
56
  Homepage = "https://github.com/BhuvaneshBhatt/funcprops"
55
57
  Documentation = "https://github.com/BhuvaneshBhatt/funcprops#readme"
56
58
  Repository = "https://github.com/BhuvaneshBhatt/funcprops"
59
+ Issues = "https://github.com/BhuvaneshBhatt/funcprops/issues"
60
+ Changelog = "https://github.com/BhuvaneshBhatt/funcprops/blob/main/CHANGELOG.md"
57
61
 
58
62
  [project.optional-dependencies]
59
63
  test = ["pytest>=8", "hypothesis>=6"]