processbehavior 0.2.0__tar.gz → 0.2.1__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 (202) hide show
  1. {processbehavior-0.2.0 → processbehavior-0.2.1}/CHANGELOG.md +59 -1
  2. {processbehavior-0.2.0 → processbehavior-0.2.1}/CONTRIBUTING.md +7 -3
  3. {processbehavior-0.2.0 → processbehavior-0.2.1}/PKG-INFO +2 -1
  4. {processbehavior-0.2.0 → processbehavior-0.2.1}/README.md +1 -0
  5. {processbehavior-0.2.0 → processbehavior-0.2.1}/SECURITY.md +4 -4
  6. {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/__init__.py +1 -1
  7. {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/analysis_result.py +6 -1
  8. {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/datasets/__init__.py +0 -10
  9. {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/datasets/synthetic.py +6 -664
  10. {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/exporters/excel_exporter.py +2 -92
  11. {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/loss_function.py +5 -8
  12. {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/plotting/plotter.py +0 -11
  13. {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/sds_detector.py +1 -74
  14. {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/signals/config.py +5 -1
  15. {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/signals/detector.py +55 -21
  16. {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/signals/result.py +84 -11
  17. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/conftest.py +0 -28
  18. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_documented_rule_coverage.py +30 -0
  19. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_excel_export.py +95 -0
  20. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_garbage_character_handling.py +14 -0
  21. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_loss_function.py +30 -0
  22. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_plotting.py +84 -0
  23. processbehavior-0.2.1/tests/test_reference_integrity.py +56 -0
  24. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_sds_detector.py +89 -0
  25. processbehavior-0.2.1/tests/test_signal_result_surface.py +159 -0
  26. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_signals.py +76 -0
  27. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_synthetic.py +101 -0
  28. {processbehavior-0.2.0 → processbehavior-0.2.1}/.gitignore +0 -0
  29. {processbehavior-0.2.0 → processbehavior-0.2.1}/CITATION.cff +0 -0
  30. {processbehavior-0.2.0 → processbehavior-0.2.1}/CODE_OF_CONDUCT.md +0 -0
  31. {processbehavior-0.2.0 → processbehavior-0.2.1}/LICENSE +0 -0
  32. {processbehavior-0.2.0 → processbehavior-0.2.1}/examples/README.md +0 -0
  33. {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/analysis.py +0 -0
  34. {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/analysis_dataset.py +0 -0
  35. {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/calibration.py +0 -0
  36. {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/capability.py +0 -0
  37. {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/data_preparation.py +0 -0
  38. {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/datasets/data/coffee_shop_demo_long.csv +0 -0
  39. {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/datasets/loaders.py +0 -0
  40. {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/derivations.py +0 -0
  41. {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/effects_calculator.py +0 -0
  42. {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/exceptions.py +0 -0
  43. {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/exporters/__init__.py +0 -0
  44. {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/focused_result.py +0 -0
  45. {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/formulation_spec.py +0 -0
  46. {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/maximum_information.py +0 -0
  47. {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/plotting/__init__.py +0 -0
  48. {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/plotting/_math.py +0 -0
  49. {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/plotting/capability_chart.py +0 -0
  50. {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/plotting/contracts.py +0 -0
  51. {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/plotting/control_chart.py +0 -0
  52. {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/plotting/effects_charts.py +0 -0
  53. {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/plotting/lane_boundaries.py +0 -0
  54. {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/plotting/limits.py +0 -0
  55. {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/plotting/maximum_information_chart.py +0 -0
  56. {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/plotting/renderers.py +0 -0
  57. {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/plotting/report.py +0 -0
  58. {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/plotting/residuals.py +0 -0
  59. {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/plotting/run_rules_viz.py +0 -0
  60. {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/plotting/stats_box.py +0 -0
  61. {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/plotting/themes.py +0 -0
  62. {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/plotting/x_axis_layout.py +0 -0
  63. {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/plotting/zones.py +0 -0
  64. {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/process_behavior.py +0 -0
  65. {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/py.typed +0 -0
  66. {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/residual_calculator.py +0 -0
  67. {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/result_signals.py +0 -0
  68. {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/result_tabular.py +0 -0
  69. {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/signals/__init__.py +0 -0
  70. {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/signals/detectors.py +0 -0
  71. {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/spc_constants.py +0 -0
  72. {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/study.py +0 -0
  73. {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/types.py +0 -0
  74. {processbehavior-0.2.0 → processbehavior-0.2.1}/pyproject.toml +0 -0
  75. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/__init__.py +0 -0
  76. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/bishop_analyses/vassds1analysis.json +0 -0
  77. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/bishop_analyses/vassds2analysis.json +0 -0
  78. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/bishop_analyses/vassds3analysis.json +0 -0
  79. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/coffee_capability_full_baseline.json +0 -0
  80. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/data/FILLWEIGHTDATA_800.csv +0 -0
  81. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/data/coffee_shop_demo_long.csv +0 -0
  82. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/missing_values/X_data.parquet +0 -0
  83. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/missing_values/X_metadata.json +0 -0
  84. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/missing_values/X_statistics.json +0 -0
  85. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/missing_values/mR_data.parquet +0 -0
  86. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/missing_values/mR_metadata.json +0 -0
  87. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/missing_values/mR_statistics.json +0 -0
  88. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/paired_xbar_s/S_data.parquet +0 -0
  89. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/paired_xbar_s/S_metadata.json +0 -0
  90. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/paired_xbar_s/S_statistics.json +0 -0
  91. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/paired_xbar_s/Xbar_data.parquet +0 -0
  92. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/paired_xbar_s/Xbar_metadata.json +0 -0
  93. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/paired_xbar_s/Xbar_statistics.json +0 -0
  94. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/paired_xmr_r/X_data.parquet +0 -0
  95. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/paired_xmr_r/X_metadata.json +0 -0
  96. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/paired_xmr_r/X_statistics.json +0 -0
  97. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/paired_xmr_r/mR_data.parquet +0 -0
  98. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/paired_xmr_r/mR_metadata.json +0 -0
  99. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/paired_xmr_r/mR_statistics.json +0 -0
  100. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/pathological_ordering/X_data.parquet +0 -0
  101. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/pathological_ordering/X_metadata.json +0 -0
  102. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/pathological_ordering/X_statistics.json +0 -0
  103. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/pathological_ordering/mR_data.parquet +0 -0
  104. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/pathological_ordering/mR_metadata.json +0 -0
  105. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/pathological_ordering/mR_statistics.json +0 -0
  106. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/residual_chart/S_data.parquet +0 -0
  107. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/residual_chart/S_metadata.json +0 -0
  108. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/residual_chart/S_statistics.json +0 -0
  109. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/single_obs_strata/X_data.parquet +0 -0
  110. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/single_obs_strata/X_metadata.json +0 -0
  111. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/single_obs_strata/X_statistics.json +0 -0
  112. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/single_obs_strata/mR_data.parquet +0 -0
  113. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/single_obs_strata/mR_metadata.json +0 -0
  114. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/single_obs_strata/mR_statistics.json +0 -0
  115. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/stratified_balanced/S_data.parquet +0 -0
  116. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/stratified_balanced/S_metadata.json +0 -0
  117. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/stratified_balanced/S_statistics.json +0 -0
  118. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/stratified_balanced/Xbar_data.parquet +0 -0
  119. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/stratified_balanced/Xbar_metadata.json +0 -0
  120. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/stratified_balanced/Xbar_statistics.json +0 -0
  121. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/stratified_uneven/S_data.parquet +0 -0
  122. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/stratified_uneven/S_metadata.json +0 -0
  123. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/stratified_uneven/S_statistics.json +0 -0
  124. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/stratified_uneven/Xbar_data.parquet +0 -0
  125. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/stratified_uneven/Xbar_metadata.json +0 -0
  126. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/stratified_uneven/Xbar_statistics.json +0 -0
  127. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/unstratified_small/X_data.parquet +0 -0
  128. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/unstratified_small/X_metadata.json +0 -0
  129. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/unstratified_small/X_statistics.json +0 -0
  130. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/unstratified_small/mR_data.parquet +0 -0
  131. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/unstratified_small/mR_metadata.json +0 -0
  132. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/unstratified_small/mR_statistics.json +0 -0
  133. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_analysis_bugs.py +0 -0
  134. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_analysis_dataset.py +0 -0
  135. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_analysis_golden_master.py +0 -0
  136. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_analysis_result_contract.py +0 -0
  137. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_analysis_specifications.py +0 -0
  138. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_api_reference.py +0 -0
  139. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_beyond_limits_vectorized.py +0 -0
  140. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_bin_extremes.py +0 -0
  141. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_bishop_reference.py +0 -0
  142. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_by_parameter.py +0 -0
  143. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_by_permutations.py +0 -0
  144. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_calibration.py +0 -0
  145. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_capability.py +0 -0
  146. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_capability_chart.py +0 -0
  147. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_capability_window.py +0 -0
  148. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_chart_availability.py +0 -0
  149. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_chart_column_contract.py +0 -0
  150. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_chart_parsing.py +0 -0
  151. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_control_chart_figure.py +0 -0
  152. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_data_preparation.py +0 -0
  153. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_datasets.py +0 -0
  154. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_derivations.py +0 -0
  155. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_design_state_lineage.py +0 -0
  156. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_edge_cases.py +0 -0
  157. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_effects_calculator.py +0 -0
  158. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_effects_plotting.py +0 -0
  159. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_encode_rsg_vectorized.py +0 -0
  160. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_execute_validation.py +0 -0
  161. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_focus.py +0 -0
  162. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_init_cleaning.py +0 -0
  163. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_lane_boundaries.py +0 -0
  164. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_limits_vectorized.py +0 -0
  165. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_maximum_information.py +0 -0
  166. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_notebook_ergonomics.py +0 -0
  167. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_p0_p2_regressions.py +0 -0
  168. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_performance.py +0 -0
  169. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_phased_limits.py +0 -0
  170. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_plotting_decorations.py +0 -0
  171. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_plotting_hardening.py +0 -0
  172. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_plotting_xaxis.py +0 -0
  173. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_process_behavior.py +0 -0
  174. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_recentered_mr_fix.py +0 -0
  175. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_release_gate_0_1_0_checklist.py +0 -0
  176. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_residual_aliases.py +0 -0
  177. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_residual_calculator.py +0 -0
  178. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_residual_labels.py +0 -0
  179. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_residual_scope.py +0 -0
  180. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_resolve_by_grouping.py +0 -0
  181. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_result_signals.py +0 -0
  182. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_result_tabular.py +0 -0
  183. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_sampling_plan.py +0 -0
  184. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_sds.py +0 -0
  185. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_signal_detectors.py +0 -0
  186. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_single_detection.py +0 -0
  187. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_solo_mr_residuals.py +0 -0
  188. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_spc_constants.py +0 -0
  189. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_srp_refactor.py +0 -0
  190. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_strata_companion.py +0 -0
  191. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_strata_sufficiency.py +0 -0
  192. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_stratified_insufficiency.py +0 -0
  193. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_supports_calibration.py +0 -0
  194. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_types.py +0 -0
  195. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_validate_by_parameter.py +0 -0
  196. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_weco_integration.py +0 -0
  197. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_why_not.py +0 -0
  198. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_x_axis_layout.py +0 -0
  199. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_xbar_residual_center.py +0 -0
  200. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_xbar_s_options.py +0 -0
  201. {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_xbar_stratified.py +0 -0
  202. {processbehavior-0.2.0 → processbehavior-0.2.1}/validation/PBTESTDATABASE_T100.csv +0 -0
@@ -7,6 +7,63 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.2.1] - 2026-09-09
11
+
12
+ ### Fixed
13
+ - **A short series no longer returns an unqualified all-clear from
14
+ ``detect_signals``.** ``SignalConfig.min_observations`` (default 20) was
15
+ unreachable: ``SignalDetector`` read a hardcoded per-rule table and never
16
+ consulted the config, so ``SignalConfig(min_observations=30)`` changed nothing.
17
+ Separately, the detector already recorded which rules it skipped for length
18
+ (``rules_skipped``, added in 0.2.0) but ``SignalResult.summary`` ignored that and
19
+ printed ``✓ No signals detected`` regardless. On a four-point X chart six of the
20
+ eight rules cannot fire, and the one that can is weakened by any trend in the
21
+ data, so the checkmark described an examination that had mostly not happened.
22
+
23
+ Now: the per-rule table is the *structural* minimum (``RULE_MIN_OBSERVATIONS``,
24
+ a rule is skipped below it, as before) and ``min_observations`` is the *advisory*
25
+ minimum. Below it the detector emits a ``ProcessBehaviorWarning`` naming both
26
+ numbers (one per chart evaluated; silence it with
27
+ ``warnings.simplefilter('ignore', ProcessBehaviorWarning)`` once a pipeline has
28
+ accounted for it) and the result is marked partial even when every runnable
29
+ rule ran.
30
+ ``SignalResult`` gains ``rules_evaluated``, ``rules_applicable``,
31
+ ``n_observations``, ``min_observations``, ``below_min_observations`` and
32
+ ``evaluation_note``; ``is_partial`` / ``evaluation_status`` now also reflect the
33
+ advisory threshold. A partial evaluation prints
34
+ ``⚠ Partial evaluation in X: 2 of 8 rules applicable at n=4 (...). No signals
35
+ from the rules evaluated.`` and the checkmark line is reserved for a complete
36
+ evaluation. Which rules run, and what they flag, is unchanged. Excel export's
37
+ Summary sheet adds evaluation status. Reported privately (GHSA-hw63-2x95-fmpv)
38
+ and in #114.
39
+ - ``SECURITY.md`` supported-versions table said 0.1.x while the prose said 0.2.x.
40
+ The table now matches the prose.
41
+
42
+ ### Removed
43
+ - **Seven never-called utilities from ``datasets.synthetic``** — ``make_edge_cases``
44
+ (unseeded, non-deterministic), ``compare_sds_characteristics`` (its docstring
45
+ table was factually wrong), ``validate_sds_detection`` (vacuous: it compared
46
+ ``observed_sds`` to the very value it was handed, so it always returned True),
47
+ ``generate_test_suite``, ``get_sds_info`` + ``print_sds_summary`` (a second,
48
+ drifting copy of ``SDSRegistry`` metadata), and ``make_large_dataset``. Zero
49
+ callers existed anywhere in the package, tests, docs, or examples.
50
+ - ``SDSRegistry.print_all_analysis_plans`` and ``SDSRegistry.get_capability_matrix``
51
+ (same finding: no callers).
52
+ - Dead branches: the Excel exporter's ``_write_stratified_summary_tab`` (unreachable
53
+ since stratified charts moved to the single-entry ``strata`` payload) and its
54
+ Series/scalar effects arms; the plotter's legacy underscore-name stratification
55
+ arm and unused ``_get_data_legend_name``; the ``Study`` arm of the loss
56
+ function's ``_coerce_ads`` (``assess_loss`` takes an ``AnalysisDataSet``).
57
+
58
+ ### CI / Infrastructure
59
+ - **The Bishop validation gate now bites.** ``validation/e2e_bishop_report.py``
60
+ exits nonzero when any of its 280 assertions diverge from the reference values
61
+ (previously it only rendered PASS/FAIL into the report), the publish workflow
62
+ runs the same gate before any release, the four reference artifacts are
63
+ SHA-256-pinned by ``tests/test_reference_integrity.py`` and check out
64
+ byte-exact on every platform, and CODEOWNERS routes any change to the gate's
65
+ inputs through the maintainer.
66
+
10
67
  ## [0.2.0] - 2026-08-31
11
68
 
12
69
  ### Removed
@@ -755,7 +812,8 @@ and may change between minor versions until 1.0.
755
812
  - `natsort >= 8.0`
756
813
  - `plotly >= 5.18, < 7`
757
814
 
758
- [Unreleased]: https://github.com/cnicholas/processbehavior/compare/v0.2.0...HEAD
815
+ [Unreleased]: https://github.com/cnicholas/processbehavior/compare/v0.2.1...HEAD
816
+ [0.2.1]: https://github.com/cnicholas/processbehavior/compare/v0.2.0...v0.2.1
759
817
  [0.2.0]: https://github.com/cnicholas/processbehavior/compare/v0.1.1...v0.2.0
760
818
  [0.1.1]: https://github.com/cnicholas/processbehavior/compare/v0.1.0...v0.1.1
761
819
  [0.1.0]: https://github.com/cnicholas/processbehavior/releases/tag/v0.1.0
@@ -164,8 +164,12 @@ Releases are published to PyPI by the `Publish` workflow on tag push.
164
164
  in `CHANGELOG.md` and update the compare links at the bottom.
165
165
  3. Bump the version in `processbehavior/__init__.py` (`__version__`).
166
166
  `pyproject.toml` reads it via `[tool.hatch.version]`.
167
- 4. Commit with subject `Release vX.Y.Z`, push to `main`.
168
- 5. Tag and push:
167
+ 4. Run `python validation/e2e_bishop_report.py` and commit the regenerated
168
+ `docs/reference/validation.md`. Its header carries the version string, and
169
+ the publish workflow fails if the committed page has drifted from what the
170
+ validator writes.
171
+ 5. Commit with subject `Release vX.Y.Z`, push to `main`.
172
+ 6. Tag and push:
169
173
  ```bash
170
174
  git tag -s vX.Y.Z -m "Release vX.Y.Z"
171
175
  git push origin vX.Y.Z
@@ -173,7 +177,7 @@ Releases are published to PyPI by the `Publish` workflow on tag push.
173
177
  The tag push triggers `.github/workflows/publish.yml`, which builds,
174
178
  verifies with `twine check`, and uploads to PyPI via OIDC trusted
175
179
  publishing — no API tokens.
176
- 6. Verify the release on https://pypi.org/project/processbehavior/ and run
180
+ 7. Verify the release on https://pypi.org/project/processbehavior/ and run
177
181
  `pip install processbehavior==X.Y.Z` in a fresh venv to confirm the
178
182
  README quickstart still runs end-to-end.
179
183
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: processbehavior
3
- Version: 0.2.0
3
+ Version: 0.2.1
4
4
  Summary: Python-native Process Behavior & Control Charts (spec-driven SPC with tidy outputs)
5
5
  Project-URL: Homepage, https://github.com/cnicholas/processbehavior
6
6
  Project-URL: Repository, https://github.com/cnicholas/processbehavior
@@ -86,6 +86,7 @@ Description-Content-Type: text/markdown
86
86
  [![PyPI version](https://img.shields.io/pypi/v/processbehavior.svg)](https://pypi.org/project/processbehavior/)
87
87
  [![Python versions](https://img.shields.io/pypi/pyversions/processbehavior.svg)](https://pypi.org/project/processbehavior/)
88
88
  [![CI](https://github.com/cnicholas/processbehavior/actions/workflows/ci.yml/badge.svg)](https://github.com/cnicholas/processbehavior/actions/workflows/ci.yml)
89
+ [![codecov](https://codecov.io/gh/cnicholas/processbehavior/graph/badge.svg)](https://codecov.io/gh/cnicholas/processbehavior)
89
90
  [![License](https://img.shields.io/pypi/l/processbehavior.svg)](https://github.com/cnicholas/processbehavior/blob/main/LICENSE)
90
91
 
91
92
  A Python library for **Process Behavior Analysis** following Thomas A. Bishop's Variance Analysis System (VAS) methodology.
@@ -3,6 +3,7 @@
3
3
  [![PyPI version](https://img.shields.io/pypi/v/processbehavior.svg)](https://pypi.org/project/processbehavior/)
4
4
  [![Python versions](https://img.shields.io/pypi/pyversions/processbehavior.svg)](https://pypi.org/project/processbehavior/)
5
5
  [![CI](https://github.com/cnicholas/processbehavior/actions/workflows/ci.yml/badge.svg)](https://github.com/cnicholas/processbehavior/actions/workflows/ci.yml)
6
+ [![codecov](https://codecov.io/gh/cnicholas/processbehavior/graph/badge.svg)](https://codecov.io/gh/cnicholas/processbehavior)
6
7
  [![License](https://img.shields.io/pypi/l/processbehavior.svg)](https://github.com/cnicholas/processbehavior/blob/main/LICENSE)
7
8
 
8
9
  A Python library for **Process Behavior Analysis** following Thomas A. Bishop's Variance Analysis System (VAS) methodology.
@@ -2,13 +2,13 @@
2
2
 
3
3
  ## Supported versions
4
4
 
5
- processbehavior is in **alpha** (0.1.x). Only the most recent 0.1.x release
6
- receives security fixes. 0.2.x is the supported line; 0.1.x is not patched.
5
+ processbehavior is in **alpha**. Only the most recent 0.2.x release receives
6
+ security fixes; 0.1.x is not patched.
7
7
 
8
8
  | Version | Supported |
9
9
  | ------- | ------------------ |
10
- | 0.1.x | :white_check_mark: |
11
- | < 0.1 | :x: |
10
+ | 0.2.x | :white_check_mark: |
11
+ | < 0.2 | :x: |
12
12
 
13
13
  ## Reporting a vulnerability
14
14
 
@@ -47,7 +47,7 @@ its ``.sds`` field. Internally some modules still use the legacy "SDS"
47
47
  prefix (e.g. ``sds_detector.py``); the model itself is three-state.
48
48
  """
49
49
 
50
- __version__ = '0.2.0'
50
+ __version__ = '0.2.1'
51
51
 
52
52
  # Result object
53
53
  from processbehavior.analysis_result import AnalysisResult
@@ -1029,11 +1029,16 @@ class AnalysisResult:
1029
1029
  >>> from processbehavior.signals import SignalConfig
1030
1030
  >>> config = SignalConfig(
1031
1031
  ... enabled_rules=['rule_1', 'rule_2'],
1032
- ... min_observations=30,
1032
+ ... min_observations=30, # below 30 points the result is marked partial
1033
1033
  ... ignore_first_n=5
1034
1034
  ... )
1035
1035
  >>> signals = result.detect_signals(config=config)
1036
1036
 
1037
+ A short series never returns an unqualified all-clear: when rules were
1038
+ skipped for length, or the series is below ``min_observations``,
1039
+ ``signals.is_partial`` is True and ``signals.summary`` says which rules
1040
+ were evaluated.
1041
+
1037
1042
  Access violations:
1038
1043
 
1039
1044
  >>> signals.by_rule['rule_2'] # Rule 2 violations
@@ -6,18 +6,13 @@ from __future__ import annotations
6
6
 
7
7
  from .loaders import load_coffee_shop
8
8
  from .synthetic import (
9
- compare_sds_characteristics,
10
- generate_test_suite,
11
- get_sds_info,
12
9
  make_design,
13
- make_edge_cases,
14
10
  make_sds1,
15
11
  make_sds2,
16
12
  make_sds3,
17
13
  make_sds4,
18
14
  make_sds5,
19
15
  make_sds6,
20
- print_sds_summary,
21
16
  )
22
17
 
23
18
  __all__ = [
@@ -28,10 +23,5 @@ __all__ = [
28
23
  'make_sds5',
29
24
  'make_sds6',
30
25
  'make_design',
31
- 'make_edge_cases',
32
26
  'load_coffee_shop',
33
- 'compare_sds_characteristics',
34
- 'generate_test_suite',
35
- 'get_sds_info',
36
- 'print_sds_summary',
37
27
  ]