process-improve 1.75.2__tar.gz → 1.82.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 (217) hide show
  1. {process_improve-1.75.2 → process_improve-1.82.0}/PKG-INFO +9 -6
  2. {process_improve-1.75.2 → process_improve-1.82.0}/README.md +2 -2
  3. {process_improve-1.75.2 → process_improve-1.82.0}/pyproject.toml +7 -4
  4. {process_improve-1.75.2 → process_improve-1.82.0}/pyproject.toml.orig +17 -4
  5. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/_extras.py +1 -0
  6. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/_linalg.py +9 -2
  7. process_improve-1.82.0/src/process_improve/_remote_data.py +147 -0
  8. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/batch/__init__.py +38 -1
  9. process_improve-1.82.0/src/process_improve/batch/_batch_monitor.py +301 -0
  10. process_improve-1.82.0/src/process_improve/batch/_batch_pca.py +598 -0
  11. process_improve-1.82.0/src/process_improve/batch/_batch_plots.py +421 -0
  12. process_improve-1.82.0/src/process_improve/batch/_batch_pls.py +789 -0
  13. process_improve-1.82.0/src/process_improve/batch/_common.py +46 -0
  14. process_improve-1.82.0/src/process_improve/batch/_online.py +243 -0
  15. process_improve-1.82.0/src/process_improve/batch/control.py +1317 -0
  16. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/batch/data_input.py +79 -21
  17. process_improve-1.82.0/src/process_improve/batch/datasets.py +376 -0
  18. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/batch/features.py +5 -4
  19. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/batch/preprocessing.py +25 -3
  20. process_improve-1.82.0/src/process_improve/chemistry/__init__.py +57 -0
  21. process_improve-1.82.0/src/process_improve/chemistry/preprocessing.py +718 -0
  22. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/config.py +1 -1
  23. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/analysis.py +8 -3
  24. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/datasets.py +3 -39
  25. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/designs_optimal.py +19 -2
  26. process_improve-1.82.0/src/process_improve/interactions.py +381 -0
  27. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/multivariate/__init__.py +10 -0
  28. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/multivariate/_adaptive.py +2 -0
  29. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/multivariate/_diagnostics.py +151 -15
  30. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/multivariate/_limits.py +5 -1
  31. process_improve-1.82.0/src/process_improve/multivariate/_null.py +571 -0
  32. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/multivariate/_pca.py +347 -60
  33. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/multivariate/_pls.py +235 -14
  34. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/multivariate/_preprocessing.py +188 -3
  35. process_improve-1.82.0/src/process_improve/multivariate/_projection.py +281 -0
  36. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/multivariate/_tpls.py +16 -6
  37. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/multivariate/methods.py +12 -0
  38. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/multivariate/plots.py +68 -9
  39. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/regression/_robust_regression.py +38 -23
  40. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/regression/tools.py +2 -2
  41. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/sensory/__init__.py +10 -0
  42. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/sensory/analysis.py +149 -25
  43. process_improve-1.82.0/src/process_improve/sensory/diagnostics.py +367 -0
  44. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/sensory/mam.py +26 -0
  45. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/sensory/recipes.py +14 -12
  46. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/sensory/tools.py +16 -8
  47. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/sensory/validation.py +4 -3
  48. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/simulation/batch.py +17 -7
  49. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/simulation/recipes.py +64 -0
  50. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/simulation/tools.py +229 -1
  51. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/visualization/raincloud.py +2 -2
  52. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/__init__.py +0 -0
  53. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/_random.py +0 -0
  54. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/batch/alignment_helpers.py +0 -0
  55. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/batch/plotting.py +0 -0
  56. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/batch/tools.py +0 -0
  57. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/bivariate/__init__.py +0 -0
  58. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/bivariate/_elbow_peak.py +0 -0
  59. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/bivariate/methods.py +0 -0
  60. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/bivariate/tools.py +0 -0
  61. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/datasets/batch/batch-fake-data.csv +0 -0
  62. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/datasets/batch/details.txt +0 -0
  63. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/datasets/batch/dryer.csv +0 -0
  64. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/datasets/batch/nylon.csv +0 -0
  65. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/datasets/experiments/boilingpot.csv +0 -0
  66. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/datasets/experiments/golf.csv +0 -0
  67. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/datasets/experiments/pollutant.csv +0 -0
  68. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/datasets/experiments/solar.csv +0 -0
  69. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/datasets/experiments/test_doe1.csv +0 -0
  70. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/datasets/monitoring/batch-yield-and-purity.csv +0 -0
  71. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/datasets/monitoring/rubber-colour.csv +0 -0
  72. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/datasets/multivariate/LDPE/C.csv +0 -0
  73. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/datasets/multivariate/LDPE/Hotellings_T2_A3.csv +0 -0
  74. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/datasets/multivariate/LDPE/Hotellings_T2_A6.csv +0 -0
  75. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/datasets/multivariate/LDPE/LDPE.csv +0 -0
  76. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/datasets/multivariate/LDPE/P.csv +0 -0
  77. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/datasets/multivariate/LDPE/R.csv +0 -0
  78. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/datasets/multivariate/LDPE/T.csv +0 -0
  79. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/datasets/multivariate/LDPE/U.csv +0 -0
  80. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/datasets/multivariate/LDPE/W.csv +0 -0
  81. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/datasets/multivariate/LDPE/Yhat_A6.csv +0 -0
  82. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/datasets/multivariate/cheddar-cheese.csv +0 -0
  83. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/datasets/multivariate/dtu-pectin/NOTICE +0 -0
  84. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/datasets/multivariate/dtu-pectin/extraction1.csv +0 -0
  85. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/datasets/multivariate/dtu-pectin/extraction2.csv +0 -0
  86. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/datasets/multivariate/dtu-pectin/extraction3.csv +0 -0
  87. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/datasets/multivariate/dtu-pectin/ftir1.csv +0 -0
  88. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/datasets/multivariate/dtu-pectin/ftir2.csv +0 -0
  89. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/datasets/multivariate/dtu-pectin/ftir3.csv +0 -0
  90. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/datasets/multivariate/kamyr.csv +0 -0
  91. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/datasets/multivariate/solvents.csv +0 -0
  92. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/datasets/multivariate/tablet-spectra.csv +0 -0
  93. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/datasets/multivariate/tpls-pyphi/SOURCE +0 -0
  94. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/datasets/multivariate/tpls-pyphi/formulas_Group1.csv +0 -0
  95. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/datasets/multivariate/tpls-pyphi/formulas_Group2.csv +0 -0
  96. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/datasets/multivariate/tpls-pyphi/formulas_Group3.csv +0 -0
  97. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/datasets/multivariate/tpls-pyphi/formulas_Group4.csv +0 -0
  98. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/datasets/multivariate/tpls-pyphi/formulas_Group5.csv +0 -0
  99. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/datasets/multivariate/tpls-pyphi/process_conditions.csv +0 -0
  100. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/datasets/multivariate/tpls-pyphi/properties_Group1.csv +0 -0
  101. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/datasets/multivariate/tpls-pyphi/properties_Group2.csv +0 -0
  102. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/datasets/multivariate/tpls-pyphi/properties_Group3.csv +0 -0
  103. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/datasets/multivariate/tpls-pyphi/properties_Group4.csv +0 -0
  104. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/datasets/multivariate/tpls-pyphi/properties_Group5.csv +0 -0
  105. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/datasets/multivariate/tpls-pyphi/quality_indicators.csv +0 -0
  106. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/__init__.py +0 -0
  107. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/_analyses/__init__.py +0 -0
  108. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/_analyses/_shared.py +0 -0
  109. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/_analyses/box_cox.py +0 -0
  110. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/_analyses/curvature.py +0 -0
  111. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/_analyses/diagnostics.py +0 -0
  112. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/_analyses/lack_of_fit.py +0 -0
  113. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/_analyses/lenth.py +0 -0
  114. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/_analyses/model_selection.py +0 -0
  115. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/_analyses/ols_extractors.py +0 -0
  116. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/_analyses/prediction.py +0 -0
  117. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/_desirability.py +0 -0
  118. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/_lm.py +0 -0
  119. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/_moment_aberration.py +0 -0
  120. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/_tools/__init__.py +0 -0
  121. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/_tools/analyze_experiment.py +0 -0
  122. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/_tools/augment_design.py +0 -0
  123. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/_tools/create_factorial_design.py +0 -0
  124. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/_tools/doe_knowledge.py +0 -0
  125. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/_tools/evaluate_design.py +0 -0
  126. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/_tools/fit_linear_model.py +0 -0
  127. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/_tools/generate_design.py +0 -0
  128. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/_tools/optimize_responses.py +0 -0
  129. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/_tools/recommend_strategy.py +0 -0
  130. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/_tools/trade_off_table.py +0 -0
  131. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/_tools/visualize_doe.py +0 -0
  132. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/augment.py +0 -0
  133. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/designs.py +0 -0
  134. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/designs_factorial.py +0 -0
  135. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/designs_mixture.py +0 -0
  136. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/designs_omars.py +0 -0
  137. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/designs_omars_ilp.py +0 -0
  138. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/designs_response_surface.py +0 -0
  139. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/designs_screening.py +0 -0
  140. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/designs_utils.py +0 -0
  141. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/evaluate.py +0 -0
  142. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/factor.py +0 -0
  143. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/knowledge/__init__.py +0 -0
  144. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/knowledge/api.py +0 -0
  145. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/knowledge/data/concepts.yaml +0 -0
  146. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/knowledge/data/decision_rules.yaml +0 -0
  147. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/knowledge/data/design_types.yaml +0 -0
  148. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/knowledge/data/diagnostics.yaml +0 -0
  149. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/knowledge/engine.py +0 -0
  150. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/knowledge/models.py +0 -0
  151. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/models.py +0 -0
  152. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/omars.py +0 -0
  153. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/omars_trade_off.py +0 -0
  154. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/optimal.py +0 -0
  155. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/optimization.py +0 -0
  156. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/simulations.py +0 -0
  157. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/strategy/__init__.py +0 -0
  158. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/strategy/budget.py +0 -0
  159. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/strategy/domain_templates.py +0 -0
  160. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/strategy/engine.py +0 -0
  161. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/strategy/models.py +0 -0
  162. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/structures.py +0 -0
  163. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/tools.py +0 -0
  164. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/trade_off.py +0 -0
  165. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/visualization/__init__.py +0 -0
  166. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/visualization/api.py +0 -0
  167. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/visualization/plots/__init__.py +0 -0
  168. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/visualization/plots/cube_plot.py +0 -0
  169. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/visualization/plots/design_quality.py +0 -0
  170. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/visualization/plots/diagnostics.py +0 -0
  171. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/visualization/plots/effects.py +0 -0
  172. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/visualization/plots/optimization_plots.py +0 -0
  173. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/visualization/plots/registry.py +0 -0
  174. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/visualization/plots/significance.py +0 -0
  175. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/visualization/plots/square_plot.py +0 -0
  176. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/experiments/visualization/plots/surfaces.py +0 -0
  177. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/mcp_server.py +0 -0
  178. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/monitoring/__init__.py +0 -0
  179. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/monitoring/control_charts.py +0 -0
  180. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/monitoring/metrics.py +0 -0
  181. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/monitoring/tools.py +0 -0
  182. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/multivariate/_base.py +0 -0
  183. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/multivariate/_common.py +0 -0
  184. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/multivariate/_mbpca.py +0 -0
  185. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/multivariate/_mbpls.py +0 -0
  186. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/multivariate/_nipals.py +0 -0
  187. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/multivariate/_opls.py +0 -0
  188. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/multivariate/_pca_pls.py +0 -0
  189. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/multivariate/_resampling.py +0 -0
  190. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/multivariate/tools.py +0 -0
  191. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/py.typed +0 -0
  192. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/recipes.py +0 -0
  193. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/regression/__init__.py +0 -0
  194. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/regression/methods.py +0 -0
  195. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/sensory/designed.py +0 -0
  196. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/sensory/ingest.py +0 -0
  197. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/sensory/panel.py +0 -0
  198. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/simulation/__init__.py +0 -0
  199. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/simulation/context.py +0 -0
  200. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/simulation/model.py +0 -0
  201. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/tool_safety.py +0 -0
  202. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/tool_spec.py +0 -0
  203. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/univariate/__init__.py +0 -0
  204. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/univariate/metrics.py +0 -0
  205. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/univariate/tools.py +0 -0
  206. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/visualization/__init__.py +0 -0
  207. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/visualization/adapters/__init__.py +0 -0
  208. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/visualization/adapters/base.py +0 -0
  209. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/visualization/adapters/echarts_adapter.py +0 -0
  210. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/visualization/adapters/plotly_adapter.py +0 -0
  211. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/visualization/charts/__init__.py +0 -0
  212. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/visualization/charts/boxplot.py +0 -0
  213. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/visualization/colors.py +0 -0
  214. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/visualization/spec.py +0 -0
  215. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/visualization/themes.py +0 -0
  216. {process_improve-1.75.2 → process_improve-1.82.0}/src/process_improve/visualization/tools.py +0 -0
  217. {process_improve-1.75.2 → process_improve-1.82.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: 1.75.2
3
+ Version: 1.82.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,Latent Variables,PCA,PLS,Multivariate Data Analysis,Batch data analysis
6
6
  Author: Kevin Dunn
@@ -28,6 +28,7 @@ Requires-Dist: matplotlib>=3.10.8 ; extra == 'all'
28
28
  Requires-Dist: mcp>=2.0 ; extra == 'all'
29
29
  Requires-Dist: numba>=0.63.1 ; extra == 'all'
30
30
  Requires-Dist: openpyxl>=3.1.5 ; extra == 'all'
31
+ Requires-Dist: osqp>=1.0 ; extra == 'all'
31
32
  Requires-Dist: plotly>=6.5.2 ; extra == 'all'
32
33
  Requires-Dist: pulp>=2.8 ; extra == 'all'
33
34
  Requires-Dist: pydoe3>=1.0 ; extra == 'all'
@@ -36,6 +37,7 @@ Requires-Dist: scikit-image>=0.25.2 ; extra == 'all'
36
37
  Requires-Dist: seaborn>=0.13.2 ; extra == 'all'
37
38
  Requires-Dist: openpyxl>=3.1.5 ; extra == 'batch'
38
39
  Requires-Dist: scikit-image>=0.25.2 ; extra == 'batch'
40
+ Requires-Dist: osqp>=1.0 ; extra == 'control'
39
41
  Requires-Dist: coverage>=7.13.1 ; extra == 'dev'
40
42
  Requires-Dist: hypothesis>=6.100 ; extra == 'dev'
41
43
  Requires-Dist: matplotlib-stubs>=0.3.11 ; extra == 'dev'
@@ -63,11 +65,12 @@ Requires-Dist: plotly>=6.5.2 ; extra == 'plotting'
63
65
  Requires-Dist: ridgeplot>=0.5.0 ; extra == 'plotting'
64
66
  Requires-Dist: seaborn>=0.13.2 ; extra == 'plotting'
65
67
  Requires-Python: >=3.10
66
- Project-URL: Homepage, https://github.com/kgdunn/process_improve
67
- Project-URL: Repository, https://github.com/kgdunn/process_improve
68
- Project-URL: Issues, https://github.com/kgdunn/process_improve/issues
68
+ Project-URL: Homepage, https://github.com/kgdunn/process-improve
69
+ Project-URL: Repository, https://github.com/kgdunn/process-improve
70
+ Project-URL: Issues, https://github.com/kgdunn/process-improve/issues
69
71
  Provides-Extra: all
70
72
  Provides-Extra: batch
73
+ Provides-Extra: control
71
74
  Provides-Extra: dev
72
75
  Provides-Extra: expt
73
76
  Provides-Extra: fast
@@ -268,8 +271,8 @@ result.y_hat # point predictions
268
271
  result.spe # squared prediction error
269
272
  result.hotellings_t2 # Hotelling's T² for new observations
270
273
 
271
- # Cross-validated component selection
272
- cv_select = PLS.select_n_components(X_s, Y_s, max_components=6)
274
+ # Cross-validated component selection: raw blocks in, each fold scales itself
275
+ cv_select = PLS.select_n_components(X, Y, max_components=6)
273
276
  print(cv_select.n_components) # recommended number of components
274
277
  print(cv_select.rmsecv) # RMSECV per component count
275
278
 
@@ -190,8 +190,8 @@ result.y_hat # point predictions
190
190
  result.spe # squared prediction error
191
191
  result.hotellings_t2 # Hotelling's T² for new observations
192
192
 
193
- # Cross-validated component selection
194
- cv_select = PLS.select_n_components(X_s, Y_s, max_components=6)
193
+ # Cross-validated component selection: raw blocks in, each fold scales itself
194
+ cv_select = PLS.select_n_components(X, Y, max_components=6)
195
195
  print(cv_select.n_components) # recommended number of components
196
196
  print(cv_select.rmsecv) # RMSECV per component count
197
197
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "process-improve"
3
- version = "1.75.2"
3
+ version = "1.82.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"
@@ -55,11 +55,13 @@ batch = [
55
55
  mcp = ["mcp>=2.0"]
56
56
  fast = ["numba>=0.63.1"]
57
57
  ilp = ["pulp>=2.8"]
58
+ control = ["osqp>=1.0"]
58
59
  all = [
59
60
  "matplotlib>=3.10.8",
60
61
  "mcp>=2.0",
61
62
  "numba>=0.63.1",
62
63
  "openpyxl>=3.1.5",
64
+ "osqp>=1.0",
63
65
  "plotly>=6.5.2",
64
66
  "pulp>=2.8",
65
67
  "pyDOE3>=1.0",
@@ -92,9 +94,9 @@ dev = [
92
94
  process-improve-mcp = "process_improve.mcp_server:main"
93
95
 
94
96
  [project.urls]
95
- Homepage = "https://github.com/kgdunn/process_improve"
96
- Repository = "https://github.com/kgdunn/process_improve"
97
- Issues = "https://github.com/kgdunn/process_improve/issues"
97
+ Homepage = "https://github.com/kgdunn/process-improve"
98
+ Repository = "https://github.com/kgdunn/process-improve"
99
+ Issues = "https://github.com/kgdunn/process-improve/issues"
98
100
 
99
101
  [build-system]
100
102
  requires = ["uv_build>=0.7.2,<0.13"]
@@ -128,6 +130,7 @@ override-dependencies = [
128
130
  "plotly>=6.5.2",
129
131
  "numba>=0.63.1",
130
132
  ]
133
+ constraint-dependencies = ["scipy!=1.18.1"]
131
134
 
132
135
  [tool.mypy]
133
136
  ignore_missing_imports = true
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "process-improve"
3
- version = "1.75.2"
3
+ version = "1.82.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"
@@ -81,6 +81,10 @@ fast = ["numba>=0.63.1"]
81
81
  # CBC solver in its wheels, so no system package is required.
82
82
  ilp = ["pulp>=2.8"]
83
83
 
84
+ # Mid-course correction QP solver (batch.control). osqp ships prebuilt wheels
85
+ # for every platform CI tests, so no system package is required.
86
+ control = ["osqp>=1.0"]
87
+
84
88
  # NOTE: ``pyoptex`` (coordinate-exchange I-/A-optimal and split-plot designs in
85
89
  # ``experiments.designs_optimal``) is intentionally *not* a declared extra. Its
86
90
  # latest release (1.2.1) pins ``plotly~=5.24`` (i.e. < 6), which conflicts with
@@ -96,6 +100,7 @@ all = [
96
100
  "mcp>=2.0",
97
101
  "numba>=0.63.1",
98
102
  "openpyxl>=3.1.5",
103
+ "osqp>=1.0",
99
104
  "plotly>=6.5.2",
100
105
  "pulp>=2.8",
101
106
  "pyDOE3>=1.0",
@@ -129,9 +134,9 @@ dev = [
129
134
  process-improve-mcp = "process_improve.mcp_server:main"
130
135
 
131
136
  [project.urls]
132
- Homepage = "https://github.com/kgdunn/process_improve"
133
- Repository = "https://github.com/kgdunn/process_improve"
134
- Issues = "https://github.com/kgdunn/process_improve/issues"
137
+ Homepage = "https://github.com/kgdunn/process-improve"
138
+ Repository = "https://github.com/kgdunn/process-improve"
139
+ Issues = "https://github.com/kgdunn/process-improve/issues"
135
140
 
136
141
 
137
142
  [build-system]
@@ -178,6 +183,14 @@ override-dependencies = [
178
183
  "plotly>=6.5.2",
179
184
  "numba>=0.63.1",
180
185
  ]
186
+ # scipy 1.18.1 was published without CPython 3.13 wheels (cp312 only), and CI
187
+ # re-resolves on a stale lockfile whenever this file changes, so a fresh
188
+ # resolution on Python 3.13 picks it and fails to install. Exclude that one
189
+ # release; drop this constraint once scipy uploads cp313 wheels for it or
190
+ # publishes a newer release.
191
+ constraint-dependencies = [
192
+ "scipy!=1.18.1",
193
+ ]
181
194
 
182
195
 
183
196
  [tool.mypy]
@@ -10,6 +10,7 @@ optional dependencies behind extras::
10
10
  pip install 'process-improve[mcp]' # mcp
11
11
  pip install 'process-improve[fast]' # numba (JIT)
12
12
  pip install 'process-improve[ilp]' # pulp (OMARS design generator)
13
+ pip install 'process-improve[control]' # osqp (mid-course correction QP)
13
14
  pip install 'process-improve[all]' # everything above
14
15
 
15
16
  Modules that need an optional dependency import it inside a
@@ -70,7 +70,14 @@ def safe_inverse(
70
70
  if is_singular(a, cond_limit=cond_limit):
71
71
  raise np.linalg.LinAlgError(
72
72
  f"{what} is singular or ill-conditioned (condition number exceeds "
73
- f"{cond_limit:.2e}); cannot invert reliably. Reduce the number of "
74
- "components/terms or remove collinear columns."
73
+ f"{cond_limit:.2e}); cannot invert reliably. Likely causes, in the "
74
+ "order worth checking: exactly or near-exactly collinear columns "
75
+ "(a duplicated variable, a column that is a sum of others, a "
76
+ "one-hot set that includes every level); a constant or all-missing "
77
+ "column; a component count that has exhausted the variance left in "
78
+ "the deflated block; or values spanning so many orders of magnitude "
79
+ "that the cross-product loses precision (centre and scale first). "
80
+ "Reduce the number of components/terms or remove the offending "
81
+ "columns."
75
82
  )
76
83
  return np.linalg.inv(a)
@@ -0,0 +1,147 @@
1
+ # (c) Kevin Dunn, 2010-2026. MIT License. Based on own private work over the years.
2
+ """Bounded download of the sample datasets that are not bundled with the package.
3
+
4
+ The remote sample datasets (the `openmv.net <https://openmv.net>`_ files behind
5
+ :mod:`process_improve.experiments.datasets` and
6
+ :mod:`process_improve.batch.datasets`) are fetched on demand. Every fetch goes
7
+ through :func:`fetch_remote_bytes`, so one place enforces the contract:
8
+
9
+ - the URL is a fixed ``https`` location chosen by the library, or a ``file://``
10
+ path a caller passes explicitly to read a local copy; it is never free text
11
+ from an untrusted source;
12
+ - the download is bounded by ``settings.dataset_fetch_timeout`` (30 s by
13
+ default; ``PROCESS_IMPROVE_DATASET_FETCH_TIMEOUT`` overrides it), so a
14
+ black-holing host raises instead of hanging the caller indefinitely (#508);
15
+ - network failures, timeouts and parse failures surface as one clear
16
+ ``RuntimeError`` naming the URL, rather than a lower-level error.
17
+
18
+ The content is trusted only as far as the remote host is.
19
+ """
20
+
21
+ from __future__ import annotations
22
+
23
+ import io
24
+ import urllib.request
25
+ import zipfile
26
+
27
+ import pandas as pd
28
+
29
+ from process_improve._extras import require_extra
30
+ from process_improve.config import settings
31
+
32
+
33
+ def _download_error(url: str, exc: Exception) -> RuntimeError:
34
+ """Return the one ``RuntimeError`` every failure mode maps onto."""
35
+ return RuntimeError(
36
+ f"Could not download the sample dataset from {url!r}: {exc}. "
37
+ "Check your network connection; this dataset is fetched from a remote host."
38
+ )
39
+
40
+
41
+ def fetch_remote_bytes(url: str, timeout: float | None = None) -> bytes:
42
+ """Download ``url`` and return the raw payload.
43
+
44
+ Parameters
45
+ ----------
46
+ url : str
47
+ The fixed ``https`` URL of the file to fetch, or a ``file://`` URL
48
+ for a local copy.
49
+ timeout : float, optional
50
+ Seconds to wait before giving up. Defaults to
51
+ ``settings.dataset_fetch_timeout``.
52
+
53
+ Returns
54
+ -------
55
+ bytes
56
+ The downloaded content.
57
+
58
+ Raises
59
+ ------
60
+ RuntimeError
61
+ On any network failure or timeout (``TimeoutError`` and
62
+ ``urllib.error.URLError`` are both ``OSError`` subclasses), with the
63
+ URL in the message.
64
+ """
65
+ if timeout is None:
66
+ timeout = settings.dataset_fetch_timeout
67
+ try:
68
+ with urllib.request.urlopen(url, timeout=timeout) as response: # noqa: S310 - fixed https or file URLs
69
+ return response.read()
70
+ except OSError as exc:
71
+ raise _download_error(url, exc) from exc
72
+
73
+
74
+ def read_remote_csv(url: str, timeout: float | None = None) -> pd.DataFrame:
75
+ """Fetch a CSV file with :func:`fetch_remote_bytes` and parse it.
76
+
77
+ Parameters
78
+ ----------
79
+ url : str
80
+ The fixed ``https`` (or ``file://``) URL of the CSV file.
81
+ timeout : float, optional
82
+ Seconds to wait before giving up. Defaults to
83
+ ``settings.dataset_fetch_timeout``.
84
+
85
+ Returns
86
+ -------
87
+ pd.DataFrame
88
+ The parsed table.
89
+
90
+ Raises
91
+ ------
92
+ RuntimeError
93
+ On a download failure or when the payload is not a readable CSV.
94
+ """
95
+ payload = fetch_remote_bytes(url, timeout=timeout)
96
+ try:
97
+ return pd.read_csv(io.BytesIO(payload))
98
+ except ValueError as exc:
99
+ raise _download_error(url, exc) from exc
100
+
101
+
102
+ def read_remote_excel(
103
+ url: str,
104
+ timeout: float | None = None,
105
+ *,
106
+ sheet_name: str | list[str] | None = None,
107
+ ) -> dict[str, pd.DataFrame]:
108
+ """Fetch an Excel workbook with :func:`fetch_remote_bytes` and parse its sheets.
109
+
110
+ Reading ``.xlsx`` files needs ``openpyxl``, which ships with the ``batch``
111
+ extra; a missing install raises an ``ImportError`` that names the extra.
112
+
113
+ Parameters
114
+ ----------
115
+ url : str
116
+ The fixed ``https`` (or ``file://``) URL of the workbook.
117
+ timeout : float, optional
118
+ Seconds to wait before giving up. Defaults to
119
+ ``settings.dataset_fetch_timeout``.
120
+ sheet_name : str or list of str, optional
121
+ Sheets to read. ``None`` (default) reads every sheet.
122
+
123
+ Returns
124
+ -------
125
+ dict[str, pd.DataFrame]
126
+ One table per sheet, keyed by sheet name, also when a single sheet
127
+ name was requested.
128
+
129
+ Raises
130
+ ------
131
+ RuntimeError
132
+ On a download failure or when the payload is not a readable workbook.
133
+ ImportError
134
+ When ``openpyxl`` is not installed.
135
+ """
136
+ try:
137
+ import openpyxl # noqa: F401, PLC0415 - probed before downloading so the error is immediate
138
+ except ImportError as exc:
139
+ raise require_extra("openpyxl", "batch") from exc
140
+ payload = fetch_remote_bytes(url, timeout=timeout)
141
+ try:
142
+ sheets = pd.read_excel(io.BytesIO(payload), sheet_name=sheet_name, engine="openpyxl")
143
+ except (ValueError, zipfile.BadZipFile) as exc:
144
+ raise _download_error(url, exc) from exc
145
+ if isinstance(sheets, pd.DataFrame):
146
+ return {str(sheet_name): sheets}
147
+ return {str(name): frame for name, frame in sheets.items()}
@@ -1,13 +1,32 @@
1
- """Batch process data analysis: alignment, feature extraction, and visualization."""
1
+ """Batch process data analysis: alignment, feature extraction, modelling, and visualization."""
2
2
 
3
+ from process_improve.batch._batch_monitor import BatchMonitor
4
+ from process_improve.batch._batch_pca import BatchPCA
5
+ from process_improve.batch._batch_plots import (
6
+ contribution_at_time_plot,
7
+ online_monitoring_plot,
8
+ time_varying_loading_plot,
9
+ unfolded_contribution_plot,
10
+ )
11
+ from process_improve.batch._batch_pls import BatchPLS
12
+ from process_improve.batch.control import MidCourseCorrector, midcourse_correction
3
13
  from process_improve.batch.data_input import (
4
14
  check_valid_batch_dict,
5
15
  dict_to_melted,
6
16
  dict_to_wide,
7
17
  melted_to_dict,
8
18
  melted_to_wide,
19
+ wide_to_dict,
9
20
  wide_to_melted,
10
21
  )
22
+ from process_improve.batch.datasets import (
23
+ load_batch_fake_data,
24
+ load_dryer,
25
+ load_dupont,
26
+ load_fmc,
27
+ load_nylon,
28
+ load_sbr,
29
+ )
11
30
  from process_improve.batch.features import (
12
31
  cross,
13
32
  f_agemax,
@@ -36,10 +55,16 @@ from process_improve.batch.preprocessing import (
36
55
  )
37
56
 
38
57
  __all__ = [
58
+ # Modelling and monitoring
59
+ "BatchMonitor",
60
+ "BatchPCA",
61
+ "BatchPLS",
62
+ "MidCourseCorrector",
39
63
  # Preprocessing/alignment
40
64
  "batch_dtw",
41
65
  # Data input/conversion
42
66
  "check_valid_batch_dict",
67
+ "contribution_at_time_plot",
43
68
  "cross",
44
69
  "determine_scaling",
45
70
  "dict_to_melted",
@@ -63,8 +88,20 @@ __all__ = [
63
88
  "f_std",
64
89
  "f_sum",
65
90
  "find_reference_batch",
91
+ # Bundled datasets
92
+ "load_batch_fake_data",
93
+ "load_dryer",
94
+ "load_dupont",
95
+ "load_fmc",
96
+ "load_nylon",
97
+ "load_sbr",
66
98
  "melted_to_dict",
67
99
  "melted_to_wide",
100
+ "midcourse_correction",
101
+ "online_monitoring_plot",
68
102
  "resample_to_reference",
103
+ "time_varying_loading_plot",
104
+ "unfolded_contribution_plot",
105
+ "wide_to_dict",
69
106
  "wide_to_melted",
70
107
  ]