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.
- {processbehavior-0.2.0 → processbehavior-0.2.1}/CHANGELOG.md +59 -1
- {processbehavior-0.2.0 → processbehavior-0.2.1}/CONTRIBUTING.md +7 -3
- {processbehavior-0.2.0 → processbehavior-0.2.1}/PKG-INFO +2 -1
- {processbehavior-0.2.0 → processbehavior-0.2.1}/README.md +1 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/SECURITY.md +4 -4
- {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/__init__.py +1 -1
- {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/analysis_result.py +6 -1
- {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/datasets/__init__.py +0 -10
- {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/datasets/synthetic.py +6 -664
- {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/exporters/excel_exporter.py +2 -92
- {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/loss_function.py +5 -8
- {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/plotting/plotter.py +0 -11
- {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/sds_detector.py +1 -74
- {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/signals/config.py +5 -1
- {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/signals/detector.py +55 -21
- {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/signals/result.py +84 -11
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/conftest.py +0 -28
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_documented_rule_coverage.py +30 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_excel_export.py +95 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_garbage_character_handling.py +14 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_loss_function.py +30 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_plotting.py +84 -0
- processbehavior-0.2.1/tests/test_reference_integrity.py +56 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_sds_detector.py +89 -0
- processbehavior-0.2.1/tests/test_signal_result_surface.py +159 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_signals.py +76 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_synthetic.py +101 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/.gitignore +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/CITATION.cff +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/CODE_OF_CONDUCT.md +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/LICENSE +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/examples/README.md +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/analysis.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/analysis_dataset.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/calibration.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/capability.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/data_preparation.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/datasets/data/coffee_shop_demo_long.csv +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/datasets/loaders.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/derivations.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/effects_calculator.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/exceptions.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/exporters/__init__.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/focused_result.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/formulation_spec.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/maximum_information.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/plotting/__init__.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/plotting/_math.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/plotting/capability_chart.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/plotting/contracts.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/plotting/control_chart.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/plotting/effects_charts.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/plotting/lane_boundaries.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/plotting/limits.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/plotting/maximum_information_chart.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/plotting/renderers.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/plotting/report.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/plotting/residuals.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/plotting/run_rules_viz.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/plotting/stats_box.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/plotting/themes.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/plotting/x_axis_layout.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/plotting/zones.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/process_behavior.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/py.typed +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/residual_calculator.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/result_signals.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/result_tabular.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/signals/__init__.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/signals/detectors.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/spc_constants.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/study.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/processbehavior/types.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/pyproject.toml +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/__init__.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/bishop_analyses/vassds1analysis.json +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/bishop_analyses/vassds2analysis.json +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/bishop_analyses/vassds3analysis.json +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/coffee_capability_full_baseline.json +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/data/FILLWEIGHTDATA_800.csv +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/data/coffee_shop_demo_long.csv +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/missing_values/X_data.parquet +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/missing_values/X_metadata.json +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/missing_values/X_statistics.json +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/missing_values/mR_data.parquet +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/missing_values/mR_metadata.json +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/missing_values/mR_statistics.json +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/paired_xbar_s/S_data.parquet +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/paired_xbar_s/S_metadata.json +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/paired_xbar_s/S_statistics.json +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/paired_xbar_s/Xbar_data.parquet +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/paired_xbar_s/Xbar_metadata.json +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/paired_xbar_s/Xbar_statistics.json +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/paired_xmr_r/X_data.parquet +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/paired_xmr_r/X_metadata.json +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/paired_xmr_r/X_statistics.json +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/paired_xmr_r/mR_data.parquet +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/paired_xmr_r/mR_metadata.json +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/paired_xmr_r/mR_statistics.json +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/pathological_ordering/X_data.parquet +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/pathological_ordering/X_metadata.json +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/pathological_ordering/X_statistics.json +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/pathological_ordering/mR_data.parquet +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/pathological_ordering/mR_metadata.json +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/pathological_ordering/mR_statistics.json +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/residual_chart/S_data.parquet +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/residual_chart/S_metadata.json +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/residual_chart/S_statistics.json +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/single_obs_strata/X_data.parquet +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/single_obs_strata/X_metadata.json +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/single_obs_strata/X_statistics.json +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/single_obs_strata/mR_data.parquet +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/single_obs_strata/mR_metadata.json +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/single_obs_strata/mR_statistics.json +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/stratified_balanced/S_data.parquet +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/stratified_balanced/S_metadata.json +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/stratified_balanced/S_statistics.json +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/stratified_balanced/Xbar_data.parquet +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/stratified_balanced/Xbar_metadata.json +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/stratified_balanced/Xbar_statistics.json +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/stratified_uneven/S_data.parquet +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/stratified_uneven/S_metadata.json +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/stratified_uneven/S_statistics.json +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/stratified_uneven/Xbar_data.parquet +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/stratified_uneven/Xbar_metadata.json +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/stratified_uneven/Xbar_statistics.json +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/unstratified_small/X_data.parquet +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/unstratified_small/X_metadata.json +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/unstratified_small/X_statistics.json +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/unstratified_small/mR_data.parquet +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/unstratified_small/mR_metadata.json +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/fixtures/golden_masters/unstratified_small/mR_statistics.json +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_analysis_bugs.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_analysis_dataset.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_analysis_golden_master.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_analysis_result_contract.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_analysis_specifications.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_api_reference.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_beyond_limits_vectorized.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_bin_extremes.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_bishop_reference.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_by_parameter.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_by_permutations.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_calibration.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_capability.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_capability_chart.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_capability_window.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_chart_availability.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_chart_column_contract.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_chart_parsing.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_control_chart_figure.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_data_preparation.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_datasets.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_derivations.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_design_state_lineage.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_edge_cases.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_effects_calculator.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_effects_plotting.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_encode_rsg_vectorized.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_execute_validation.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_focus.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_init_cleaning.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_lane_boundaries.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_limits_vectorized.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_maximum_information.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_notebook_ergonomics.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_p0_p2_regressions.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_performance.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_phased_limits.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_plotting_decorations.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_plotting_hardening.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_plotting_xaxis.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_process_behavior.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_recentered_mr_fix.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_release_gate_0_1_0_checklist.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_residual_aliases.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_residual_calculator.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_residual_labels.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_residual_scope.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_resolve_by_grouping.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_result_signals.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_result_tabular.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_sampling_plan.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_sds.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_signal_detectors.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_single_detection.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_solo_mr_residuals.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_spc_constants.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_srp_refactor.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_strata_companion.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_strata_sufficiency.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_stratified_insufficiency.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_supports_calibration.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_types.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_validate_by_parameter.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_weco_integration.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_why_not.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_x_axis_layout.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_xbar_residual_center.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_xbar_s_options.py +0 -0
- {processbehavior-0.2.0 → processbehavior-0.2.1}/tests/test_xbar_stratified.py +0 -0
- {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.
|
|
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.
|
|
168
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
[](https://pypi.org/project/processbehavior/)
|
|
87
87
|
[](https://pypi.org/project/processbehavior/)
|
|
88
88
|
[](https://github.com/cnicholas/processbehavior/actions/workflows/ci.yml)
|
|
89
|
+
[](https://codecov.io/gh/cnicholas/processbehavior)
|
|
89
90
|
[](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
|
[](https://pypi.org/project/processbehavior/)
|
|
4
4
|
[](https://pypi.org/project/processbehavior/)
|
|
5
5
|
[](https://github.com/cnicholas/processbehavior/actions/workflows/ci.yml)
|
|
6
|
+
[](https://codecov.io/gh/cnicholas/processbehavior)
|
|
6
7
|
[](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
|
|
6
|
-
|
|
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.
|
|
11
|
-
| < 0.
|
|
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.
|
|
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
|
]
|