sunnbear 0.2.2__tar.gz → 0.2.4__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 (154) hide show
  1. {sunnbear-0.2.2 → sunnbear-0.2.4}/.gitignore +0 -3
  2. {sunnbear-0.2.2 → sunnbear-0.2.4}/PKG-INFO +22 -12
  3. {sunnbear-0.2.2 → sunnbear-0.2.4}/pyproject.toml +33 -26
  4. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/artifacts/builtin/mc_tuples/manifest.json +5 -6
  5. sunnbear-0.2.4/src/sunnbear/_core/artifacts/builtin/mc_tuples/mc_tuples.csv +1025 -0
  6. sunnbear-0.2.4/src/sunnbear/_core/benchmark/mc_tuples/__init__.py +28 -0
  7. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/benchmark/mc_tuples/artifact.py +1 -2
  8. sunnbear-0.2.4/src/sunnbear/_core/benchmark/mc_tuples/construction/__init__.py +14 -0
  9. sunnbear-0.2.2/src/sunnbear/_core/benchmark/mc_tuples/construction_allocation.py → sunnbear-0.2.4/src/sunnbear/_core/benchmark/mc_tuples/construction/allocation.py +113 -58
  10. sunnbear-0.2.2/src/sunnbear/_core/benchmark/mc_tuples/construction_correction.py → sunnbear-0.2.4/src/sunnbear/_core/benchmark/mc_tuples/construction/correction.py +35 -31
  11. sunnbear-0.2.2/src/sunnbear/_core/benchmark/mc_tuples/construction.py → sunnbear-0.2.4/src/sunnbear/_core/benchmark/mc_tuples/construction/generator.py +44 -62
  12. sunnbear-0.2.4/src/sunnbear/_core/benchmark/mc_tuples/construction/population.py +87 -0
  13. sunnbear-0.2.2/src/sunnbear/_core/benchmark/mc_tuples/construction_result.py → sunnbear-0.2.4/src/sunnbear/_core/benchmark/mc_tuples/construction/size_result.py +12 -8
  14. sunnbear-0.2.2/src/sunnbear/_core/benchmark/mc_tuples/construction_solve.py → sunnbear-0.2.4/src/sunnbear/_core/benchmark/mc_tuples/construction/solve.py +36 -36
  15. sunnbear-0.2.4/src/sunnbear/_core/benchmark/mc_tuples/core/__init__.py +4 -0
  16. {sunnbear-0.2.2/src/sunnbear/_core/benchmark/mc_tuples → sunnbear-0.2.4/src/sunnbear/_core/benchmark/mc_tuples/core}/sizes.py +15 -1
  17. {sunnbear-0.2.2/src/sunnbear/_core/benchmark/mc_tuples → sunnbear-0.2.4/src/sunnbear/_core/benchmark/mc_tuples/core}/tuples.py +2 -2
  18. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/benchmark/protocol/correctness.py +7 -4
  19. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/bracketing/anderson_bjorck/state.py +3 -5
  20. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/bracketing/brent/solver.py +6 -10
  21. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/bracketing/illinois/state.py +3 -2
  22. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/bracketing/itp/solver.py +7 -5
  23. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/bracketing/modab/solver.py +10 -10
  24. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/bracketing/pegasus/state.py +3 -5
  25. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/bracketing/toms748/solver.py +5 -9
  26. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/core/interval.py +3 -3
  27. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/core/solver.py +5 -5
  28. sunnbear-0.2.4/src/sunnbear/_core/utils/floats.py +7 -0
  29. sunnbear-0.2.4/src/sunnbear/_core/utils/spread_over_grid.py +48 -0
  30. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/exceptions.py +1 -1
  31. sunnbear-0.2.2/src/sunnbear/_core/artifacts/builtin/mc_tuples/mc_tuples.csv +0 -1025
  32. sunnbear-0.2.2/src/sunnbear/_core/benchmark/mc_tuples/__init__.py +0 -19
  33. sunnbear-0.2.2/src/sunnbear/_core/benchmark/mc_tuples/construction_population.py +0 -157
  34. {sunnbear-0.2.2 → sunnbear-0.2.4}/LICENSE +0 -0
  35. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/__init__.py +0 -0
  36. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/__init__.py +0 -0
  37. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/artifacts/__init__.py +0 -0
  38. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/artifacts/archiver.py +0 -0
  39. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/artifacts/data_release_client.py +0 -0
  40. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/artifacts/declaration.py +0 -0
  41. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/artifacts/exceptions.py +0 -0
  42. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/artifacts/listing.py +0 -0
  43. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/artifacts/manifest.py +0 -0
  44. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/artifacts/registry.py +0 -0
  45. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/artifacts/source.py +0 -0
  46. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/artifacts/store.py +0 -0
  47. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/benchmark/__init__.py +0 -0
  48. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/benchmark/aggregation/__init__.py +0 -0
  49. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/benchmark/aggregation/derived_results.py +0 -0
  50. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/benchmark/aggregation/summary.py +0 -0
  51. {sunnbear-0.2.2/src/sunnbear/_core/benchmark/mc_tuples → sunnbear-0.2.4/src/sunnbear/_core/benchmark/mc_tuples/construction}/exceptions.py +0 -0
  52. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/benchmark/protocol/__init__.py +0 -0
  53. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/benchmark/protocol/seeds.py +0 -0
  54. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/benchmark/protocol/tolerances.py +0 -0
  55. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/benchmark/runner/__init__.py +0 -0
  56. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/benchmark/runner/exceptions.py +0 -0
  57. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/benchmark/runner/results_schema.py +0 -0
  58. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/benchmark/runner/run_dir.py +0 -0
  59. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/benchmark/runner/run_info.py +0 -0
  60. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/benchmark/runner/run_settings.py +0 -0
  61. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/benchmark/runner/runner.py +0 -0
  62. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/benchmark/runner/task.py +0 -0
  63. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/benchmark/runner/worker_pool.py +0 -0
  64. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/exceptions/__init__.py +0 -0
  65. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/exceptions/base.py +0 -0
  66. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/functions/__init__.py +0 -0
  67. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/functions/catalog/__init__.py +0 -0
  68. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/functions/catalog/c01_existing_benchmark_suites/__init__.py +0 -0
  69. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/functions/catalog/c02_standard_function_families/__init__.py +0 -0
  70. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/functions/catalog/c02_standard_function_families/c01_polynomials/__init__.py +0 -0
  71. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/functions/catalog/c02_standard_function_families/c01_polynomials/f01_cubic.py +0 -0
  72. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/functions/catalog/c02_standard_function_families/c01_polynomials/f02_odd_power.py +0 -0
  73. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/functions/catalog/c03_purpose_built_functions/__init__.py +0 -0
  74. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/functions/catalog/c99_user_defined_functions/__init__.py +0 -0
  75. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/functions/core/__init__.py +0 -0
  76. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/functions/core/category.py +0 -0
  77. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/functions/core/exceptions.py +0 -0
  78. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/functions/core/formula.py +0 -0
  79. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/functions/core/identity.py +0 -0
  80. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/functions/core/param_values.py +0 -0
  81. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/functions/core/recipes.py +0 -0
  82. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/functions/core/registry.py +0 -0
  83. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/functions/core/taxonomy.py +0 -0
  84. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/functions/core/test_cases.py +0 -0
  85. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/functions/core/test_function.py +0 -0
  86. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/functions/core/types.py +0 -0
  87. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/__init__.py +0 -0
  88. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/bracketing/__init__.py +0 -0
  89. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/bracketing/anderson_bjorck/__init__.py +0 -0
  90. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/bracketing/anderson_bjorck/configs.py +0 -0
  91. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/bracketing/anderson_bjorck/solver.py +0 -0
  92. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/bracketing/bisection/__init__.py +0 -0
  93. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/bracketing/bisection/configs.py +0 -0
  94. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/bracketing/bisection/solver.py +0 -0
  95. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/bracketing/brent/__init__.py +0 -0
  96. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/bracketing/brent/configs.py +0 -0
  97. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/bracketing/carf/__init__.py +0 -0
  98. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/bracketing/carf/configs.py +0 -0
  99. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/bracketing/carf/solver.py +0 -0
  100. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/bracketing/chandrupatla/__init__.py +0 -0
  101. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/bracketing/chandrupatla/configs.py +0 -0
  102. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/bracketing/chandrupatla/solver.py +0 -0
  103. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/bracketing/illinois/__init__.py +0 -0
  104. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/bracketing/illinois/configs.py +0 -0
  105. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/bracketing/illinois/solver.py +0 -0
  106. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/bracketing/itp/__init__.py +0 -0
  107. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/bracketing/itp/configs.py +0 -0
  108. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/bracketing/itp/state.py +0 -0
  109. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/bracketing/itp/variant.py +0 -0
  110. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/bracketing/modab/__init__.py +0 -0
  111. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/bracketing/modab/configs.py +0 -0
  112. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/bracketing/pegasus/__init__.py +0 -0
  113. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/bracketing/pegasus/configs.py +0 -0
  114. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/bracketing/pegasus/solver.py +0 -0
  115. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/bracketing/regula_falsi/__init__.py +0 -0
  116. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/bracketing/regula_falsi/configs.py +0 -0
  117. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/bracketing/regula_falsi/solver.py +0 -0
  118. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/bracketing/ridders/__init__.py +0 -0
  119. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/bracketing/ridders/configs.py +0 -0
  120. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/bracketing/ridders/solver.py +0 -0
  121. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/bracketing/ridders/variant.py +0 -0
  122. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/bracketing/steffen_brent/__init__.py +0 -0
  123. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/bracketing/steffen_brent/configs.py +0 -0
  124. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/bracketing/steffen_brent/solver.py +0 -0
  125. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/bracketing/toms748/__init__.py +0 -0
  126. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/bracketing/toms748/configs.py +0 -0
  127. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/core/__init__.py +0 -0
  128. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/core/config.py +0 -0
  129. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/core/exceptions.py +0 -0
  130. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/core/registry.py +0 -0
  131. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/core/result.py +0 -0
  132. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/core/role.py +0 -0
  133. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/core/state.py +0 -0
  134. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/core/wrapped_function.py +0 -0
  135. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/open/__init__.py +0 -0
  136. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/open/secant/__init__.py +0 -0
  137. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/open/secant/configs.py +0 -0
  138. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/solvers/open/secant/solver.py +0 -0
  139. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/stats/__init__.py +0 -0
  140. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/stats/pairwise_l1.py +0 -0
  141. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/stats/pseudo_quantiles/__init__.py +0 -0
  142. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/stats/pseudo_quantiles/geometric_pseudo_quantile.py +0 -0
  143. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/stats/pseudo_quantiles/ordered_weighted_geomean.py +0 -0
  144. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/utils/__init__.py +0 -0
  145. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/utils/class_origin.py +0 -0
  146. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/utils/grouping.py +0 -0
  147. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/utils/mapping_comparison.py +0 -0
  148. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/_core/utils/slugify.py +0 -0
  149. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/benchmark.py +0 -0
  150. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/data.py +0 -0
  151. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/functions.py +0 -0
  152. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/py.typed +0 -0
  153. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/solvers.py +0 -0
  154. {sunnbear-0.2.2 → sunnbear-0.2.4}/src/sunnbear/stats.py +0 -0
@@ -12,9 +12,6 @@ __pycache__
12
12
  .coverage.*
13
13
  htmlcov
14
14
 
15
- # Jupyter Notebook checkpoints
16
- .ipynb_checkpoints
17
-
18
15
  # Virtual environment directories
19
16
  venv
20
17
  .env
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: sunnbear
3
- Version: 0.2.2
3
+ Version: 0.2.4
4
4
  Summary: Under construction.
5
5
  Project-URL: Source, https://github.com/bertpl/sunnbear
6
6
  Project-URL: ChangeLog, https://github.com/bertpl/sunnbear/blob/main/CHANGELOG.md
@@ -16,34 +16,44 @@ Classifier: Operating System :: OS Independent
16
16
  Classifier: Programming Language :: Python :: 3.12
17
17
  Classifier: Programming Language :: Python :: 3.13
18
18
  Classifier: Programming Language :: Python :: 3.14
19
+ Classifier: Programming Language :: Python :: 3.15
19
20
  Classifier: Topic :: Scientific/Engineering :: Mathematics
20
21
  Classifier: Typing :: Typed
21
22
  Requires-Python: >=3.12
22
23
  Requires-Dist: backports-zstd>=1.0.0; python_version < '3.14'
23
- Requires-Dist: counted-float>=1.2.1
24
+ Requires-Dist: counted-float>=1.2.1; python_version < '3.15'
25
+ Requires-Dist: counted-float>=2.6.0; python_version >= '3.15'
24
26
  Requires-Dist: matplotlib>=3.10.7; python_version == '3.12'
25
27
  Requires-Dist: matplotlib>=3.10.7; python_version == '3.13'
26
- Requires-Dist: matplotlib>=3.10.7; python_version >= '3.14'
27
- Requires-Dist: max-div>=0.21.1
28
- Requires-Dist: mpl-composite>=0.1.2
28
+ Requires-Dist: matplotlib>=3.10.7; python_version == '3.14'
29
+ Requires-Dist: matplotlib>=3.11.2; python_version >= '3.15'
30
+ Requires-Dist: max-div>=0.21.1; python_version < '3.15'
31
+ Requires-Dist: max-div>=0.21.3; python_version >= '3.15'
32
+ Requires-Dist: mpl-composite>=0.1.2; python_version < '3.15'
33
+ Requires-Dist: mpl-composite>=0.1.4; python_version >= '3.15'
29
34
  Requires-Dist: numba>=0.60.0; python_version == '3.12'
30
35
  Requires-Dist: numba>=0.66.0; python_version == '3.13'
31
- Requires-Dist: numba>=0.66.0; python_version >= '3.14'
36
+ Requires-Dist: numba>=0.66.0; python_version == '3.14'
37
+ Requires-Dist: numba>=0.68.0; python_version >= '3.15'
32
38
  Requires-Dist: numpy>=2.0.0; python_version == '3.12'
33
39
  Requires-Dist: numpy>=2.1.0; python_version == '3.13'
34
- Requires-Dist: numpy>=2.3.2; python_version >= '3.14'
40
+ Requires-Dist: numpy>=2.3.2; python_version == '3.14'
41
+ Requires-Dist: numpy>=2.5.2; python_version >= '3.15'
35
42
  Requires-Dist: platformdirs>=4.0
36
- Requires-Dist: polars>=1.0.0
37
- Requires-Dist: pydantic>=2.12; python_version >= '3.14'
43
+ Requires-Dist: polars>=1.0.0; python_version < '3.15'
44
+ Requires-Dist: polars>=2.0.0; python_version >= '3.15'
45
+ Requires-Dist: pydantic>=2.12; python_version == '3.14'
46
+ Requires-Dist: pydantic>=2.14; python_version >= '3.15'
38
47
  Requires-Dist: pydantic>=2.7; python_version == '3.12'
39
48
  Requires-Dist: pydantic>=2.9; python_version == '3.13'
40
- Requires-Dist: snuffled>=0.1.6
49
+ Requires-Dist: snuffled>=0.1.6; python_version < '3.15'
50
+ Requires-Dist: snuffled>=0.1.9; python_version >= '3.15'
41
51
  Requires-Dist: typing-extensions>=4.4
42
52
  Description-Content-Type: text/markdown
43
53
 
44
54
  [![CI](https://img.shields.io/github/actions/workflow/status/bertpl/sunnbear/push_to_main.yml?branch=main&label=CI)](https://github.com/bertpl/sunnbear/actions/workflows/push_to_main.yml)
45
55
  [![Coverage](https://img.shields.io/badge/coverage-100.00%25-brightgreen)](https://github.com/bertpl/sunnbear/actions/workflows/push_to_main.yml)
46
- [![Tests](https://img.shields.io/badge/tests-1439-blue)](https://github.com/bertpl/sunnbear/actions/workflows/push_to_main.yml)
56
+ [![Tests](https://img.shields.io/badge/tests-1457-blue)](https://github.com/bertpl/sunnbear/actions/workflows/push_to_main.yml)
47
57
  [![PyPI](https://img.shields.io/pypi/v/sunnbear.svg)](https://pypi.org/project/sunnbear/)
48
58
  [![Python](https://img.shields.io/pypi/pyversions/sunnbear.svg)](https://pypi.org/project/sunnbear/)
49
59
  [![License](https://img.shields.io/badge/license-Apache%202.0-blue)](https://github.com/bertpl/sunnbear/blob/main/LICENSE)
@@ -54,4 +64,4 @@ Description-Content-Type: text/markdown
54
64
 
55
65
  Under construction.
56
66
 
57
- ![sunnbear splash](https://raw.githubusercontent.com/bertpl/sunnbear/v0.2.2/images/splash_with_version.webp)
67
+ ![sunnbear splash](https://raw.githubusercontent.com/bertpl/sunnbear/v0.2.4/images/splash_with_version.webp)
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "sunnbear"
3
- version = "0.2.2"
3
+ version = "0.2.4"
4
4
  description = "Under construction."
5
5
  # readme is dynamic: hatch-fancy-pypi-readme builds the PyPI long-description from README.md,
6
6
  # rewriting the relative splash link to a tag-pinned absolute URL (config below).
@@ -15,31 +15,45 @@ dependencies = [
15
15
  # Per-Python minimal versions: each is the earliest version shipping a wheel for that
16
16
  # CPython (and, for numpy, admitted by the numba minimal version on the same interpreter),
17
17
  # so `lowest-direct` installs (not source-builds) across the whole matrix.
18
+ #
19
+ # A pure-Python package ships 1 wheel that installs on every Python version, so the rule above does
20
+ # not apply to it: where its minimal version does not declare 3.15 support, a separate dependency line
21
+ # for 3.15 raises its minimal version to the earliest release that does.
18
22
  "numpy>=2.0.0; python_version == '3.12'",
19
23
  "numpy>=2.1.0; python_version == '3.13'",
20
- "numpy>=2.3.2; python_version >= '3.14'",
24
+ "numpy>=2.3.2; python_version == '3.14'",
25
+ "numpy>=2.5.2; python_version >= '3.15'",
21
26
  "numba>=0.60.0; python_version == '3.12'",
22
27
  "numba>=0.66.0; python_version == '3.13'",
23
- "numba>=0.66.0; python_version >= '3.14'",
28
+ "numba>=0.66.0; python_version == '3.14'",
29
+ "numba>=0.68.0; python_version >= '3.15'",
24
30
  "matplotlib>=3.10.7; python_version == '3.12'",
25
31
  "matplotlib>=3.10.7; python_version == '3.13'",
26
- "matplotlib>=3.10.7; python_version >= '3.14'",
27
- "counted-float>=1.2.1",
32
+ "matplotlib>=3.10.7; python_version == '3.14'",
33
+ "matplotlib>=3.11.2; python_version >= '3.15'",
34
+ "counted-float>=1.2.1; python_version < '3.15'",
35
+ "counted-float>=2.6.0; python_version >= '3.15'",
28
36
  # These pydantic minimal versions equal counted-float's own pydantic minimal versions; counted-float
29
37
  # depends on pydantic, so every install already satisfies them.
30
38
  "pydantic>=2.7; python_version == '3.12'",
31
39
  "pydantic>=2.9; python_version == '3.13'",
32
- "pydantic>=2.12; python_version >= '3.14'",
40
+ "pydantic>=2.12; python_version == '3.14'",
41
+ "pydantic>=2.14; python_version >= '3.15'",
33
42
  "typing-extensions>=4.4", # TypeVar defaults (PEP 696) on Python < 3.13
34
43
  "platformdirs>=4.0", # platformdirs finds the user's cache directory for downloaded data artifacts
35
44
  # backports.zstd provides zstd for the archives of downloaded data artifacts; the standard library has it from 3.14.
36
45
  "backports.zstd>=1.0.0; python_version < '3.14'",
37
- "snuffled>=0.1.6",
38
- # max-div 0.21.1 adds the factory method DiversityMetric.min_separation(), which the construction of the Monte Carlo (MC) tuple set calls to create its diversity metric.
39
- "max-div>=0.21.1",
40
- "mpl-composite>=0.1.2",
41
- # polars holds the benchmark results; its wheels use the stable CPython ABI, so 1 minimal version serves every supported Python version.
42
- "polars>=1.0.0",
46
+ "snuffled>=0.1.6; python_version < '3.15'",
47
+ "snuffled>=0.1.9; python_version >= '3.15'",
48
+ # max-div 0.21.1 adds DiversityMetric.gpq_separation(q), the diversity metric that sunnbear maximizes when it builds the Monte Carlo (MC) tuple set.
49
+ "max-div>=0.21.1; python_version < '3.15'",
50
+ "max-div>=0.21.3; python_version >= '3.15'",
51
+ "mpl-composite>=0.1.2; python_version < '3.15'",
52
+ "mpl-composite>=0.1.4; python_version >= '3.15'",
53
+ # polars holds the benchmark results. Its wheels use the stable CPython ABI, so they install on every Python
54
+ # version, but on 3.15 the benchmark runner fails with polars 1.x.
55
+ "polars>=1.0.0; python_version < '3.15'",
56
+ "polars>=2.0.0; python_version >= '3.15'",
43
57
  ]
44
58
  classifiers = [
45
59
  "Development Status :: 2 - Pre-Alpha",
@@ -50,6 +64,7 @@ classifiers = [
50
64
  "Programming Language :: Python :: 3.12",
51
65
  "Programming Language :: Python :: 3.13",
52
66
  "Programming Language :: Python :: 3.14",
67
+ "Programming Language :: Python :: 3.15",
53
68
  "Topic :: Scientific/Engineering :: Mathematics",
54
69
  "Typing :: Typed",
55
70
  ]
@@ -65,24 +80,18 @@ dev = [
65
80
  # exact tool versions are pinned by the tracked uv.lock (used by pre-commit,
66
81
  # `make lint`, and CI); these ranges just set the floor.
67
82
  "ruff>=0.15.11",
68
- "scipy>=1.16.2", # its root finders are what the solver tests compare against; never a runtime dependency
83
+ # The solver tests compare against scipy's root finders; scipy is never a runtime dependency. On 3.15,
84
+ # its minimal version is its first release with a 3.15 wheel.
85
+ "scipy>=1.16.2; python_version < '3.15'",
86
+ "scipy>=1.18.1; python_version >= '3.15'",
69
87
  "ty==0.0.56", # pre-1.0 type checker — pin exactly; its ruleset is still evolving
70
88
  ]
71
- # maintainer scratch tooling — installed by a plain `uv sync` (default-groups below)
72
- # but NOT by CI's `uv sync --group dev` / `uv run --group dev`, keeping matrix jobs lean
73
- notebooks = [
74
- "jupyterlab>=4.4.6",
75
- "notebook>=7.4.5",
76
- ]
77
- # packaging-integrity tooling for the _package_check.yml CI gate; opt-in via
78
- # `--group package`, kept out of the default dev/notebooks sync.
89
+ # This group holds the packaging-integrity tooling for the _package_check.yml CI gate, which installs it with
90
+ # `--group package`.
79
91
  package = [
80
92
  "check-wheel-contents>=0.6.2",
81
93
  ]
82
94
 
83
- [tool.uv]
84
- default-groups = ["dev", "notebooks"]
85
-
86
95
  [project.urls]
87
96
  Source = "https://github.com/bertpl/sunnbear"
88
97
  ChangeLog = "https://github.com/bertpl/sunnbear/blob/main/CHANGELOG.md"
@@ -189,8 +198,6 @@ invalid-method-override = "ignore"
189
198
  [tool.codespell]
190
199
  # "intoto": the in-toto attestation format (provenance.intoto.jsonl).
191
200
  ignore-words-list = "intoto"
192
- # Notebooks embed base64 image outputs that codespell misreads as typos.
193
- skip = "*.ipynb"
194
201
 
195
202
  [tool.pytest.ini_options]
196
203
  addopts = "--strict-markers"
@@ -1,20 +1,19 @@
1
1
  {
2
- "build_date": "2026-10-09",
2
+ "build_date": "2026-10-11",
3
3
  "built_with": {
4
4
  "max-div": "0.21.1",
5
- "sunnbear": "0.2.2"
5
+ "sunnbear": "0.2.4"
6
6
  },
7
- "content_hash": "0f94192aefac21c21ce40a56fcedee2e24847b6d7b0632213063d0bc62c5bfa6",
7
+ "content_hash": "1320f273948e2774ac3bcaea09cbf215b345e823c59a9d2a3fcbca7d262262b7",
8
8
  "files": [
9
9
  {
10
10
  "path": "mc_tuples.csv",
11
- "sha256": "0150ab8dcd14df6aee77b97cae338fe6ec76489e8febe8569fd911d907c32795",
12
- "size_bytes": 39448
11
+ "sha256": "dde1983bfec52fa3ee3bcd2ff005416410cf8bc6bf92e7ef688ea107981e02ff",
12
+ "size_bytes": 39540
13
13
  }
14
14
  ],
15
15
  "generated_by": {
16
16
  "arguments": {
17
- "allocation_epsilon": 0.1,
18
17
  "max_size": 1024,
19
18
  "n_population": 1048576,
20
19
  "n_workers": 32,