process-improve 2.0.0__tar.gz → 2.1.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 (321) hide show
  1. {process_improve-2.0.0 → process_improve-2.1.0}/PKG-INFO +10 -5
  2. {process_improve-2.0.0 → process_improve-2.1.0}/README.md +8 -2
  3. {process_improve-2.0.0 → process_improve-2.1.0}/pyproject.toml +3 -3
  4. {process_improve-2.0.0 → process_improve-2.1.0}/pyproject.toml.orig +12 -8
  5. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/batch/control.py +27 -10
  6. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/batch/preprocessing.py +1 -1
  7. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/experiments/reference_catalogue/box-hunter-hunter-1978.json +503 -117
  8. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/experiments/reference_catalogue/davies-1956.json +215 -34
  9. process_improve-2.1.0/src/process_improve/datasets/experiments/reference_catalogue/derringer-suich-1980.json +1630 -0
  10. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/experiments/reference_catalogue/efi-mooc-quizzes.json +9 -7
  11. process_improve-2.1.0/src/process_improve/datasets/experiments/reference_catalogue/fries-hunter-1980.json +1617 -0
  12. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/experiments/reference_catalogue/goos-2025.json +2 -1
  13. process_improve-2.1.0/src/process_improve/datasets/experiments/reference_catalogue/goos-jones-2011.json +45277 -0
  14. process_improve-2.1.0/src/process_improve/datasets/experiments/reference_catalogue/jones-nachtsheim-2011.json +5980 -0
  15. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/experiments/reference_catalogue/jones-nachtsheim-2013.json +9 -9
  16. process_improve-2.1.0/src/process_improve/datasets/experiments/reference_catalogue/lenth-1989.json +1609 -0
  17. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/experiments/reference_catalogue/montgomery-2013.json +768 -129
  18. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/experiments/reference_catalogue/nair-ffd-tutorial-2004.json +5 -5
  19. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/experiments/reference_catalogue/nist-ehandbook-ch5.json +197 -112
  20. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/experiments/reference_catalogue/nunez-ares-et-al-2023.json +1 -1
  21. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/experiments/reference_catalogue/nunez-ares-goos-2019.json +35 -12
  22. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/experiments/reference_catalogue/pid-book.json +965 -603
  23. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/experiments/reference_catalogue/schmidt-launsby-2000.json +560 -102
  24. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/experiments/reference_catalogue/ullmann-doe-2012.json +78 -0
  25. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/__init__.py +41 -0
  26. process_improve-2.1.0/src/process_improve/experiments/_analyses/_shared.py +145 -0
  27. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/_analyses/aliasing.py +11 -4
  28. process_improve-2.1.0/src/process_improve/experiments/_analyses/box_cox.py +230 -0
  29. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/_analyses/curvature.py +10 -6
  30. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/_analyses/model_selection.py +40 -13
  31. process_improve-2.1.0/src/process_improve/experiments/_analyses/ols_extractors.py +360 -0
  32. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/_analyses/prediction.py +63 -1
  33. process_improve-2.1.0/src/process_improve/experiments/_analyses/split_plot.py +936 -0
  34. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/_blocking.py +90 -10
  35. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/_desirability.py +64 -8
  36. process_improve-2.1.0/src/process_improve/experiments/_expression_text.py +25 -0
  37. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/_region_geometry.py +74 -0
  38. process_improve-2.1.0/src/process_improve/experiments/_region_quadrature.py +305 -0
  39. process_improve-2.1.0/src/process_improve/experiments/_rules.py +396 -0
  40. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/_tools/analyze_experiment.py +16 -3
  41. process_improve-2.1.0/src/process_improve/experiments/_tools/analyze_omars.py +139 -0
  42. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/_tools/augment_design.py +36 -1
  43. process_improve-2.1.0/src/process_improve/experiments/_tools/compare_designs.py +94 -0
  44. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/_tools/evaluate_design.py +15 -1
  45. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/_tools/generate_design.py +25 -5
  46. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/_tools/optimize_responses.py +34 -2
  47. process_improve-2.1.0/src/process_improve/experiments/_tools/recommend_next_step.py +159 -0
  48. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/_tools/recommend_strategy.py +4 -1
  49. process_improve-2.1.0/src/process_improve/experiments/_tools/run_sheet.py +159 -0
  50. process_improve-2.1.0/src/process_improve/experiments/_tools/simulate_design_performance.py +111 -0
  51. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/_uniform_sampling.py +67 -14
  52. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/analysis.py +489 -61
  53. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/augment.py +446 -38
  54. process_improve-2.1.0/src/process_improve/experiments/benchmark.py +356 -0
  55. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/compare.py +186 -17
  56. process_improve-2.1.0/src/process_improve/experiments/crossed_arrays.py +116 -0
  57. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/design_catalog.py +223 -27
  58. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/designs.py +289 -43
  59. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/designs_constrained.py +421 -77
  60. process_improve-2.1.0/src/process_improve/experiments/designs_covariates.py +296 -0
  61. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/designs_mixture.py +18 -8
  62. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/designs_mixture_constrained.py +50 -23
  63. process_improve-2.1.0/src/process_improve/experiments/designs_mixture_process.py +666 -0
  64. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/designs_optimal.py +108 -43
  65. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/designs_response_surface.py +183 -12
  66. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/designs_screening.py +64 -5
  67. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/designs_space_filling.py +16 -4
  68. process_improve-2.1.0/src/process_improve/experiments/designs_split_plot.py +586 -0
  69. process_improve-2.1.0/src/process_improve/experiments/designs_three_level.py +213 -0
  70. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/designs_utils.py +37 -11
  71. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/evaluate.py +660 -62
  72. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/factor.py +7 -0
  73. process_improve-2.1.0/src/process_improve/experiments/gaussian_process.py +350 -0
  74. process_improve-2.1.0/src/process_improve/experiments/incomplete_blocks.py +195 -0
  75. process_improve-2.1.0/src/process_improve/experiments/layouts.py +191 -0
  76. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/least_squares_means.py +36 -2
  77. process_improve-2.1.0/src/process_improve/experiments/model_comparison.py +199 -0
  78. process_improve-2.1.0/src/process_improve/experiments/next_step.py +2195 -0
  79. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/omars.py +78 -20
  80. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/optimization.py +356 -152
  81. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/projections.py +27 -9
  82. process_improve-2.1.0/src/process_improve/experiments/pseudocomponents.py +137 -0
  83. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/random_effects.py +73 -0
  84. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/reference_catalogue.py +543 -96
  85. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/region.py +593 -74
  86. process_improve-2.1.0/src/process_improve/experiments/run_sheet.py +330 -0
  87. process_improve-2.1.0/src/process_improve/experiments/sequential.py +308 -0
  88. process_improve-2.1.0/src/process_improve/experiments/simulate.py +377 -0
  89. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/strategy/domain_templates.py +12 -6
  90. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/strategy/engine.py +274 -69
  91. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/strategy/models.py +16 -1
  92. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/structures.py +20 -4
  93. process_improve-2.1.0/src/process_improve/experiments/surface_checks.py +180 -0
  94. process_improve-2.1.0/src/process_improve/experiments/three_level_components.py +162 -0
  95. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/tools.py +13 -0
  96. process_improve-2.1.0/src/process_improve/experiments/variance_dispersion.py +279 -0
  97. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/visualization/plots/optimization_plots.py +3 -3
  98. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/visualization/plots/registry.py +10 -3
  99. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/visualization/plots/surfaces.py +245 -33
  100. process_improve-2.1.0/src/process_improve/experiments/yates.py +190 -0
  101. process_improve-2.1.0/src/process_improve/monitoring/__init__.py +14 -0
  102. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/monitoring/control_charts.py +32 -1
  103. process_improve-2.1.0/src/process_improve/monitoring/evop.py +234 -0
  104. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/monitoring/metrics.py +16 -1
  105. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/multivariate/_common.py +95 -0
  106. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/multivariate/_mbpca.py +21 -6
  107. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/multivariate/_mbpls.py +94 -9
  108. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/multivariate/_nipals.py +4 -1
  109. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/multivariate/_pca.py +15 -7
  110. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/multivariate/_pls.py +84 -13
  111. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/multivariate/_tpls.py +28 -1
  112. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/regression/__init__.py +5 -1
  113. process_improve-2.1.0/src/process_improve/regression/box_tidwell.py +297 -0
  114. process_improve-2.1.0/src/process_improve/regression/nonlinear.py +193 -0
  115. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/sensory/analysis.py +1 -1
  116. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/simulation/tools.py +2 -2
  117. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/tool_safety.py +53 -3
  118. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/tool_spec.py +56 -2
  119. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/univariate/__init__.py +25 -0
  120. process_improve-2.1.0/src/process_improve/univariate/classical.py +709 -0
  121. process_improve-2.1.0/src/process_improve/univariate/error_transmission.py +142 -0
  122. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/univariate/metrics.py +68 -22
  123. process_improve-2.1.0/src/process_improve/univariate/reference_distribution.py +140 -0
  124. process_improve-2.1.0/src/process_improve/univariate/serial_correlation.py +190 -0
  125. process_improve-2.1.0/src/process_improve/univariate/stated_values.py +214 -0
  126. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/univariate/tools.py +8 -3
  127. process_improve-2.0.0/src/process_improve/experiments/_analyses/_shared.py +0 -54
  128. process_improve-2.0.0/src/process_improve/experiments/_analyses/box_cox.py +0 -148
  129. process_improve-2.0.0/src/process_improve/experiments/_analyses/ols_extractors.py +0 -207
  130. process_improve-2.0.0/src/process_improve/experiments/_analyses/split_plot.py +0 -402
  131. process_improve-2.0.0/src/process_improve/monitoring/__init__.py +0 -9
  132. process_improve-2.0.0/src/process_improve/univariate/classical.py +0 -350
  133. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/__init__.py +0 -0
  134. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/_extras.py +0 -0
  135. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/_linalg.py +0 -0
  136. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/_random.py +0 -0
  137. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/_remote_data.py +0 -0
  138. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/batch/__init__.py +0 -0
  139. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/batch/_batch_monitor.py +0 -0
  140. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/batch/_batch_pca.py +0 -0
  141. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/batch/_batch_plots.py +0 -0
  142. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/batch/_batch_pls.py +0 -0
  143. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/batch/_common.py +0 -0
  144. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/batch/_gaps.py +0 -0
  145. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/batch/_online.py +0 -0
  146. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/batch/alignment_helpers.py +0 -0
  147. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/batch/data_input.py +0 -0
  148. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/batch/datasets.py +0 -0
  149. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/batch/features.py +0 -0
  150. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/batch/plotting.py +0 -0
  151. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/batch/tools.py +0 -0
  152. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/bivariate/__init__.py +0 -0
  153. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/bivariate/_elbow_peak.py +0 -0
  154. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/bivariate/methods.py +0 -0
  155. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/bivariate/tools.py +0 -0
  156. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/chemistry/__init__.py +0 -0
  157. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/chemistry/preprocessing.py +0 -0
  158. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/config.py +0 -0
  159. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/batch/batch-fake-data.csv +0 -0
  160. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/batch/details.txt +0 -0
  161. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/batch/dryer.csv +0 -0
  162. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/batch/nylon.csv +0 -0
  163. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/experiments/boilingpot.csv +0 -0
  164. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/experiments/corrosion.csv +0 -0
  165. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/experiments/golf.csv +0 -0
  166. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/experiments/pollutant.csv +0 -0
  167. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/experiments/reference_catalogue/NOTICE.md +0 -0
  168. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/experiments/reference_catalogue/nunez-ares-goos-2020.json +0 -0
  169. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/experiments/reference_catalogue/topics.json +0 -0
  170. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/experiments/solar.csv +0 -0
  171. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/experiments/test_doe1.csv +0 -0
  172. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/monitoring/batch-yield-and-purity.csv +0 -0
  173. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/monitoring/rubber-colour.csv +0 -0
  174. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/multivariate/LDPE/C.csv +0 -0
  175. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/multivariate/LDPE/Hotellings_T2_A3.csv +0 -0
  176. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/multivariate/LDPE/Hotellings_T2_A6.csv +0 -0
  177. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/multivariate/LDPE/LDPE.csv +0 -0
  178. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/multivariate/LDPE/P.csv +0 -0
  179. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/multivariate/LDPE/R.csv +0 -0
  180. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/multivariate/LDPE/T.csv +0 -0
  181. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/multivariate/LDPE/U.csv +0 -0
  182. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/multivariate/LDPE/W.csv +0 -0
  183. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/multivariate/LDPE/Yhat_A6.csv +0 -0
  184. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/multivariate/cheddar-cheese.csv +0 -0
  185. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/multivariate/dtu-pectin/NOTICE +0 -0
  186. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/multivariate/dtu-pectin/extraction1.csv +0 -0
  187. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/multivariate/dtu-pectin/extraction2.csv +0 -0
  188. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/multivariate/dtu-pectin/extraction3.csv +0 -0
  189. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/multivariate/dtu-pectin/ftir1.csv +0 -0
  190. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/multivariate/dtu-pectin/ftir2.csv +0 -0
  191. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/multivariate/dtu-pectin/ftir3.csv +0 -0
  192. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/multivariate/kamyr.csv +0 -0
  193. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/multivariate/solvents.csv +0 -0
  194. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/multivariate/tablet-spectra.csv +0 -0
  195. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/multivariate/tpls-pyphi/SOURCE +0 -0
  196. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/multivariate/tpls-pyphi/formulas_Group1.csv +0 -0
  197. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/multivariate/tpls-pyphi/formulas_Group2.csv +0 -0
  198. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/multivariate/tpls-pyphi/formulas_Group3.csv +0 -0
  199. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/multivariate/tpls-pyphi/formulas_Group4.csv +0 -0
  200. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/multivariate/tpls-pyphi/formulas_Group5.csv +0 -0
  201. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/multivariate/tpls-pyphi/process_conditions.csv +0 -0
  202. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/multivariate/tpls-pyphi/properties_Group1.csv +0 -0
  203. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/multivariate/tpls-pyphi/properties_Group2.csv +0 -0
  204. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/multivariate/tpls-pyphi/properties_Group3.csv +0 -0
  205. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/multivariate/tpls-pyphi/properties_Group4.csv +0 -0
  206. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/multivariate/tpls-pyphi/properties_Group5.csv +0 -0
  207. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/datasets/multivariate/tpls-pyphi/quality_indicators.csv +0 -0
  208. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/_analyses/__init__.py +0 -0
  209. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/_analyses/diagnostics.py +0 -0
  210. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/_analyses/glm.py +0 -0
  211. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/_analyses/lack_of_fit.py +0 -0
  212. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/_analyses/lenth.py +0 -0
  213. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/_analyses/mixture.py +0 -0
  214. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/_analyses/transforms.py +0 -0
  215. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/_classical.py +0 -0
  216. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/_finite_fields.py +0 -0
  217. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/_lm.py +0 -0
  218. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/_moment_aberration.py +0 -0
  219. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/_orthogonal_arrays.py +0 -0
  220. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/_tools/__init__.py +0 -0
  221. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/_tools/create_factorial_design.py +0 -0
  222. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/_tools/doe_knowledge.py +0 -0
  223. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/_tools/fit_linear_model.py +0 -0
  224. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/_tools/search_design_catalog.py +0 -0
  225. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/_tools/trade_off_table.py +0 -0
  226. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/_tools/visualize_doe.py +0 -0
  227. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/allocation.py +0 -0
  228. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/datasets.py +0 -0
  229. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/design_measures.py +0 -0
  230. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/designs_factorial.py +0 -0
  231. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/designs_omars.py +0 -0
  232. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/designs_omars_ilp.py +0 -0
  233. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/designs_supersaturated.py +0 -0
  234. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/knowledge/__init__.py +0 -0
  235. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/knowledge/api.py +0 -0
  236. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/knowledge/data/concepts.yaml +0 -0
  237. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/knowledge/data/decision_rules.yaml +0 -0
  238. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/knowledge/data/design_types.yaml +0 -0
  239. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/knowledge/data/diagnostics.yaml +0 -0
  240. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/knowledge/engine.py +0 -0
  241. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/knowledge/models.py +0 -0
  242. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/marginal_means.py +0 -0
  243. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/models.py +0 -0
  244. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/multistratum.py +0 -0
  245. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/omars_trade_off.py +0 -0
  246. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/optimal.py +0 -0
  247. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/run_order.py +0 -0
  248. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/separating.py +0 -0
  249. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/simulations.py +0 -0
  250. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/strategy/__init__.py +0 -0
  251. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/strategy/budget.py +0 -0
  252. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/trade_off.py +0 -0
  253. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/true_process.py +0 -0
  254. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/visualization/__init__.py +0 -0
  255. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/visualization/api.py +0 -0
  256. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/visualization/plots/__init__.py +0 -0
  257. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/visualization/plots/cube_plot.py +0 -0
  258. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/visualization/plots/design_quality.py +0 -0
  259. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/visualization/plots/diagnostics.py +0 -0
  260. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/visualization/plots/effects.py +0 -0
  261. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/visualization/plots/significance.py +0 -0
  262. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/experiments/visualization/plots/square_plot.py +0 -0
  263. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/interactions.py +0 -0
  264. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/mcp_server.py +0 -0
  265. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/monitoring/tools.py +0 -0
  266. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/multivariate/__init__.py +0 -0
  267. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/multivariate/_adaptive.py +0 -0
  268. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/multivariate/_asca.py +0 -0
  269. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/multivariate/_base.py +0 -0
  270. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/multivariate/_categorical.py +0 -0
  271. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/multivariate/_cv_criteria.py +0 -0
  272. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/multivariate/_diagnostics.py +0 -0
  273. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/multivariate/_impute.py +0 -0
  274. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/multivariate/_limits.py +0 -0
  275. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/multivariate/_null.py +0 -0
  276. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/multivariate/_opls.py +0 -0
  277. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/multivariate/_pca_pls.py +0 -0
  278. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/multivariate/_plsda.py +0 -0
  279. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/multivariate/_preprocessing.py +0 -0
  280. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/multivariate/_prm.py +0 -0
  281. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/multivariate/_procrustes.py +0 -0
  282. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/multivariate/_projection.py +0 -0
  283. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/multivariate/_resampling.py +0 -0
  284. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/multivariate/_robust.py +0 -0
  285. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/multivariate/methods.py +0 -0
  286. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/multivariate/plots.py +0 -0
  287. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/multivariate/tools.py +0 -0
  288. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/py.typed +0 -0
  289. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/recipes.py +0 -0
  290. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/regression/_robust_regression.py +0 -0
  291. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/regression/_variance_components.py +0 -0
  292. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/regression/methods.py +0 -0
  293. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/regression/tools.py +0 -0
  294. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/sensory/__init__.py +0 -0
  295. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/sensory/designed.py +0 -0
  296. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/sensory/diagnostics.py +0 -0
  297. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/sensory/ingest.py +0 -0
  298. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/sensory/mam.py +0 -0
  299. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/sensory/panel.py +0 -0
  300. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/sensory/recipes.py +0 -0
  301. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/sensory/tools.py +0 -0
  302. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/sensory/validation.py +0 -0
  303. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/simulation/__init__.py +0 -0
  304. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/simulation/batch.py +0 -0
  305. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/simulation/context.py +0 -0
  306. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/simulation/latent.py +0 -0
  307. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/simulation/model.py +0 -0
  308. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/simulation/recipes.py +0 -0
  309. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/visualization/__init__.py +0 -0
  310. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/visualization/adapters/__init__.py +0 -0
  311. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/visualization/adapters/base.py +0 -0
  312. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/visualization/adapters/echarts_adapter.py +0 -0
  313. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/visualization/adapters/plotly_adapter.py +0 -0
  314. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/visualization/charts/__init__.py +0 -0
  315. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/visualization/charts/boxplot.py +0 -0
  316. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/visualization/colors.py +0 -0
  317. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/visualization/raincloud.py +0 -0
  318. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/visualization/spec.py +0 -0
  319. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/visualization/themes.py +0 -0
  320. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/visualization/tools.py +0 -0
  321. {process_improve-2.0.0 → process_improve-2.1.0}/src/process_improve/visualization/types.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: process-improve
3
- Version: 2.0.0
3
+ Version: 2.1.0
4
4
  Summary: Designed Experiments; Latent Variables (PCA, PLS, multivariate methods with missing data); Process Monitoring; Batch data analysis.
5
5
  Keywords: Designed Experiments,Design of Experiments,DoE,Optimal Design,Response Surface,Latent Variables,PCA,PLS,Multivariate Data Analysis,Chemometrics,Process Monitoring,Batch data analysis
6
6
  Author: Kevin Dunn
@@ -10,7 +10,6 @@ Classifier: Development Status :: 4 - Beta
10
10
  Classifier: Intended Audience :: Science/Research
11
11
  Classifier: Operating System :: OS Independent
12
12
  Classifier: Programming Language :: Python :: 3
13
- Classifier: Programming Language :: Python :: 3.10
14
13
  Classifier: Programming Language :: Python :: 3.11
15
14
  Classifier: Programming Language :: Python :: 3.12
16
15
  Classifier: Programming Language :: Python :: 3.13
@@ -64,7 +63,7 @@ Requires-Dist: matplotlib>=3.10.8 ; extra == 'plotting'
64
63
  Requires-Dist: plotly>=6.5.2 ; extra == 'plotting'
65
64
  Requires-Dist: ridgeplot>=0.5.0 ; extra == 'plotting'
66
65
  Requires-Dist: seaborn>=0.13.2 ; extra == 'plotting'
67
- Requires-Python: >=3.10
66
+ Requires-Python: >=3.11
68
67
  Project-URL: Homepage, https://github.com/kgdunn/process-improve
69
68
  Project-URL: Documentation, https://kgdunn.github.io/process-improve/
70
69
  Project-URL: Try it in your browser, https://kgdunn.github.io/process-improve/app/
@@ -97,7 +96,7 @@ variable moved, and how sure am I?*
97
96
  [![Python versions](https://img.shields.io/python/required-version-toml?tomlFilePath=https%3A%2F%2Fraw.githubusercontent.com%2Fkgdunn%2Fprocess-improve%2Fmain%2Fpyproject.toml&label=python)](https://pypi.org/project/process-improve/)
98
97
  [![Downloads](https://static.pepy.tech/badge/process-improve)](https://pepy.tech/project/process-improve)
99
98
  [![Downloads per month](https://static.pepy.tech/badge/process-improve/month)](https://pepy.tech/project/process-improve)
100
- [![CI](https://github.com/kgdunn/process-improve/actions/workflows/run-tests.yml/badge.svg?branch=main&event=push)](https://github.com/kgdunn/process-improve/actions/workflows/run-tests.yml?query=branch%3Amain)
99
+ [![CI](https://github.com/kgdunn/process-improve/actions/workflows/main-status.yml/badge.svg)](https://github.com/kgdunn/process-improve/actions/workflows/run-tests.yml?query=branch%3Amain)
101
100
  [![codecov](https://codecov.io/gh/kgdunn/process-improve/branch/main/graph/badge.svg)](https://codecov.io/gh/kgdunn/process-improve)
102
101
  [![Docs](https://img.shields.io/badge/docs-kgdunn.github.io-blue.svg)](https://kgdunn.github.io/process-improve/)
103
102
  [![License](https://img.shields.io/pypi/l/process-improve.svg)](https://github.com/kgdunn/process-improve/blob/main/LICENSE)
@@ -353,7 +352,7 @@ pip install 'process-improve[fast]' # adds numba (JIT speedups for ba
353
352
  pip install 'process-improve[all]' # everything above
354
353
  ```
355
354
 
356
- Requires Python 3.10 or newer. The core install pulls in `numpy`, `pandas`, `scipy`,
355
+ Requires Python 3.11 or newer. The core install pulls in `numpy`, `pandas`, `scipy`,
357
356
  `scikit-learn`, `statsmodels`, `patsy`, `pydantic`, `pyyaml`, `threadpoolctl` and `tqdm`.
358
357
  Heavier optional surfaces (plotting, Taguchi arrays, batch IO, batch control, the MCP server, numba JIT)
359
358
  live in extras, so a caller who only needs, say, `detect_multivariate_outliers` does not have
@@ -399,6 +398,12 @@ specific version.
399
398
 
400
399
  MIT: see [LICENSE](https://github.com/kgdunn/process-improve/blob/main/LICENSE) for details.
401
400
 
401
+ ## Trademarks
402
+
403
+ OMARS® is a registered trademark of KU Leuven Research & Development. process-improve uses the
404
+ name only for the class of designs defined by Núñez Ares and Goos (2020), and is not affiliated
405
+ with, or endorsed by, KU Leuven, Minitab or Effex.
406
+
402
407
  ## Contributing
403
408
 
404
409
  Bug reports, feature requests and pull requests are welcome. See
@@ -14,7 +14,7 @@ variable moved, and how sure am I?*
14
14
  [![Python versions](https://img.shields.io/python/required-version-toml?tomlFilePath=https%3A%2F%2Fraw.githubusercontent.com%2Fkgdunn%2Fprocess-improve%2Fmain%2Fpyproject.toml&label=python)](https://pypi.org/project/process-improve/)
15
15
  [![Downloads](https://static.pepy.tech/badge/process-improve)](https://pepy.tech/project/process-improve)
16
16
  [![Downloads per month](https://static.pepy.tech/badge/process-improve/month)](https://pepy.tech/project/process-improve)
17
- [![CI](https://github.com/kgdunn/process-improve/actions/workflows/run-tests.yml/badge.svg?branch=main&event=push)](https://github.com/kgdunn/process-improve/actions/workflows/run-tests.yml?query=branch%3Amain)
17
+ [![CI](https://github.com/kgdunn/process-improve/actions/workflows/main-status.yml/badge.svg)](https://github.com/kgdunn/process-improve/actions/workflows/run-tests.yml?query=branch%3Amain)
18
18
  [![codecov](https://codecov.io/gh/kgdunn/process-improve/branch/main/graph/badge.svg)](https://codecov.io/gh/kgdunn/process-improve)
19
19
  [![Docs](https://img.shields.io/badge/docs-kgdunn.github.io-blue.svg)](https://kgdunn.github.io/process-improve/)
20
20
  [![License](https://img.shields.io/pypi/l/process-improve.svg)](https://github.com/kgdunn/process-improve/blob/main/LICENSE)
@@ -270,7 +270,7 @@ pip install 'process-improve[fast]' # adds numba (JIT speedups for ba
270
270
  pip install 'process-improve[all]' # everything above
271
271
  ```
272
272
 
273
- Requires Python 3.10 or newer. The core install pulls in `numpy`, `pandas`, `scipy`,
273
+ Requires Python 3.11 or newer. The core install pulls in `numpy`, `pandas`, `scipy`,
274
274
  `scikit-learn`, `statsmodels`, `patsy`, `pydantic`, `pyyaml`, `threadpoolctl` and `tqdm`.
275
275
  Heavier optional surfaces (plotting, Taguchi arrays, batch IO, batch control, the MCP server, numba JIT)
276
276
  live in extras, so a caller who only needs, say, `detect_multivariate_outliers` does not have
@@ -316,6 +316,12 @@ specific version.
316
316
 
317
317
  MIT: see [LICENSE](https://github.com/kgdunn/process-improve/blob/main/LICENSE) for details.
318
318
 
319
+ ## Trademarks
320
+
321
+ OMARS® is a registered trademark of KU Leuven Research & Development. process-improve uses the
322
+ name only for the class of designs defined by Núñez Ares and Goos (2020), and is not affiliated
323
+ with, or endorsed by, KU Leuven, Minitab or Effex.
324
+
319
325
  ## Contributing
320
326
 
321
327
  Bug reports, feature requests and pull requests are welcome. See
@@ -1,10 +1,10 @@
1
1
  [project]
2
2
  name = "process-improve"
3
- version = "2.0.0"
3
+ version = "2.1.0"
4
4
  description = "Designed Experiments; Latent Variables (PCA, PLS, multivariate methods with missing data); Process Monitoring; Batch data analysis."
5
5
  readme = "README.md"
6
6
  license = "MIT"
7
- requires-python = ">=3.10"
7
+ requires-python = ">=3.11"
8
8
  keywords = [
9
9
  "Designed Experiments",
10
10
  "Design of Experiments",
@@ -24,7 +24,6 @@ classifiers = [
24
24
  "Intended Audience :: Science/Research",
25
25
  "Operating System :: OS Independent",
26
26
  "Programming Language :: Python :: 3",
27
- "Programming Language :: Python :: 3.10",
28
27
  "Programming Language :: Python :: 3.11",
29
28
  "Programming Language :: Python :: 3.12",
30
29
  "Programming Language :: Python :: 3.13",
@@ -168,6 +167,7 @@ select = ["ALL"]
168
167
  ignore = [
169
168
  "CPY001",
170
169
  "C408",
170
+ "UP042",
171
171
  "ARG001",
172
172
  "ANN002",
173
173
  "ANN003",
@@ -1,17 +1,16 @@
1
1
  [project]
2
2
  name = "process-improve"
3
- version = "2.0.0"
3
+ version = "2.1.0"
4
4
  description = 'Designed Experiments; Latent Variables (PCA, PLS, multivariate methods with missing data); Process Monitoring; Batch data analysis.'
5
5
  readme = "README.md"
6
6
  license = "MIT"
7
- requires-python = ">=3.10"
7
+ requires-python = ">=3.11"
8
8
  keywords = ["Designed Experiments", "Design of Experiments", "DoE", "Optimal Design", "Response Surface", "Latent Variables", "PCA", "PLS", "Multivariate Data Analysis", "Chemometrics", "Process Monitoring", "Batch data analysis"]
9
9
  classifiers = [
10
10
  "Development Status :: 4 - Beta",
11
11
  "Intended Audience :: Science/Research",
12
12
  "Operating System :: OS Independent",
13
13
  "Programming Language :: Python :: 3",
14
- "Programming Language :: Python :: 3.10",
15
14
  "Programming Language :: Python :: 3.11",
16
15
  "Programming Language :: Python :: 3.12",
17
16
  "Programming Language :: Python :: 3.13",
@@ -28,17 +27,18 @@ dependencies = [
28
27
  # MCP server, JIT speedups) live in extras; install
29
28
  # ``process-improve[all]`` to reproduce the pre-1.24.11 closure.
30
29
  "numpy>=2.2.6",
31
- # Both pandas majors are supported. pandas 3 needs Python 3.11, so CI's
32
- # Python 3.10 jobs test pandas 2.3 and the newer Pythons test pandas 3.
30
+ # Both pandas majors are supported. CI's Python 3.11 jobs install the lowest
31
+ # version each dependency allows, so they test pandas 2.3; the newer Pythons
32
+ # test pandas 3.
33
33
  "pandas>=2.3.3",
34
34
  "patsy>=1.0.2",
35
35
  "pydantic>=2.12.5",
36
36
  "pyyaml>=6.0",
37
37
  "scikit-learn>=1.7.2",
38
38
  # Declared directly because generate_omars solves its ILP with
39
- # scipy.optimize.milp (HiGHS). 1.15 is the oldest release CI runs (Python
40
- # 3.10 resolves 1.15.3); older releases bundle HiGHS 1.2, which reports a
41
- # node-limited stop differently and is not tested here.
39
+ # scipy.optimize.milp (HiGHS). 1.15 is the oldest release CI runs (the
40
+ # Python 3.11 jobs resolve 1.15.0); older releases bundle HiGHS 1.2, which
41
+ # reports a node-limited stop differently and is not tested here.
42
42
  "scipy>=1.15",
43
43
  "statsmodels>=0.14.6",
44
44
  # Already required by scikit-learn; declared because the REML fits of the
@@ -249,6 +249,10 @@ ignore = [
249
249
 
250
250
  "C408", # Unnecessary <dict/list/tuple> call - rewrite as a literal. Disagree with this.
251
251
 
252
+ # A `(str, Enum)` class turned into `StrEnum` changes what str() and format()
253
+ # return for its members, and these enums are public API.
254
+ "UP042", # Class inherits from both `str` and `enum.Enum`
255
+
252
256
  # Arguments
253
257
  "ARG001", # Unusued argument
254
258
 
@@ -528,7 +528,10 @@ def midcourse_correction( # noqa: PLR0913, PLR0912, PLR0915, C901
528
528
  # bisect each active multiplier down so the achieved statistic lands just
529
529
  # inside its cap instead of far below it (the escalation overshoots).
530
530
  # Each statistic is non-increasing in its own multiplier for this convex
531
- # problem, so the per-coordinate bisection is well posed.
531
+ # problem, so the per-coordinate bisection is well posed. Lowering one
532
+ # multiplier can raise the other statistic, so a bisection step is taken
533
+ # only when both caps still hold: every accepted schedule meets both, and
534
+ # an "ok" status means they hold (#681).
532
535
  mu_spe = mu_t2 = 0.0
533
536
  n_solves = 0
534
537
  u_star = _solve(mu_spe, mu_t2)
@@ -538,6 +541,10 @@ def midcourse_correction( # noqa: PLR0913, PLR0912, PLR0915, C901
538
541
  spe_cap_value = float("inf") if spe_cap is None else float(spe_cap)
539
542
  t2_cap_value = float("inf") if t2_cap is None else float(t2_cap)
540
543
  cap_status = "ok"
544
+
545
+ def _within_caps(spe: float, t2: float) -> bool:
546
+ return spe <= spe_cap_value * (1 + _CAP_REL_TOL) and t2 <= t2_cap_value * (1 + _CAP_REL_TOL)
547
+
541
548
  for _ in range(30):
542
549
  spe_bad = spe_value > spe_cap_value * (1 + _CAP_REL_TOL)
543
550
  t2_bad = t2_value > t2_cap_value * (1 + _CAP_REL_TOL)
@@ -561,12 +568,12 @@ def midcourse_correction( # noqa: PLR0913, PLR0912, PLR0915, C901
561
568
  mid = 0.5 * (low_mu + high_mu)
562
569
  u_try = _solve(mid, mu_t2)
563
570
  n_solves += 1
564
- spe_try, _t2_try = _statistics(u_try)
565
- if spe_try > spe_cap_value * (1 + _CAP_REL_TOL):
571
+ spe_try, t2_try = _statistics(u_try)
572
+ if not _within_caps(spe_try, t2_try):
566
573
  low_mu = mid
567
574
  else:
568
575
  high_mu = mid
569
- u_star, spe_value, t2_value = u_try, spe_try, _t2_try
576
+ u_star, spe_value, t2_value = u_try, spe_try, t2_try
570
577
  if spe_try >= spe_cap_value * (1 - _CAP_REL_TOL):
571
578
  break
572
579
  mu_spe = high_mu
@@ -577,7 +584,7 @@ def midcourse_correction( # noqa: PLR0913, PLR0912, PLR0915, C901
577
584
  u_try = _solve(mu_spe, mid)
578
585
  n_solves += 1
579
586
  spe_try, t2_try = _statistics(u_try)
580
- if t2_try > t2_cap_value * (1 + _CAP_REL_TOL):
587
+ if not _within_caps(spe_try, t2_try):
581
588
  low_mu = mid
582
589
  else:
583
590
  high_mu = mid
@@ -585,9 +592,7 @@ def midcourse_correction( # noqa: PLR0913, PLR0912, PLR0915, C901
585
592
  if t2_try >= t2_cap_value * (1 - _CAP_REL_TOL):
586
593
  break
587
594
  mu_t2 = high_mu
588
- spe_ok = spe_value <= spe_cap_value * (1 + _CAP_REL_TOL)
589
- t2_ok = t2_value <= t2_cap_value * (1 + _CAP_REL_TOL)
590
- if spe_ok and t2_ok:
595
+ if _within_caps(spe_value, t2_value):
591
596
  break
592
597
 
593
598
  scores = b + A_F @ u_star
@@ -610,10 +615,22 @@ def midcourse_correction( # noqa: PLR0913, PLR0912, PLR0915, C901
610
615
  kind = name.split(":", 1)[0]
611
616
  key = "bounds" if kind == "bound" else "rate"
612
617
  typing.cast("list", active[key]).append(name.split(":", 1)[1])
618
+
619
+ def _binding(statistic: str) -> bool:
620
+ """Return whether a cap holds its statistic down: with its multiplier at zero, the statistic breaks it."""
621
+ nonlocal n_solves
622
+ n_solves += 1
623
+ if statistic == "spe":
624
+ return _statistics(_solve(0.0, mu_t2))[0] > spe_cap_value * (1 + _CAP_REL_TOL)
625
+ return _statistics(_solve(mu_spe, 0.0))[1] > t2_cap_value * (1 + _CAP_REL_TOL)
626
+
627
+ # A cap is active where its statistic sits at it (within the tolerance), or above it when it
628
+ # could not be met. Below it, a multiplier left over from the bisection is binding only if
629
+ # dropping it would break the cap: one bisected down because its cap is slack is not (#681).
613
630
  if spe_cap is not None:
614
- active["spe_cap"] = bool(mu_spe > 0 or spe_value >= spe_cap_value * (1 - _CAP_REL_TOL))
631
+ active["spe_cap"] = spe_value >= spe_cap_value * (1 - _CAP_REL_TOL) or (mu_spe > 0 and _binding("spe"))
615
632
  if t2_cap is not None:
616
- active["t2_cap"] = bool(mu_t2 > 0 or t2_value >= t2_cap_value * (1 - _CAP_REL_TOL))
633
+ active["t2_cap"] = t2_value >= t2_cap_value * (1 - _CAP_REL_TOL) or (mu_t2 > 0 and _binding("t2"))
617
634
 
618
635
  return Bunch(
619
636
  mv=mv,
@@ -721,7 +721,7 @@ def one_iteration_dtw(
721
721
  aligned_batches[batch_id] = result
722
722
  successful_alignments += 1
723
723
 
724
- except ValueError as exc: # noqa: PERF203
724
+ except ValueError as exc:
725
725
  # Chain the cause: a band constraint that is too narrow explains itself, and
726
726
  # that explanation is the actionable part. `from None` discarded it.
727
727
  raise ValueError(f"Failed on batch {batch_id}: {exc}") from exc