processbehavior 0.4.0__tar.gz → 0.5.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.4.0 → processbehavior-0.5.0}/CHANGELOG.md +69 -1
- {processbehavior-0.4.0 → processbehavior-0.5.0}/CITATION.cff +1 -1
- {processbehavior-0.4.0 → processbehavior-0.5.0}/PKG-INFO +32 -1
- {processbehavior-0.4.0 → processbehavior-0.5.0}/README.md +31 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/processbehavior/__init__.py +1 -1
- {processbehavior-0.4.0 → processbehavior-0.5.0}/processbehavior/analysis.py +412 -192
- {processbehavior-0.4.0 → processbehavior-0.5.0}/processbehavior/analysis_result.py +71 -2
- {processbehavior-0.4.0 → processbehavior-0.5.0}/processbehavior/data_preparation.py +13 -2
- {processbehavior-0.4.0 → processbehavior-0.5.0}/processbehavior/exceptions.py +4 -4
- {processbehavior-0.4.0 → processbehavior-0.5.0}/processbehavior/focused_result.py +6 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/processbehavior/formulation_spec.py +6 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/processbehavior/plotting/plotter.py +1 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/processbehavior/plotting/renderers.py +3 -2
- {processbehavior-0.4.0 → processbehavior-0.5.0}/processbehavior/process_behavior.py +59 -44
- {processbehavior-0.4.0 → processbehavior-0.5.0}/processbehavior/result_tabular.py +26 -49
- {processbehavior-0.4.0 → processbehavior-0.5.0}/processbehavior/spc_constants.py +14 -3
- {processbehavior-0.4.0 → processbehavior-0.5.0}/processbehavior/study.py +84 -14
- {processbehavior-0.4.0 → processbehavior-0.5.0}/processbehavior/types.py +18 -4
- processbehavior-0.5.0/tests/fixtures/data/wheeler_cavity_thickness.csv +401 -0
- processbehavior-0.5.0/tests/fixtures/golden_masters/paired_xbar_s/S_data.parquet +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/golden_masters/paired_xbar_s/S_metadata.json +1 -0
- processbehavior-0.5.0/tests/fixtures/golden_masters/paired_xbar_s/Xbar_data.parquet +0 -0
- {processbehavior-0.4.0/tests/fixtures/golden_masters/stratified_uneven → processbehavior-0.5.0/tests/fixtures/golden_masters/paired_xbar_s}/Xbar_metadata.json +1 -0
- processbehavior-0.5.0/tests/fixtures/golden_masters/phased_xbar_s/S_data.parquet +0 -0
- processbehavior-0.5.0/tests/fixtures/golden_masters/phased_xbar_s/S_metadata.json +53 -0
- processbehavior-0.5.0/tests/fixtures/golden_masters/phased_xbar_s/S_statistics.json +7 -0
- processbehavior-0.5.0/tests/fixtures/golden_masters/phased_xbar_s/Xbar_data.parquet +0 -0
- processbehavior-0.5.0/tests/fixtures/golden_masters/phased_xbar_s/Xbar_metadata.json +58 -0
- processbehavior-0.5.0/tests/fixtures/golden_masters/phased_xbar_s/Xbar_statistics.json +7 -0
- processbehavior-0.5.0/tests/fixtures/golden_masters/residual_chart/S_data.parquet +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/golden_masters/residual_chart/S_metadata.json +1 -0
- processbehavior-0.5.0/tests/fixtures/golden_masters/stratified_balanced/S_data.parquet +0 -0
- {processbehavior-0.4.0/tests/fixtures/golden_masters/stratified_uneven → processbehavior-0.5.0/tests/fixtures/golden_masters/stratified_balanced}/S_metadata.json +1 -0
- processbehavior-0.5.0/tests/fixtures/golden_masters/stratified_balanced/Xbar_data.parquet +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/golden_masters/stratified_balanced/Xbar_metadata.json +1 -0
- processbehavior-0.5.0/tests/fixtures/golden_masters/stratified_uneven/S_data.parquet +0 -0
- {processbehavior-0.4.0/tests/fixtures/golden_masters/stratified_balanced → processbehavior-0.5.0/tests/fixtures/golden_masters/stratified_uneven}/S_metadata.json +1 -0
- processbehavior-0.5.0/tests/fixtures/golden_masters/stratified_uneven/Xbar_data.parquet +0 -0
- {processbehavior-0.4.0/tests/fixtures/golden_masters/paired_xbar_s → processbehavior-0.5.0/tests/fixtures/golden_masters/stratified_uneven}/Xbar_metadata.json +1 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_analysis_golden_master.py +17 -0
- processbehavior-0.5.0/tests/test_ordered_categorical_lane_order.py +73 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_phased_limits.py +100 -12
- processbehavior-0.5.0/tests/test_phased_xbar_s.py +536 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_process_behavior.py +119 -15
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_result_tabular.py +97 -3
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_sds_detector.py +6 -4
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_supports_calibration.py +14 -1
- processbehavior-0.5.0/tests/test_xbar_s_helpers.py +153 -0
- processbehavior-0.4.0/tests/fixtures/golden_masters/paired_xbar_s/S_data.parquet +0 -0
- processbehavior-0.4.0/tests/fixtures/golden_masters/paired_xbar_s/Xbar_data.parquet +0 -0
- processbehavior-0.4.0/tests/fixtures/golden_masters/residual_chart/S_data.parquet +0 -0
- processbehavior-0.4.0/tests/fixtures/golden_masters/stratified_balanced/S_data.parquet +0 -0
- processbehavior-0.4.0/tests/fixtures/golden_masters/stratified_balanced/Xbar_data.parquet +0 -0
- processbehavior-0.4.0/tests/fixtures/golden_masters/stratified_uneven/S_data.parquet +0 -0
- processbehavior-0.4.0/tests/fixtures/golden_masters/stratified_uneven/Xbar_data.parquet +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/.gitignore +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/CODE_OF_CONDUCT.md +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/CONTRIBUTING.md +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/LICENSE +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/SECURITY.md +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/examples/README.md +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/processbehavior/analysis_dataset.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/processbehavior/calibration.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/processbehavior/capability.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/processbehavior/datasets/__init__.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/processbehavior/datasets/data/coffee_shop_demo_long.csv +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/processbehavior/datasets/loaders.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/processbehavior/datasets/synthetic.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/processbehavior/derivations.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/processbehavior/effects_calculator.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/processbehavior/exporters/__init__.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/processbehavior/exporters/excel_exporter.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/processbehavior/loss_function.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/processbehavior/maximum_information.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/processbehavior/plotting/__init__.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/processbehavior/plotting/_math.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/processbehavior/plotting/capability_chart.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/processbehavior/plotting/contracts.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/processbehavior/plotting/control_chart.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/processbehavior/plotting/effects_charts.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/processbehavior/plotting/lane_boundaries.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/processbehavior/plotting/limits.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/processbehavior/plotting/maximum_information_chart.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/processbehavior/plotting/report.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/processbehavior/plotting/residuals.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/processbehavior/plotting/run_rules_viz.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/processbehavior/plotting/stats_box.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/processbehavior/plotting/themes.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/processbehavior/plotting/x_axis_layout.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/processbehavior/plotting/zones.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/processbehavior/py.typed +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/processbehavior/residual_calculator.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/processbehavior/result_signals.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/processbehavior/sds_detector.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/processbehavior/series_length.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/processbehavior/signals/__init__.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/processbehavior/signals/config.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/processbehavior/signals/detector.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/processbehavior/signals/detectors.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/processbehavior/signals/result.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/pyproject.toml +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/__init__.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/conftest.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/bishop_analyses/aco_medicare.json +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/bishop_analyses/known_effects_sds_1.json +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/bishop_analyses/pm_inert_sds_1.json +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/bishop_analyses/pm_inert_sds_2.json +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/bishop_analyses/pm_inert_sds_3.json +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/bishop_analyses/pm_inert_sds_4.json +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/bishop_analyses/pm_inert_sds_5.json +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/bishop_analyses/pm_inert_sds_6.json +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/bishop_analyses/pm_sds_1.json +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/bishop_analyses/pm_sds_2.json +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/bishop_analyses/pm_sds_3.json +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/bishop_analyses/pm_sds_4.json +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/bishop_analyses/pm_sds_5.json +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/bishop_analyses/pm_sds_6.json +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/coffee_capability_full_baseline.json +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/data/FILLWEIGHTDATA_800.csv +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/data/coffee_shop_demo_long.csv +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/golden_masters/missing_values/X_data.parquet +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/golden_masters/missing_values/X_metadata.json +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/golden_masters/missing_values/X_statistics.json +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/golden_masters/missing_values/mR_data.parquet +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/golden_masters/missing_values/mR_metadata.json +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/golden_masters/missing_values/mR_statistics.json +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/golden_masters/paired_xbar_s/S_statistics.json +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/golden_masters/paired_xbar_s/Xbar_statistics.json +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/golden_masters/paired_xmr_r/X_data.parquet +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/golden_masters/paired_xmr_r/X_metadata.json +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/golden_masters/paired_xmr_r/X_statistics.json +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/golden_masters/paired_xmr_r/mR_data.parquet +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/golden_masters/paired_xmr_r/mR_metadata.json +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/golden_masters/paired_xmr_r/mR_statistics.json +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/golden_masters/pathological_ordering/X_data.parquet +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/golden_masters/pathological_ordering/X_metadata.json +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/golden_masters/pathological_ordering/X_statistics.json +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/golden_masters/pathological_ordering/mR_data.parquet +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/golden_masters/pathological_ordering/mR_metadata.json +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/golden_masters/pathological_ordering/mR_statistics.json +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/golden_masters/residual_chart/S_statistics.json +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/golden_masters/single_obs_strata/X_data.parquet +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/golden_masters/single_obs_strata/X_metadata.json +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/golden_masters/single_obs_strata/X_statistics.json +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/golden_masters/single_obs_strata/mR_data.parquet +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/golden_masters/single_obs_strata/mR_metadata.json +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/golden_masters/single_obs_strata/mR_statistics.json +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/golden_masters/stratified_balanced/S_statistics.json +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/golden_masters/stratified_balanced/Xbar_statistics.json +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/golden_masters/stratified_uneven/S_statistics.json +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/golden_masters/stratified_uneven/Xbar_statistics.json +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/golden_masters/unstratified_small/X_data.parquet +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/golden_masters/unstratified_small/X_metadata.json +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/golden_masters/unstratified_small/X_statistics.json +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/golden_masters/unstratified_small/mR_data.parquet +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/golden_masters/unstratified_small/mR_metadata.json +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/fixtures/golden_masters/unstratified_small/mR_statistics.json +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_ads3_charts.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_analysis_bugs.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_analysis_dataset.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_analysis_result_contract.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_analysis_specifications.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_api_reference.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_beyond_limits_vectorized.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_bin_extremes.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_bishop_reference.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_by_parameter.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_by_permutations.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_calibration.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_capability.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_capability_chart.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_capability_window.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_chart_availability.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_chart_column_contract.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_chart_parsing.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_control_chart_figure.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_data_preparation.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_datasets.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_derivations.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_derivations_robustness.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_design_state_lineage.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_documented_rule_coverage.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_edge_cases.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_effects_calculator.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_effects_plotting.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_encode_rsg_vectorized.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_excel_export.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_execute_validation.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_focus.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_garbage_character_handling.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_init_cleaning.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_lane_boundaries.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_lane_connectors.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_limits_vectorized.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_loss_function.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_manual_citations.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_maximum_information.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_na_in_factor_columns.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_notebook_ergonomics.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_p0_p2_regressions.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_performance.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_plotting.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_plotting_decorations.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_plotting_hardening.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_plotting_xaxis.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_r2_unavailable.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_r6_effect.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_recentered_mr_fix.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_recentering.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_reference_integrity.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_release_gate_0_1_0_checklist.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_residual_aliases.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_residual_calculator.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_residual_labels.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_residual_scope.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_resolve_by_grouping.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_result_signals.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_sampling_plan.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_sds.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_series_length.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_signal_detectors.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_signal_result_surface.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_signals.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_single_detection.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_solo_mr_residuals.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_spc_constants.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_srp_refactor.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_strata_companion.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_strata_sufficiency.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_stratified_insufficiency.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_synthetic.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_types.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_unequal_subgroups.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_validate_by_parameter.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_vas_chart_constants.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_weco_integration.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_why_not.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_x_axis_layout.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_xbar_residual_center.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_xbar_s_options.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/tests/test_xbar_stratified.py +0 -0
- {processbehavior-0.4.0 → processbehavior-0.5.0}/validation/PBTESTDATABASE_T100.csv +0 -0
|
@@ -7,6 +7,73 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.5.0] - 2026-10-29
|
|
11
|
+
|
|
12
|
+
This release adds staged (phased) Xbar and S charts, computed per stage as Dr. Bishop
|
|
13
|
+
specified (2026-10-18), with `phase_statistics()` for the numbers behind each stage on both
|
|
14
|
+
chart families. A column of values with no time is now charted in the order received.
|
|
15
|
+
|
|
16
|
+
### Added
|
|
17
|
+
- **A bare response is charted in the order received.** `formulate(response=...)` with no time,
|
|
18
|
+
factors or plan used to be refused. The values are now numbered 1..N in an `Observation` column
|
|
19
|
+
(the same numbers as `obs_id`) and the study is exactly the one `time='Observation'` gives: a
|
|
20
|
+
single stream, ADS 2, X/mR, sigma from N − 1 moving ranges. An NA response keeps its place as an
|
|
21
|
+
empty cell. The design report adds `Time: received order (no time column given)`. If the data
|
|
22
|
+
already has an `Observation` column, formulate asks you to pass it as `time=` or rename it (#129).
|
|
23
|
+
- **Phased limits on Xbar and S charts.** `execute(chart='Xbar', phased=True)` gives each factor
|
|
24
|
+
combination its own centre line and limits on one chart, drawn as stepped lines with a divider at
|
|
25
|
+
each change, the way phased X/mR already does for its lanes. Each phase is computed as a separate
|
|
26
|
+
Xbar/S analysis, exactly as `by=[time]` computes one chart per condition: the centre is the mean of
|
|
27
|
+
the phase's subgroup means, with its own S-bar and sigma-hat (10-12 manual Eqs 11-5, 11-8, 11-9,
|
|
28
|
+
11-16, 11-17). `by=['stage', time]` pools the other factors into the subgroup and phases on the
|
|
29
|
+
stage; the centre is then the mean of the pooled subgroup averages, as Dr. Bishop specified
|
|
30
|
+
(2026-10-18). On Wheeler's four-cavity thickness data the per-cavity centres and limits match
|
|
31
|
+
Minitab's staged Xbar-S chart. Residual values, calibrations and `by=[time]` are refused with
|
|
32
|
+
messages that say what to use instead; a phase with no replicated subgroup keeps its points without
|
|
33
|
+
limits and is named in `metadata['insufficient_phases']`. (#144)
|
|
34
|
+
- **`result.phase_statistics(chart, stratum=None)`.** One row per phase of a phased chart. Xbar/S:
|
|
35
|
+
`phase`, `subgroups`, `N`, `center`, `s_bar`, `sigma_hat`, `lpl`, `upl`. X/mR: `phase`, `points`,
|
|
36
|
+
`center`, `mR_bar`, `lpl`, `upl`, per stratum on a stratified chart (`stratum=`, or through
|
|
37
|
+
`focus()`). (#144)
|
|
38
|
+
- **Docs: a Staged Charts tutorial**, executed in CI. On the bundled coffee-shop data, with the
|
|
39
|
+
stage derived by one `.bin()` call, it compares one set of limits with limits per stage on Xbar
|
|
40
|
+
and S, reads `phase_statistics()`, puts every reading on a phased X/mR chart, and pools or splits
|
|
41
|
+
a second factor. The chart-types guide's staged example now runs as written, and its pooling
|
|
42
|
+
example uses a study that has a factor to pool. (#144)
|
|
43
|
+
|
|
44
|
+
### Changed
|
|
45
|
+
- **`formulate(response=..., factors=[])` with no time is the same study.** It used to treat the
|
|
46
|
+
whole column as one replicated cell: ADS 1, a recommended one-point Xbar chart, the "within-cell
|
|
47
|
+
replication" series-length line, and an X chart plotted against the response values. Its chart
|
|
48
|
+
tables now start with `Observation` (#129).
|
|
49
|
+
- **Xbar and S chart data carry `n`.** `get_chart('Xbar')` / `get_chart('S')`, and the Excel chart
|
|
50
|
+
sheets, gain an `n` column after the subgroup label. Unstratified Xbar/S metadata names the label
|
|
51
|
+
column as `group_col` (#143).
|
|
52
|
+
- **Lane dividers on an Xbar or S chart are labelled with the phase.** These charts have no time
|
|
53
|
+
column and so no cell band under the axis, which is where X charts name their lanes. (#144)
|
|
54
|
+
- **Phased chart data and `chart_table` carry a `phase` column** (the lane label) after the subgroup
|
|
55
|
+
label, on X/mR as well as Xbar/S. Phased Xbar/S metadata carries `phase_by`, `lane_boundaries`,
|
|
56
|
+
`single_point_phases` and `insufficient_phases`; `n_avg` is not reported on a phased chart, whose
|
|
57
|
+
`n_mode='average'` is applied per phase, so the per-phase mean size is `phase_statistics(chart)['N']`.
|
|
58
|
+
(#144)
|
|
59
|
+
|
|
60
|
+
### Fixed
|
|
61
|
+
- **Xbar/S `chart_table` keeps the subgroup label and `n` on every `by=`.** With a `by=` other than
|
|
62
|
+
time alone, such as a pooled subset (`by=['FACTOR 1', time]`), all factors, factors without time,
|
|
63
|
+
or one factor, the table dropped both columns, so a row couldn't be traced to its subgroup and
|
|
64
|
+
stepped limits went unexplained. `n` is now the aggregation's own count, which covers every cell
|
|
65
|
+
a pooled subgroup spans. This also corrects one row on residual charts whose limits rest on R2
|
|
66
|
+
(R1, R3, R4, R5) in a design with singletons: the stream's first cell, where R2 is undefined at
|
|
67
|
+
the first value, showed its cell size, not the one-fewer values its S and limits use. Limits,
|
|
68
|
+
centres and statistics are unchanged (#143).
|
|
69
|
+
- **`execute()` no longer documents `phased=True` as requiring `by=[]`.** Stratified phasing of X/mR
|
|
70
|
+
(`by=['factor 1'], phased=True`) has been accepted since 75bcdd1; the docstring never caught up. (#144)
|
|
71
|
+
- **The companion mR of a phased X chart reports `single_point_phases`.** Only the solo mR did. (#144)
|
|
72
|
+
- **X/mR lane order honours an ordered pandas Categorical factor.** A stage column with categories
|
|
73
|
+
`before < after` already ordered the Xbar/S subgroups that way, but the canonical row order sorted
|
|
74
|
+
the raw labels, so X/mR lanes, phases and `strata` came out `after, before`. The canonical sort now
|
|
75
|
+
uses an ordered Categorical's category codes; plain string and numeric factors sort as before. (#144)
|
|
76
|
+
|
|
10
77
|
## [0.4.0] - 2026-10-14
|
|
11
78
|
|
|
12
79
|
This release aligns the library with Bishop's VAS documentation manual dated 10-12-2026 and
|
|
@@ -1114,7 +1181,8 @@ and may change between minor versions until 1.0.
|
|
|
1114
1181
|
- `natsort >= 8.0`
|
|
1115
1182
|
- `plotly >= 5.18, < 7`
|
|
1116
1183
|
|
|
1117
|
-
[Unreleased]: https://github.com/cnicholas/processbehavior/compare/v0.
|
|
1184
|
+
[Unreleased]: https://github.com/cnicholas/processbehavior/compare/v0.5.0...HEAD
|
|
1185
|
+
[0.5.0]: https://github.com/cnicholas/processbehavior/compare/v0.4.0...v0.5.0
|
|
1118
1186
|
[0.4.0]: https://github.com/cnicholas/processbehavior/compare/v0.3.3...v0.4.0
|
|
1119
1187
|
[0.3.3]: https://github.com/cnicholas/processbehavior/compare/v0.3.2...v0.3.3
|
|
1120
1188
|
[0.3.2]: https://github.com/cnicholas/processbehavior/compare/v0.3.1...v0.3.2
|
|
@@ -17,7 +17,7 @@ authors:
|
|
|
17
17
|
repository-code: "https://github.com/cnicholas/processbehavior"
|
|
18
18
|
url: "https://cnicholas.github.io/processbehavior/"
|
|
19
19
|
license: Apache-2.0
|
|
20
|
-
version: 0.
|
|
20
|
+
version: 0.5.0
|
|
21
21
|
keywords:
|
|
22
22
|
- statistical process control
|
|
23
23
|
- process behavior charts
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: processbehavior
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.5.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
|
|
@@ -108,6 +108,22 @@ pip install "processbehavior[images]" # kaleido, for static plot images
|
|
|
108
108
|
|
|
109
109
|
## Quickstart
|
|
110
110
|
|
|
111
|
+
A column of values, charted in the order received, is an X/mR chart in two calls:
|
|
112
|
+
|
|
113
|
+
```python
|
|
114
|
+
import pandas as pd
|
|
115
|
+
import processbehavior as pb
|
|
116
|
+
|
|
117
|
+
df = pd.DataFrame({'weight': [50.2, 49.8, 50.5, 50.1, 49.6, 50.9, 50.3, 49.9, 50.4, 50.0, 49.7, 50.6]})
|
|
118
|
+
|
|
119
|
+
study = pb.formulate(df, response='weight') # no time column: rows are numbered 1..N as 'Observation'
|
|
120
|
+
result = study.execute(companion=True) # X chart with its mR companion
|
|
121
|
+
print(result.statistics('X')) # {'N': 1, 'center': 50.167, 'lpl': 48.619, 'upl': 51.714}
|
|
122
|
+
result.plot()
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
When the data has a time order, factors, or both, name them. The design state routes the analysis:
|
|
126
|
+
|
|
111
127
|
```python
|
|
112
128
|
import processbehavior as pb
|
|
113
129
|
|
|
@@ -149,6 +165,20 @@ The whole pipeline is one expression when you don't need the intermediate object
|
|
|
149
165
|
pb.formulate(df, response='y', factors=['factor 1'], time='time').execute().plot()
|
|
150
166
|
```
|
|
151
167
|
|
|
168
|
+
A process that changed on purpose gets its own limits for each stage with `phased=True`:
|
|
169
|
+
|
|
170
|
+
```python
|
|
171
|
+
import processbehavior as pb
|
|
172
|
+
|
|
173
|
+
# The bundled coffee-shop data: a new machine in week 8, a new POS in week 12, new baristas from week 14
|
|
174
|
+
pbd = pb.load_coffee_shop().bin('week', method='breaks', breaks=[8, 12, 14],
|
|
175
|
+
bin_labels=['baseline', 'new machine', 'new POS', 'new baristas'],
|
|
176
|
+
label='stage')
|
|
177
|
+
staged = pbd.formulate(response='wait_sec', factors=['stage'], time='date').execute(chart='Xbar', phased=True, companion=True)
|
|
178
|
+
staged.phase_statistics('Xbar') # one row per stage: center, S-bar, sigma-hat, limits
|
|
179
|
+
staged.plot(chart='Xbar', title='Wait time: limits per stage')
|
|
180
|
+
```
|
|
181
|
+
|
|
152
182
|
Use `pb.ProcessBehavior(df)` directly when you want the fluent derived-variable verbs
|
|
153
183
|
(`.transform(...)`, `.bin(...)`), which attach before formulating. With that object in hand,
|
|
154
184
|
`pbd.cols.<column_name>` provides IDE auto-completion for column references.
|
|
@@ -251,6 +281,7 @@ The full report renders to `validation/e2e_bishop_report.html`.
|
|
|
251
281
|
- **Variance decomposition**: R1-R6 residuals for factorial designs
|
|
252
282
|
- **Effects analysis**: Main effects, time effects, and interaction effects
|
|
253
283
|
- **Stratified charts**: Automatic per-stratum limits for grouped individual data
|
|
284
|
+
- **Staged charts**: `phased=True` gives each stage its own center and limits on X/mR and Xbar/S; `phase_statistics()` returns the numbers behind the steps
|
|
254
285
|
- **Signal detection**: all eight Western Electric rules on X/mR; Rule 1 (3-sigma) on Xbar/S, where the run- and zone-based rules need a time order that subgroup comparisons don't have
|
|
255
286
|
- **Beyond the charts**: capability indices (Cp/Cpk/Pp/Ppk), Taguchi loss decomposition, and maximum-information analysis — validated in the same Bishop-reference CI gate
|
|
256
287
|
- **IDE support**: Column auto-completion via `ProcessBehavior(df).cols`
|
|
@@ -25,6 +25,22 @@ pip install "processbehavior[images]" # kaleido, for static plot images
|
|
|
25
25
|
|
|
26
26
|
## Quickstart
|
|
27
27
|
|
|
28
|
+
A column of values, charted in the order received, is an X/mR chart in two calls:
|
|
29
|
+
|
|
30
|
+
```python
|
|
31
|
+
import pandas as pd
|
|
32
|
+
import processbehavior as pb
|
|
33
|
+
|
|
34
|
+
df = pd.DataFrame({'weight': [50.2, 49.8, 50.5, 50.1, 49.6, 50.9, 50.3, 49.9, 50.4, 50.0, 49.7, 50.6]})
|
|
35
|
+
|
|
36
|
+
study = pb.formulate(df, response='weight') # no time column: rows are numbered 1..N as 'Observation'
|
|
37
|
+
result = study.execute(companion=True) # X chart with its mR companion
|
|
38
|
+
print(result.statistics('X')) # {'N': 1, 'center': 50.167, 'lpl': 48.619, 'upl': 51.714}
|
|
39
|
+
result.plot()
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
When the data has a time order, factors, or both, name them. The design state routes the analysis:
|
|
43
|
+
|
|
28
44
|
```python
|
|
29
45
|
import processbehavior as pb
|
|
30
46
|
|
|
@@ -66,6 +82,20 @@ The whole pipeline is one expression when you don't need the intermediate object
|
|
|
66
82
|
pb.formulate(df, response='y', factors=['factor 1'], time='time').execute().plot()
|
|
67
83
|
```
|
|
68
84
|
|
|
85
|
+
A process that changed on purpose gets its own limits for each stage with `phased=True`:
|
|
86
|
+
|
|
87
|
+
```python
|
|
88
|
+
import processbehavior as pb
|
|
89
|
+
|
|
90
|
+
# The bundled coffee-shop data: a new machine in week 8, a new POS in week 12, new baristas from week 14
|
|
91
|
+
pbd = pb.load_coffee_shop().bin('week', method='breaks', breaks=[8, 12, 14],
|
|
92
|
+
bin_labels=['baseline', 'new machine', 'new POS', 'new baristas'],
|
|
93
|
+
label='stage')
|
|
94
|
+
staged = pbd.formulate(response='wait_sec', factors=['stage'], time='date').execute(chart='Xbar', phased=True, companion=True)
|
|
95
|
+
staged.phase_statistics('Xbar') # one row per stage: center, S-bar, sigma-hat, limits
|
|
96
|
+
staged.plot(chart='Xbar', title='Wait time: limits per stage')
|
|
97
|
+
```
|
|
98
|
+
|
|
69
99
|
Use `pb.ProcessBehavior(df)` directly when you want the fluent derived-variable verbs
|
|
70
100
|
(`.transform(...)`, `.bin(...)`), which attach before formulating. With that object in hand,
|
|
71
101
|
`pbd.cols.<column_name>` provides IDE auto-completion for column references.
|
|
@@ -168,6 +198,7 @@ The full report renders to `validation/e2e_bishop_report.html`.
|
|
|
168
198
|
- **Variance decomposition**: R1-R6 residuals for factorial designs
|
|
169
199
|
- **Effects analysis**: Main effects, time effects, and interaction effects
|
|
170
200
|
- **Stratified charts**: Automatic per-stratum limits for grouped individual data
|
|
201
|
+
- **Staged charts**: `phased=True` gives each stage its own center and limits on X/mR and Xbar/S; `phase_statistics()` returns the numbers behind the steps
|
|
171
202
|
- **Signal detection**: all eight Western Electric rules on X/mR; Rule 1 (3-sigma) on Xbar/S, where the run- and zone-based rules need a time order that subgroup comparisons don't have
|
|
172
203
|
- **Beyond the charts**: capability indices (Cp/Cpk/Pp/Ppk), Taguchi loss decomposition, and maximum-information analysis — validated in the same Bishop-reference CI gate
|
|
173
204
|
- **IDE support**: Column auto-completion via `ProcessBehavior(df).cols`
|
|
@@ -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.5.0'
|
|
51
51
|
|
|
52
52
|
# Result object
|
|
53
53
|
from processbehavior.analysis_result import AnalysisResult
|