processbehavior 0.3.2__tar.gz → 0.4.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {processbehavior-0.3.2 → processbehavior-0.4.0}/CHANGELOG.md +188 -1
- {processbehavior-0.3.2 → processbehavior-0.4.0}/CITATION.cff +4 -4
- {processbehavior-0.3.2 → processbehavior-0.4.0}/CONTRIBUTING.md +16 -4
- {processbehavior-0.3.2 → processbehavior-0.4.0}/PKG-INFO +10 -11
- {processbehavior-0.3.2 → processbehavior-0.4.0}/README.md +9 -10
- {processbehavior-0.3.2 → processbehavior-0.4.0}/processbehavior/__init__.py +2 -2
- {processbehavior-0.3.2 → processbehavior-0.4.0}/processbehavior/analysis.py +196 -172
- {processbehavior-0.3.2 → processbehavior-0.4.0}/processbehavior/analysis_dataset.py +49 -21
- {processbehavior-0.3.2 → processbehavior-0.4.0}/processbehavior/analysis_result.py +4 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/processbehavior/capability.py +51 -10
- {processbehavior-0.3.2 → processbehavior-0.4.0}/processbehavior/datasets/synthetic.py +3 -4
- {processbehavior-0.3.2 → processbehavior-0.4.0}/processbehavior/effects_calculator.py +1 -1
- {processbehavior-0.3.2 → processbehavior-0.4.0}/processbehavior/focused_result.py +5 -3
- {processbehavior-0.3.2 → processbehavior-0.4.0}/processbehavior/loss_function.py +54 -24
- {processbehavior-0.3.2 → processbehavior-0.4.0}/processbehavior/maximum_information.py +12 -12
- {processbehavior-0.3.2 → processbehavior-0.4.0}/processbehavior/plotting/capability_chart.py +24 -15
- processbehavior-0.4.0/processbehavior/plotting/lane_boundaries.py +94 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/processbehavior/plotting/renderers.py +1 -1
- {processbehavior-0.3.2 → processbehavior-0.4.0}/processbehavior/residual_calculator.py +120 -54
- {processbehavior-0.3.2 → processbehavior-0.4.0}/processbehavior/result_signals.py +2 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/processbehavior/sds_detector.py +19 -19
- {processbehavior-0.3.2 → processbehavior-0.4.0}/processbehavior/signals/detector.py +31 -2
- {processbehavior-0.3.2 → processbehavior-0.4.0}/processbehavior/signals/detectors.py +3 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/processbehavior/spc_constants.py +85 -49
- {processbehavior-0.3.2 → processbehavior-0.4.0}/processbehavior/study.py +35 -6
- processbehavior-0.4.0/tests/fixtures/bishop_analyses/aco_medicare.json +948 -0
- processbehavior-0.4.0/tests/fixtures/bishop_analyses/known_effects_sds_1.json +683 -0
- processbehavior-0.4.0/tests/fixtures/bishop_analyses/pm_inert_sds_1.json +683 -0
- processbehavior-0.3.2/tests/fixtures/bishop_analyses/vassds3analysis.json → processbehavior-0.4.0/tests/fixtures/bishop_analyses/pm_inert_sds_2.json +208 -178
- processbehavior-0.4.0/tests/fixtures/bishop_analyses/pm_inert_sds_3.json +1093 -0
- processbehavior-0.4.0/tests/fixtures/bishop_analyses/pm_inert_sds_4.json +1100 -0
- processbehavior-0.4.0/tests/fixtures/bishop_analyses/pm_inert_sds_5.json +786 -0
- processbehavior-0.4.0/tests/fixtures/bishop_analyses/pm_inert_sds_6.json +1111 -0
- processbehavior-0.3.2/tests/fixtures/bishop_analyses/vassds1analysis.json → processbehavior-0.4.0/tests/fixtures/bishop_analyses/pm_sds_1.json +32 -2
- processbehavior-0.3.2/tests/fixtures/bishop_analyses/vassds2analysis.json → processbehavior-0.4.0/tests/fixtures/bishop_analyses/pm_sds_2.json +58 -28
- processbehavior-0.4.0/tests/fixtures/bishop_analyses/pm_sds_3.json +1089 -0
- processbehavior-0.4.0/tests/fixtures/bishop_analyses/pm_sds_4.json +1093 -0
- processbehavior-0.4.0/tests/fixtures/bishop_analyses/pm_sds_5.json +785 -0
- processbehavior-0.4.0/tests/fixtures/bishop_analyses/pm_sds_6.json +1111 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/fixtures/coffee_capability_full_baseline.json +1 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/fixtures/golden_masters/missing_values/X_data.parquet +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/fixtures/golden_masters/missing_values/mR_data.parquet +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/fixtures/golden_masters/missing_values/mR_statistics.json +1 -1
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/fixtures/golden_masters/paired_xbar_s/Xbar_data.parquet +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/fixtures/golden_masters/paired_xmr_r/X_data.parquet +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/fixtures/golden_masters/paired_xmr_r/X_statistics.json +1 -1
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/fixtures/golden_masters/paired_xmr_r/mR_data.parquet +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/fixtures/golden_masters/pathological_ordering/X_data.parquet +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/fixtures/golden_masters/pathological_ordering/X_statistics.json +1 -1
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/fixtures/golden_masters/pathological_ordering/mR_data.parquet +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/fixtures/golden_masters/pathological_ordering/mR_statistics.json +1 -1
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/fixtures/golden_masters/single_obs_strata/X_data.parquet +0 -0
- processbehavior-0.4.0/tests/fixtures/golden_masters/single_obs_strata/X_statistics.json +6 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/fixtures/golden_masters/single_obs_strata/mR_data.parquet +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/fixtures/golden_masters/single_obs_strata/mR_statistics.json +1 -1
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/fixtures/golden_masters/stratified_uneven/Xbar_data.parquet +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/fixtures/golden_masters/unstratified_small/X_data.parquet +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/fixtures/golden_masters/unstratified_small/X_statistics.json +1 -1
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/fixtures/golden_masters/unstratified_small/mR_data.parquet +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/fixtures/golden_masters/unstratified_small/mR_statistics.json +1 -1
- processbehavior-0.4.0/tests/test_ads3_charts.py +61 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_bishop_reference.py +5 -5
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_capability.py +74 -3
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_execute_validation.py +51 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_loss_function.py +60 -25
- processbehavior-0.4.0/tests/test_manual_citations.py +49 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_maximum_information.py +26 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_performance.py +8 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_phased_limits.py +74 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_plotting_decorations.py +42 -1
- processbehavior-0.4.0/tests/test_r2_unavailable.py +56 -0
- processbehavior-0.4.0/tests/test_r6_effect.py +43 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_recentered_mr_fix.py +10 -10
- processbehavior-0.4.0/tests/test_recentering.py +55 -0
- processbehavior-0.4.0/tests/test_reference_integrity.py +108 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_residual_calculator.py +121 -186
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_sds.py +5 -15
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_sds_detector.py +1 -1
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_spc_constants.py +36 -4
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_stratified_insufficiency.py +25 -0
- processbehavior-0.4.0/tests/test_unequal_subgroups.py +100 -0
- processbehavior-0.4.0/tests/test_vas_chart_constants.py +124 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_xbar_residual_center.py +5 -6
- processbehavior-0.3.2/processbehavior/plotting/lane_boundaries.py +0 -78
- processbehavior-0.3.2/tests/fixtures/golden_masters/single_obs_strata/X_statistics.json +0 -6
- processbehavior-0.3.2/tests/test_reference_integrity.py +0 -56
- {processbehavior-0.3.2 → processbehavior-0.4.0}/.gitignore +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/CODE_OF_CONDUCT.md +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/LICENSE +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/SECURITY.md +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/examples/README.md +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/processbehavior/calibration.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/processbehavior/data_preparation.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/processbehavior/datasets/__init__.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/processbehavior/datasets/data/coffee_shop_demo_long.csv +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/processbehavior/datasets/loaders.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/processbehavior/derivations.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/processbehavior/exceptions.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/processbehavior/exporters/__init__.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/processbehavior/exporters/excel_exporter.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/processbehavior/formulation_spec.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/processbehavior/plotting/__init__.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/processbehavior/plotting/_math.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/processbehavior/plotting/contracts.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/processbehavior/plotting/control_chart.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/processbehavior/plotting/effects_charts.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/processbehavior/plotting/limits.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/processbehavior/plotting/maximum_information_chart.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/processbehavior/plotting/plotter.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/processbehavior/plotting/report.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/processbehavior/plotting/residuals.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/processbehavior/plotting/run_rules_viz.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/processbehavior/plotting/stats_box.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/processbehavior/plotting/themes.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/processbehavior/plotting/x_axis_layout.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/processbehavior/plotting/zones.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/processbehavior/process_behavior.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/processbehavior/py.typed +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/processbehavior/result_tabular.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/processbehavior/series_length.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/processbehavior/signals/__init__.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/processbehavior/signals/config.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/processbehavior/signals/result.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/processbehavior/types.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/pyproject.toml +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/__init__.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/conftest.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/fixtures/data/FILLWEIGHTDATA_800.csv +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/fixtures/data/coffee_shop_demo_long.csv +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/fixtures/golden_masters/missing_values/X_metadata.json +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/fixtures/golden_masters/missing_values/X_statistics.json +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/fixtures/golden_masters/missing_values/mR_metadata.json +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/fixtures/golden_masters/paired_xbar_s/S_data.parquet +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/fixtures/golden_masters/paired_xbar_s/S_metadata.json +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/fixtures/golden_masters/paired_xbar_s/S_statistics.json +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/fixtures/golden_masters/paired_xbar_s/Xbar_metadata.json +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/fixtures/golden_masters/paired_xbar_s/Xbar_statistics.json +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/fixtures/golden_masters/paired_xmr_r/X_metadata.json +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/fixtures/golden_masters/paired_xmr_r/mR_metadata.json +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/fixtures/golden_masters/paired_xmr_r/mR_statistics.json +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/fixtures/golden_masters/pathological_ordering/X_metadata.json +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/fixtures/golden_masters/pathological_ordering/mR_metadata.json +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/fixtures/golden_masters/residual_chart/S_data.parquet +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/fixtures/golden_masters/residual_chart/S_metadata.json +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/fixtures/golden_masters/residual_chart/S_statistics.json +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/fixtures/golden_masters/single_obs_strata/X_metadata.json +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/fixtures/golden_masters/single_obs_strata/mR_metadata.json +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/fixtures/golden_masters/stratified_balanced/S_data.parquet +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/fixtures/golden_masters/stratified_balanced/S_metadata.json +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/fixtures/golden_masters/stratified_balanced/S_statistics.json +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/fixtures/golden_masters/stratified_balanced/Xbar_data.parquet +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/fixtures/golden_masters/stratified_balanced/Xbar_metadata.json +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/fixtures/golden_masters/stratified_balanced/Xbar_statistics.json +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/fixtures/golden_masters/stratified_uneven/S_data.parquet +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/fixtures/golden_masters/stratified_uneven/S_metadata.json +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/fixtures/golden_masters/stratified_uneven/S_statistics.json +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/fixtures/golden_masters/stratified_uneven/Xbar_metadata.json +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/fixtures/golden_masters/stratified_uneven/Xbar_statistics.json +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/fixtures/golden_masters/unstratified_small/X_metadata.json +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/fixtures/golden_masters/unstratified_small/mR_metadata.json +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_analysis_bugs.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_analysis_dataset.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_analysis_golden_master.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_analysis_result_contract.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_analysis_specifications.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_api_reference.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_beyond_limits_vectorized.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_bin_extremes.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_by_parameter.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_by_permutations.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_calibration.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_capability_chart.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_capability_window.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_chart_availability.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_chart_column_contract.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_chart_parsing.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_control_chart_figure.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_data_preparation.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_datasets.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_derivations.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_derivations_robustness.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_design_state_lineage.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_documented_rule_coverage.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_edge_cases.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_effects_calculator.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_effects_plotting.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_encode_rsg_vectorized.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_excel_export.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_focus.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_garbage_character_handling.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_init_cleaning.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_lane_boundaries.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_lane_connectors.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_limits_vectorized.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_na_in_factor_columns.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_notebook_ergonomics.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_p0_p2_regressions.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_plotting.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_plotting_hardening.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_plotting_xaxis.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_process_behavior.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_release_gate_0_1_0_checklist.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_residual_aliases.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_residual_labels.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_residual_scope.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_resolve_by_grouping.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_result_signals.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_result_tabular.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_sampling_plan.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_series_length.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_signal_detectors.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_signal_result_surface.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_signals.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_single_detection.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_solo_mr_residuals.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_srp_refactor.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_strata_companion.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_strata_sufficiency.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_supports_calibration.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_synthetic.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_types.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_validate_by_parameter.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_weco_integration.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_why_not.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_x_axis_layout.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_xbar_s_options.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/tests/test_xbar_stratified.py +0 -0
- {processbehavior-0.3.2 → processbehavior-0.4.0}/validation/PBTESTDATABASE_T100.csv +0 -0
|
@@ -7,6 +7,191 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.4.0] - 2026-10-14
|
|
11
|
+
|
|
12
|
+
This release aligns the library with Bishop's VAS documentation manual dated 10-12-2026 and
|
|
13
|
+
reproduces his VAS runs of October 2026 (PM SDS, PM INERT, known-effects and Medicare decks).
|
|
14
|
+
Equation numbers below are that manual's.
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
- **R6's factor-level effect is the average of the condition effects over the level.** R6 = α_i + R2
|
|
18
|
+
with α_i the condition effects ρ̂_k = R5 - R2 averaged over the level (was the level's mean of R5,
|
|
19
|
+
Eq 14-24, "≈ α_i"). The two differ by the level's average R2, which Dr. Bishop notes is always
|
|
20
|
+
near 0; in ADS 1 it is 0 (R2 averages to zero in each cell). On ADS 2/3 it shows when levels are
|
|
21
|
+
small: Tom's Medicare run centres the organisation-effects chart at 10831.1 (PB was 10829.8, now
|
|
22
|
+
10831.1).
|
|
23
|
+
- **R2 for designs with a one-observation subgroup (ADS 2 and 3) follows the manual.**
|
|
24
|
+
The data are first stripped of the process mean and the condition and period effects
|
|
25
|
+
(Z = Y − Ȳ_k − Ȳ_t + Ȳ, Eq 14-4 / 14-9), Z is differenced along the condition-then-time
|
|
26
|
+
sequence, and the difference is divided by twice the R2 scale factor
|
|
27
|
+
c(K, M) = √((K − 1)/(2K) · (1 − K/(M − 1))), computed from the layout (Eqs 14-5..14-13).
|
|
28
|
+
Previously R2 was half the difference of consecutive raw values, so every step from one
|
|
29
|
+
condition's last period to the next condition's first carried the level difference between
|
|
30
|
+
them, a common trend was read as noise, and the result sat on a smaller scale than σ. R3–R6,
|
|
31
|
+
the effects, maximum information and potential capability follow. PM SDS 2 R2 chart limits
|
|
32
|
+
±1.94 → ±2.76, PM SDS 3 ±2.47 → ±3.70, potential Cp on PM SDS 2 (specs 232/242)
|
|
33
|
+
2.51 → 1.78; on the Medicare ACO file the R2 σ falls from about 1,023 to 300 and the
|
|
34
|
+
organisation chart (recentred R5 by ACO) flags 19 of 24 organisations instead of 8. ADS 1
|
|
35
|
+
R2 (within-cell deviation, Eq 14-3) is unchanged. `calculate_r2` now dispatches on
|
|
36
|
+
`r2_method` and takes `n_conditions`; its `n_per_cell` argument is gone.
|
|
37
|
+
- **Taguchi loss follows the manual.** ADS 1 unexplained loss is the average cell
|
|
38
|
+
variance (1/KT)·ΣS²_kt, without dividing each S_kt by c4 (Eq 15-16). ADS 2/3 unexplained
|
|
39
|
+
loss is the sample variance of R2 (Eq 15-17; the 1/0.7 correction is gone), and the
|
|
40
|
+
interaction is what the other parts leave of the total loss (Ȳ − T)² + S², set to 0 when
|
|
41
|
+
negative (Eqs 15-18..15-20), so the parts add to the total. PM SDS 1 at target 237:
|
|
42
|
+
unexplained 23.0% → 20.9%, interaction 43.3% → 44.5%; PM SDS 2: interaction 42.5% → 25.6%,
|
|
43
|
+
unexplained 23.6% → 30.0%; pure noise (PM INERT) now shows 0% interaction in ADS 2/3.
|
|
44
|
+
- **Re-centred residuals are the residual plus the process mean, the mean of the cell means
|
|
45
|
+
(Eq 14-26).** RCR3, RCR4 and
|
|
46
|
+
RCR5 were "reconstructed Y" (each algebraically Ȳ_kt + R2), so a recentred interaction
|
|
47
|
+
chart plotted close to the raw cell means. They now plot the effect plus R2 on the
|
|
48
|
+
measurement scale, as VAS does; RCR2 is unchanged. Xbar means by condition (RCR5) or
|
|
49
|
+
period (RCR4) are unchanged on complete designs; period effects are charted from R4.
|
|
50
|
+
- **ADS 3 recommends the Xbar chart** (was X): Xbar/S is VAS's default for SDS 3 and 6.
|
|
51
|
+
- **Capability is centred on the process mean as VAS computes it**: the unweighted mean of the
|
|
52
|
+
(factor × time) cell means, the same centre as the Xbar chart and the loss function, instead
|
|
53
|
+
of the plain average of the readings. `CapabilityResult.y_bar`, current PPL/PPU and the
|
|
54
|
+
potential centre (ȳ + mean(R2)) move when cells have different sizes (SDS 3, 4, 6); balanced
|
|
55
|
+
designs are unchanged. PM SDS 6 now reads PROCESS MEAN 237.86 and PPL 1.102 / PPU 0.78, as
|
|
56
|
+
Tom's VAS run does (was 237.834, 1.098 / 0.784).
|
|
57
|
+
- **Validation gate re-referenced to Tom's 3 October 2026 VAS run**
|
|
58
|
+
(`validation/e2e_bishop_report.py`, `tests/fixtures/bishop_analyses/`). PM SDS 3 is checked
|
|
59
|
+
as Xbar/S, as VAS now draws it; its limits vary with subgroup size and are not printed on the
|
|
60
|
+
slides, so they carry no reference yet. The gate now reports 254 assertions passing and 61
|
|
61
|
+
with no reference value (was 280 / 35); PB's side is compared at full precision.
|
|
62
|
+
- **The validation gate covers every VAS run on hand** (14 runs, 1155 assertions, was 3 runs and
|
|
63
|
+
254): PM SDS 1-6, PM INERT SDS 1-6 (the pure-noise column with each design state's missing-data
|
|
64
|
+
pattern), Tom's known-effects data (`validation/PBTESTKNOWNEFFECTS_T100.csv`, SDS 1) and the
|
|
65
|
+
Medicare ACO data (`validation/aco_per_capita_expenditure.csv`, 24 organisations x 4 years). Each
|
|
66
|
+
run's reference values, spec limits and target are in its own file,
|
|
67
|
+
`tests/fixtures/bishop_analyses/<run>.json` (the `vassds{1,2,3}analysis.json` references are
|
|
68
|
+
now `pm_sds_{1,2,3}.json`). All six PM runs use target 237; PM SDS 5's loss shares come from
|
|
69
|
+
Tom's rerun at 237 (8 October 2026), because his 10/3 run used the process mean.
|
|
70
|
+
- **Limits VAS prints as "UNEQUAL" are checked against the lines it draws.** Where subgroup sizes
|
|
71
|
+
differ, VAS steps the limits per subgroup and prints no value; the gate now reads every
|
|
72
|
+
subgroup's LBL/UBL from the red limit lines in the VAS chart drawing (scaled by the y-axis ticks,
|
|
73
|
+
good to about one drawing unit) and compares PB subgroup by subgroup, to 1.5 drawing units. 186
|
|
74
|
+
charts in SDS 3-6; the gate reports 1475 assertions passing, 0 failing, and 79 with no
|
|
75
|
+
reference (was 1155 / 0 / 399).
|
|
76
|
+
- **The R6 S charts are checked wherever VAS computed them correctly.** VAS's α<sub>N</sub>
|
|
77
|
+
(Eq 10-11) used Minitab's GAMMA function, which overflows above N = 343; the 10/3 VAS runs held
|
|
78
|
+
α<sub>N</sub> at 0.9995 from there on, so their S limits followed N = 500 whatever the subgroup size.
|
|
79
|
+
Dr. Bishop confirmed it (8 October 2026) and is replacing it with a table; PB computes α<sub>N</sub>
|
|
80
|
+
with log-gamma for any N. The gate now checks the R6 S charts whose subgroups are under 343 (all
|
|
81
|
+
match), the factor S charts' centerlines (one subgroup per factor level, as Dr. Bishop confirmed),
|
|
82
|
+
and PM SDS 5's loss shares from his rerun at 237; only the limits for subgroups of 343 or more
|
|
83
|
+
wait for his rerun. The references' notes now give that cause.
|
|
84
|
+
- **Every R6 S chart in the PM runs is checked, against Dr. Bishop's reruns of 13 October 2026.**
|
|
85
|
+
His reruns of PM SDS 1-6 and PM INERT SDS 1-6 compute α<sub>N</sub> for every N. Against the
|
|
86
|
+
10/3 runs they change only the R6 S charts (pages 21, 25 and 27) and potential capability in
|
|
87
|
+
PM SDS 3 and 4. The limits for subgroups of 343 or more, pending until now, all match PB within
|
|
88
|
+
the gate's tolerances (36 assertions). The rerun's potential capability is now PB's value
|
|
89
|
+
to the digit it prints: PM SDS 3 Cp 1.58 and CPL 1.84 (PB 1.5751 and 1.8356; the 10/3 run
|
|
90
|
+
printed 1.57 and 1.83), and PM SDS 4 CPL 2.66 (PB 2.6555; was 2.65). The gate no longer lists
|
|
91
|
+
the per-factor loss shares (F1, F2, PDC Int) for a one-factor run such as Medicare, where they
|
|
92
|
+
don't exist. It reports 1547 assertions passing, 0 failing and 4 with no reference (was 1511 /
|
|
93
|
+
0 / 43): the known-effects factor S limits, whose 6 October run predates the fix.
|
|
94
|
+
|
|
95
|
+
### Added
|
|
96
|
+
- **R2 is reported unavailable, with the reason, when the R2 scale factor is undefined**
|
|
97
|
+
(fewer than two process design conditions, or M < K + 2 observations). `formulate()` warns;
|
|
98
|
+
R2–R6 are not offered; `execute()` and `why_not()` give the reason; `loss_function()` and
|
|
99
|
+
`maximum_information()` raise `ValidationError`; `capability()` reports potential capability
|
|
100
|
+
unavailable. Previously these layouts produced half-differences of the raw data.
|
|
101
|
+
- **`CapabilityResult.potential_center`**: the centre of the potential values, ȳ + mean(R2).
|
|
102
|
+
Potential CPL/CPU and the potential chart's centre line use it, as VAS does (Medicare potential
|
|
103
|
+
PPU 5.74; ȳ alone gives 5.73). It equals ȳ in ADS 1.
|
|
104
|
+
|
|
105
|
+
### Fixed
|
|
106
|
+
- **Stratified charts take time in proportion to the data, however many strata there are.**
|
|
107
|
+
The stratified X/mR path looked each stratum up with a scan of the whole table, so its cost
|
|
108
|
+
grew with strata × rows. With every row its own condition, an X/mR pair took 48 s at 30,165
|
|
109
|
+
rows, and an estimated 80 minutes at 307,683 (a gene-expression study, 6,033 genes × 51
|
|
110
|
+
subjects). It now takes 0.2 s and 1.9 s. The same scan sat in the stratified Xbar/S loops and
|
|
111
|
+
the lane-boundary loop, the per-stratum limits were computed one `pd.Series` at a time, and
|
|
112
|
+
two lists of strata were searched as lists. Results are unchanged: every chart, statistic,
|
|
113
|
+
lane boundary and stratum list was compared before and after on the reference data and a
|
|
114
|
+
30,165-row gene-effects file. `scripts/benchmark.py` adds a one-row-strata scenario, and
|
|
115
|
+
`tests/test_performance.py` checks that it scales linearly. Stratified Xbar/S still costs
|
|
116
|
+
about 2.5 ms per stratum (15 s at 6,033): linear, but not yet vectorised.
|
|
117
|
+
- **Charts with many lanes draw in a fraction of a second.** Each lane divider was added to the
|
|
118
|
+
figure with its own `add_shape` call, and plotly re-validates every shape already there, so the
|
|
119
|
+
cost grew with the square of the number of lanes: 800 dividers took 27 s, and an X chart of a
|
|
120
|
+
6,033-gene study (one lane per gene) would have taken about 25 minutes. They are now added in
|
|
121
|
+
one assignment, which builds the same figure (0.03 s for 800). Above 1,000
|
|
122
|
+
(`plotting.lane_boundaries.MAX_LANE_DIVIDERS`) none are drawn: the dividers would merge into a
|
|
123
|
+
solid band at any chart width.
|
|
124
|
+
- **`detect_signals()` works on phased charts.** It raised `TypeError` on every `phased=True`
|
|
125
|
+
chart: each phase has its own centre, so the statistics carry `center=None`, and the zone
|
|
126
|
+
calculation read that scalar. The chart already marks run rules not applicable, but only the
|
|
127
|
+
plot read the flag. Phased charts now get Rule 1 by default, judged against each phase's
|
|
128
|
+
limits, with the same points the chart flags; an explicit rule list runs as given, against each
|
|
129
|
+
row's own centre. The limits and the flagged points on the chart were always correct.
|
|
130
|
+
- **`value='response'` charts the response**, as the `execute()` signature and docstring say.
|
|
131
|
+
Every chart refused it ("Valid charts for RESPONSE: None"): residuals are told apart by a leading
|
|
132
|
+
`R`, which `RESPONSE` also has. `execute()`, `supports_calibration()` and `why_not()` now treat
|
|
133
|
+
it, in any case, exactly as `value=None`.
|
|
134
|
+
- **Xbar and S charts with subgroups of unequal size follow the manual (Eqs 11-5, 11-16,
|
|
135
|
+
11-17).** sigma-hat is the average of each subgroup's S_r / c4(N_r) (was S-bar / c4(N_r)), and each
|
|
136
|
+
subgroup's limits use its own N_r, so they step with subgroup size, as VAS draws them. N_r now
|
|
137
|
+
counts the values the chart is drawn from (was the response's count): on ADS 2 and 3 residual
|
|
138
|
+
charts, R2's blank first value leaves one subgroup one smaller. Equal-size charts are unchanged.
|
|
139
|
+
Found on Tom's Medicare run (slides 52-53): ACO-001 has 3 R6 values, and its limits are wider by
|
|
140
|
+
sqrt(4/3) on the Xbar chart and use B4(3) on the S chart.
|
|
141
|
+
- **Xbar charts include one-reading subgroups, as VAS draws them.** A subgroup with one value has
|
|
142
|
+
no S, so it takes no part in sigma-hat, but it is charted with limits centre ± 3 sigma-hat
|
|
143
|
+
(Eqs 11-16/17 with N_r = 1); it was left off the chart. The companion S chart still leaves it
|
|
144
|
+
out. On PM SDS 3 the Xbar chart now has all 800 subgroups (was 783) and on PM SDS 6 all 772
|
|
145
|
+
(was 642), matching the limit lines in Tom's VAS run subgroup by subgroup; on PM SDS 6's
|
|
146
|
+
interaction chart the one cell whose single reading has no R2 stays off, as in VAS. Designs
|
|
147
|
+
without one-reading subgroups (ADS 1) are unchanged.
|
|
148
|
+
- **Per-stratum Xbar centre lines count one-observation subgroups.** The centre is Bishop's
|
|
149
|
+
unweighted mean of every subgroup mean; subgroups with n = 1 were dropped before it was
|
|
150
|
+
taken, which moved four of the eight PM SDS 3 per-condition centres by 0.01–0.04.
|
|
151
|
+
- **Code and docs cite the manual's Chapters 10 and 12.** The X/mR limits and constants
|
|
152
|
+
(Eqs 12-1..12-11), c4 and the S-chart factors (Eqs 10-11, 10-12, 10-14), the cell and marginal
|
|
153
|
+
means (Eqs 10-7, 10-9) and the model the residuals estimate (Eq 10-3) now cite the manual where
|
|
154
|
+
the code computes exactly those equations, and every citation names the 10-12 edition (its
|
|
155
|
+
Chapter 10 drops the 10-1 edition's Eq 10-4, so Eqs 10-5..10-16 became 10-4..10-15); dotted
|
|
156
|
+
citations ("Eq 12.4") and an older manual's numbering in a test are gone.
|
|
157
|
+
`tests/test_manual_citations.py` keeps one citation form, and CONTRIBUTING.md describes it. The
|
|
158
|
+
residuals guide now says Ȳ is the mean of the cell means.
|
|
159
|
+
- **Bishop's methodology is called the Variation Analysis System**, as his VAS documentation
|
|
160
|
+
manual names it (was "Variance Analysis System" in the README, docs, CITATION.cff, docstrings and
|
|
161
|
+
the design report's VAS line). The synthetic-data module no longer credits the design states to
|
|
162
|
+
Wheeler.
|
|
163
|
+
- **Docs:** the three note blocks in the chart-types and design-state guides now render on the
|
|
164
|
+
MyST site (they used mkdocs syntax); the DS 4–6 chart tables and the no-factors branch of the
|
|
165
|
+
decision tree match what the library offers (a time-only study is DS 1, 2 or 3 by the number
|
|
166
|
+
of observations per time point, not DS 6); the R1 note no longer claims the residuals sum to
|
|
167
|
+
zero on unbalanced data (their cell means average to zero); R1 is cited as Eq 14-2, and the
|
|
168
|
+
design states are attributed to Bishop. The README's Validation section describes the gate as
|
|
169
|
+
it is (14 VAS runs, 1,547 assertions, SDS 4–6 included); it still described 3 runs and 254.
|
|
170
|
+
|
|
171
|
+
## [0.3.3] - 2026-09-29
|
|
172
|
+
|
|
173
|
+
### Changed
|
|
174
|
+
- **Individuals and moving-range limits now use the constants exactly as Bishop's VAS manual
|
|
175
|
+
defines them.** The individuals-chart multiplier is 3/1.128 = 2.659574 (previously the
|
|
176
|
+
rounded 2.66) and the moving-range upper limit is 1 + 3(0.8525)/1.128 = 3.267287 (previously
|
|
177
|
+
3.268), built from the manual's d₂ = 1.128 and d₃ = 0.8525 (Eq 12.4, 12.5, 12.10, 12.11). The
|
|
178
|
+
manual prints the rounded values; Bishop's VAS software computes them without rounding, and PB's
|
|
179
|
+
X and mR limits now match it digit for digit (Medicare first chart: ±3838.32 and 4715.38).
|
|
180
|
+
Limits move by 0.016% and 0.02%, so a signal changes only for a point within that distance of a
|
|
181
|
+
limit. The d₂ used on the calibration path and by the maximum-information chart is now exactly
|
|
182
|
+
1.128 (it was 3/2.66 = 1.1278), and `MR_SIGMA_INTERVAL_80` was regenerated: five entries move
|
|
183
|
+
by 0.001. New constant `D3_N2` in `processbehavior.spc_constants`.
|
|
184
|
+
|
|
185
|
+
### Added
|
|
186
|
+
- Docs: the chart-types guide now explains the three views of a study with factors and
|
|
187
|
+
time (the combined ``by=[]`` chart, the ``phased=True`` view, and full stratification),
|
|
188
|
+
how to read a signal at a subgroup boundary on the combined chart (evidence about the
|
|
189
|
+
traversal, kept in the calculation deliberately because it reproduces Bishop's reference
|
|
190
|
+
limits), and which claims survive reordering the lanes, with the R5 chart's limits
|
|
191
|
+
caveat for DS 2 and 3. The ``phased`` view is documented in the user guide for the first
|
|
192
|
+
time. From the #114 discussion with @rabujamra, whose permutation check is
|
|
193
|
+
``validation/mr_permutation_invariance.py``.
|
|
194
|
+
|
|
10
195
|
## [0.3.2] - 2026-09-15
|
|
11
196
|
|
|
12
197
|
### Fixed
|
|
@@ -929,7 +1114,9 @@ and may change between minor versions until 1.0.
|
|
|
929
1114
|
- `natsort >= 8.0`
|
|
930
1115
|
- `plotly >= 5.18, < 7`
|
|
931
1116
|
|
|
932
|
-
[Unreleased]: https://github.com/cnicholas/processbehavior/compare/v0.
|
|
1117
|
+
[Unreleased]: https://github.com/cnicholas/processbehavior/compare/v0.4.0...HEAD
|
|
1118
|
+
[0.4.0]: https://github.com/cnicholas/processbehavior/compare/v0.3.3...v0.4.0
|
|
1119
|
+
[0.3.3]: https://github.com/cnicholas/processbehavior/compare/v0.3.2...v0.3.3
|
|
933
1120
|
[0.3.2]: https://github.com/cnicholas/processbehavior/compare/v0.3.1...v0.3.2
|
|
934
1121
|
[0.3.1]: https://github.com/cnicholas/processbehavior/compare/v0.3.0...v0.3.1
|
|
935
1122
|
[0.3.0]: https://github.com/cnicholas/processbehavior/compare/v0.2.1...v0.3.0
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
cff-version: 1.2.0
|
|
2
2
|
message: "If you use processbehavior in your research, please cite it as below."
|
|
3
|
-
title: "processbehavior: Process Behavior Charts and
|
|
3
|
+
title: "processbehavior: Process Behavior Charts and Variation Analysis for Python"
|
|
4
4
|
abstract: >-
|
|
5
|
-
A Python implementation of Thomas A. Bishop's
|
|
5
|
+
A Python implementation of Thomas A. Bishop's Variation Analysis System (VAS):
|
|
6
6
|
three-state design-state lineage detection (planned / observed / analytical),
|
|
7
7
|
process behavior charts, R1-R6 residual variance decomposition, capability
|
|
8
8
|
indices, and Taguchi loss functions. Analytical outputs are validated
|
|
@@ -21,7 +21,7 @@ version: 0.2.0
|
|
|
21
21
|
keywords:
|
|
22
22
|
- statistical process control
|
|
23
23
|
- process behavior charts
|
|
24
|
-
-
|
|
24
|
+
- variation analysis
|
|
25
25
|
- control charts
|
|
26
26
|
- quality control
|
|
27
27
|
- shewhart
|
|
@@ -31,7 +31,7 @@ references:
|
|
|
31
31
|
- type: book
|
|
32
32
|
title: "The Scientific Basis for Modern Analytic Practice"
|
|
33
33
|
abstract: >-
|
|
34
|
-
The methodological foundation for the
|
|
34
|
+
The methodological foundation for the Variation Analysis System this
|
|
35
35
|
package implements: applied-research foundations, scientific methodology,
|
|
36
36
|
Shewhart's inductive analytic approach and process behavior charts,
|
|
37
37
|
operational definitions and research protocols, and case studies.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Contributing to processbehavior
|
|
2
2
|
|
|
3
3
|
Thanks for your interest. processbehavior is an implementation of Thomas A.
|
|
4
|
-
Bishop's
|
|
4
|
+
Bishop's Variation Analysis System (VAS); methodology fidelity is more
|
|
5
5
|
important than feature volume. Smaller, well-validated changes are preferred.
|
|
6
6
|
|
|
7
7
|
## What this library is, and what it is not
|
|
@@ -77,12 +77,12 @@ residuals (R1–R5), DS detection, limit calculations, or variance
|
|
|
77
77
|
decomposition must keep the relevant Bishop-reference tests green:
|
|
78
78
|
|
|
79
79
|
```bash
|
|
80
|
-
pytest tests/test_bishop_reference.py -v
|
|
80
|
+
pytest tests/test_bishop_reference.py -v # skips unless Bishop's residual workbooks are present
|
|
81
81
|
```
|
|
82
82
|
|
|
83
83
|
There is also a full end-to-end check that compares every chart center, control
|
|
84
|
-
limit, capability index and loss component against Bishop's
|
|
85
|
-
|
|
84
|
+
limit, capability index and loss component against Bishop's VAS runs for the
|
|
85
|
+
10-12-2026 manual (PM SDS 1–6, PM INERT, his known-effects data and the Medicare data):
|
|
86
86
|
|
|
87
87
|
```bash
|
|
88
88
|
python validation/e2e_bishop_report.py
|
|
@@ -97,6 +97,18 @@ summary.
|
|
|
97
97
|
If a Bishop check fails after your change, the change is wrong — not the
|
|
98
98
|
reference.
|
|
99
99
|
|
|
100
|
+
## Citing the methodology
|
|
101
|
+
|
|
102
|
+
Code and docs cite Bishop's VAS documentation manual by edition and equation number:
|
|
103
|
+
`(10-12 manual Eq 14-8)`, `Eqs 14-4..14-13`, `Eqs 11-16/17`. Name the edition once per file and use
|
|
104
|
+
the chapter-number form; `tests/test_manual_citations.py` checks both. The citations are read
|
|
105
|
+
against the manual itself, so a new edition reports every place in the library whose equation
|
|
106
|
+
changed or moved.
|
|
107
|
+
|
|
108
|
+
Cite an equation only where the code computes exactly that equation. Where it computes something
|
|
109
|
+
close (a different weighting, an approximation, a different sequence), say how it differs instead
|
|
110
|
+
of citing it.
|
|
111
|
+
|
|
100
112
|
## Docs versioning
|
|
101
113
|
|
|
102
114
|
The docs have one live version, deliberately, until 1.0:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: processbehavior
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.4.0
|
|
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
|
|
@@ -89,7 +89,7 @@ Description-Content-Type: text/markdown
|
|
|
89
89
|
[](https://codecov.io/gh/cnicholas/processbehavior)
|
|
90
90
|
[](https://github.com/cnicholas/processbehavior/blob/main/LICENSE)
|
|
91
91
|
|
|
92
|
-
A Python library for **Process Behavior Analysis** following Thomas A. Bishop's
|
|
92
|
+
A Python library for **Process Behavior Analysis** following Thomas A. Bishop's Variation Analysis System (VAS) methodology.
|
|
93
93
|
|
|
94
94
|
Unlike traditional SPC packages, processbehavior faithfully implements Bishop's VAS equation-by-equation: automatic detection of the three-state design lineage (PDS / ODS / ADS), variance decomposition via R1-R6 residuals, and chart selection routed by the data your study can actually analyze.
|
|
95
95
|
|
|
@@ -231,17 +231,16 @@ for stratum in result.strata:
|
|
|
231
231
|
|
|
232
232
|
## Validation
|
|
233
233
|
|
|
234
|
-
processbehavior's analytical outputs are
|
|
234
|
+
processbehavior's analytical outputs are verified against Dr. Thomas A. Bishop's VAS (Minitab-based) reference results on every push. The validator at `validation/e2e_bishop_report.py` runs **1,547 numerical assertions** through the full formulate → execute → capability / loss pipeline, across 14 of his VAS runs:
|
|
235
235
|
|
|
236
|
-
|
|
|
237
|
-
|
|
238
|
-
|
|
|
239
|
-
|
|
|
240
|
-
|
|
|
236
|
+
| VAS runs | Data | Analytical design states | Assertions | Status |
|
|
237
|
+
|---|---|---|---|---|
|
|
238
|
+
| `PM SDS 1`–`6` | `PBTESTDATABASE_T100.csv` | ADS 1, 2, 3 | 630 | ✅ all pass |
|
|
239
|
+
| `PM INERT SDS 1`–`6` (pure noise) | `PBTESTDATABASE_T100.csv` | ADS 1, 2, 3 | 630 | ✅ all pass |
|
|
240
|
+
| `PM SDS 1 KNOWN` (known effects) | `PBTESTKNOWNEFFECTS_T100.csv` | ADS 1 | 101 | ✅ all pass |
|
|
241
|
+
| `Medicare ACO (PCE)` | `aco_per_capita_expenditure.csv` | ADS 2 | 186 | ✅ all pass |
|
|
241
242
|
|
|
242
|
-
Reference data is Bishop's
|
|
243
|
-
|
|
244
|
-
ODS 4–6 (incomplete-grid scenarios) are detected and routed correctly but their end-to-end Bishop-reference coverage is pending. The synthetic generators in `make_design(state=4|5|6)` produce data with the structural shape Bishop's Table 1 specifies; full numerical validation against Bishop's incomplete-grid Minitab output is on the roadmap (issue #109).
|
|
243
|
+
Reference data is Bishop's VAS output for the 10-12-2026 manual (his runs of October 2026). The library matches every chart center, control limit, capability index and loss-function value that output prints, to within the precision Bishop reports. Where subgroup sizes differ, VAS prints "UNEQUAL" instead of a limit; there every subgroup's limits are read from the limit lines VAS draws and compared one by one. SDS 4–6 are incomplete grids (ODS 4–6), checked as the complete design that survives tidying (ADS 1–3). Four values, the factor S-chart limits of the known-effects run, wait for a VAS rerun. The per-run table is in `docs/reference/validation.md`.
|
|
245
244
|
|
|
246
245
|
The full report renders to `validation/e2e_bishop_report.html`.
|
|
247
246
|
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
[](https://codecov.io/gh/cnicholas/processbehavior)
|
|
7
7
|
[](https://github.com/cnicholas/processbehavior/blob/main/LICENSE)
|
|
8
8
|
|
|
9
|
-
A Python library for **Process Behavior Analysis** following Thomas A. Bishop's
|
|
9
|
+
A Python library for **Process Behavior Analysis** following Thomas A. Bishop's Variation Analysis System (VAS) methodology.
|
|
10
10
|
|
|
11
11
|
Unlike traditional SPC packages, processbehavior faithfully implements Bishop's VAS equation-by-equation: automatic detection of the three-state design lineage (PDS / ODS / ADS), variance decomposition via R1-R6 residuals, and chart selection routed by the data your study can actually analyze.
|
|
12
12
|
|
|
@@ -148,17 +148,16 @@ for stratum in result.strata:
|
|
|
148
148
|
|
|
149
149
|
## Validation
|
|
150
150
|
|
|
151
|
-
processbehavior's analytical outputs are
|
|
151
|
+
processbehavior's analytical outputs are verified against Dr. Thomas A. Bishop's VAS (Minitab-based) reference results on every push. The validator at `validation/e2e_bishop_report.py` runs **1,547 numerical assertions** through the full formulate → execute → capability / loss pipeline, across 14 of his VAS runs:
|
|
152
152
|
|
|
153
|
-
|
|
|
154
|
-
|
|
155
|
-
|
|
|
156
|
-
|
|
|
157
|
-
|
|
|
153
|
+
| VAS runs | Data | Analytical design states | Assertions | Status |
|
|
154
|
+
|---|---|---|---|---|
|
|
155
|
+
| `PM SDS 1`–`6` | `PBTESTDATABASE_T100.csv` | ADS 1, 2, 3 | 630 | ✅ all pass |
|
|
156
|
+
| `PM INERT SDS 1`–`6` (pure noise) | `PBTESTDATABASE_T100.csv` | ADS 1, 2, 3 | 630 | ✅ all pass |
|
|
157
|
+
| `PM SDS 1 KNOWN` (known effects) | `PBTESTKNOWNEFFECTS_T100.csv` | ADS 1 | 101 | ✅ all pass |
|
|
158
|
+
| `Medicare ACO (PCE)` | `aco_per_capita_expenditure.csv` | ADS 2 | 186 | ✅ all pass |
|
|
158
159
|
|
|
159
|
-
Reference data is Bishop's
|
|
160
|
-
|
|
161
|
-
ODS 4–6 (incomplete-grid scenarios) are detected and routed correctly but their end-to-end Bishop-reference coverage is pending. The synthetic generators in `make_design(state=4|5|6)` produce data with the structural shape Bishop's Table 1 specifies; full numerical validation against Bishop's incomplete-grid Minitab output is on the roadmap (issue #109).
|
|
160
|
+
Reference data is Bishop's VAS output for the 10-12-2026 manual (his runs of October 2026). The library matches every chart center, control limit, capability index and loss-function value that output prints, to within the precision Bishop reports. Where subgroup sizes differ, VAS prints "UNEQUAL" instead of a limit; there every subgroup's limits are read from the limit lines VAS draws and compared one by one. SDS 4–6 are incomplete grids (ODS 4–6), checked as the complete design that survives tidying (ADS 1–3). Four values, the factor S-chart limits of the known-effects run, wait for a VAS rerun. The per-run table is in `docs/reference/validation.md`.
|
|
162
161
|
|
|
163
162
|
The full report renders to `validation/e2e_bishop_report.html`.
|
|
164
163
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
ProcessBehavior - Statistical Process Control for Python
|
|
3
3
|
|
|
4
4
|
A Pythonic library for process behavior analysis following Bishop's
|
|
5
|
-
|
|
5
|
+
Variation Analysis System (VAS). The library models the data lifecycle
|
|
6
6
|
through three design states and routes analysis by what your data
|
|
7
7
|
actually supports:
|
|
8
8
|
|
|
@@ -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.
|
|
50
|
+
__version__ = '0.4.0'
|
|
51
51
|
|
|
52
52
|
# Result object
|
|
53
53
|
from processbehavior.analysis_result import AnalysisResult
|