processbehavior 0.2.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. processbehavior/__init__.py +133 -0
  2. processbehavior/analysis.py +2944 -0
  3. processbehavior/analysis_dataset.py +361 -0
  4. processbehavior/analysis_result.py +1276 -0
  5. processbehavior/calibration.py +70 -0
  6. processbehavior/capability.py +720 -0
  7. processbehavior/data_preparation.py +792 -0
  8. processbehavior/datasets/__init__.py +37 -0
  9. processbehavior/datasets/data/coffee_shop_demo_long.csv +385 -0
  10. processbehavior/datasets/loaders.py +66 -0
  11. processbehavior/datasets/synthetic.py +1711 -0
  12. processbehavior/derivations.py +602 -0
  13. processbehavior/effects_calculator.py +603 -0
  14. processbehavior/exceptions.py +216 -0
  15. processbehavior/exporters/__init__.py +5 -0
  16. processbehavior/exporters/excel_exporter.py +708 -0
  17. processbehavior/focused_result.py +329 -0
  18. processbehavior/formulation_spec.py +144 -0
  19. processbehavior/loss_function.py +517 -0
  20. processbehavior/maximum_information.py +285 -0
  21. processbehavior/plotting/__init__.py +46 -0
  22. processbehavior/plotting/_math.py +121 -0
  23. processbehavior/plotting/capability_chart.py +858 -0
  24. processbehavior/plotting/contracts.py +176 -0
  25. processbehavior/plotting/control_chart.py +206 -0
  26. processbehavior/plotting/effects_charts.py +640 -0
  27. processbehavior/plotting/lane_boundaries.py +78 -0
  28. processbehavior/plotting/limits.py +157 -0
  29. processbehavior/plotting/maximum_information_chart.py +395 -0
  30. processbehavior/plotting/plotter.py +1469 -0
  31. processbehavior/plotting/renderers.py +660 -0
  32. processbehavior/plotting/report.py +211 -0
  33. processbehavior/plotting/residuals.py +282 -0
  34. processbehavior/plotting/run_rules_viz.py +150 -0
  35. processbehavior/plotting/stats_box.py +183 -0
  36. processbehavior/plotting/themes.py +544 -0
  37. processbehavior/plotting/x_axis_layout.py +474 -0
  38. processbehavior/plotting/zones.py +127 -0
  39. processbehavior/process_behavior.py +1290 -0
  40. processbehavior/py.typed +0 -0
  41. processbehavior/residual_calculator.py +572 -0
  42. processbehavior/result_signals.py +149 -0
  43. processbehavior/result_tabular.py +296 -0
  44. processbehavior/sds_detector.py +1432 -0
  45. processbehavior/signals/__init__.py +14 -0
  46. processbehavior/signals/config.py +435 -0
  47. processbehavior/signals/detector.py +328 -0
  48. processbehavior/signals/detectors.py +368 -0
  49. processbehavior/signals/result.py +232 -0
  50. processbehavior/spc_constants.py +692 -0
  51. processbehavior/study.py +2733 -0
  52. processbehavior/types.py +154 -0
  53. processbehavior-0.2.0.dist-info/METADATA +279 -0
  54. processbehavior-0.2.0.dist-info/RECORD +56 -0
  55. processbehavior-0.2.0.dist-info/WHEEL +4 -0
  56. processbehavior-0.2.0.dist-info/licenses/LICENSE +201 -0
@@ -0,0 +1,37 @@
1
+ """
2
+ Data generation and loading utilities for processbehavior package.
3
+ """
4
+
5
+ from __future__ import annotations
6
+
7
+ from .loaders import load_coffee_shop
8
+ from .synthetic import (
9
+ compare_sds_characteristics,
10
+ generate_test_suite,
11
+ get_sds_info,
12
+ make_design,
13
+ make_edge_cases,
14
+ make_sds1,
15
+ make_sds2,
16
+ make_sds3,
17
+ make_sds4,
18
+ make_sds5,
19
+ make_sds6,
20
+ print_sds_summary,
21
+ )
22
+
23
+ __all__ = [
24
+ 'make_sds1',
25
+ 'make_sds2',
26
+ 'make_sds3',
27
+ 'make_sds4',
28
+ 'make_sds5',
29
+ 'make_sds6',
30
+ 'make_design',
31
+ 'make_edge_cases',
32
+ 'load_coffee_shop',
33
+ 'compare_sds_characteristics',
34
+ 'generate_test_suite',
35
+ 'get_sds_info',
36
+ 'print_sds_summary',
37
+ ]
@@ -0,0 +1,385 @@
1
+ date,year_week,week,day_of_week,hour,daypart,wait_sec
2
+ 2026-01-05,2026-W01,1,Mon,8,Peak,239
3
+ 2026-01-05,2026-W01,1,Mon,10,Off-peak,225
4
+ 2026-01-05,2026-W01,1,Mon,13,Peak,234
5
+ 2026-01-05,2026-W01,1,Mon,16,Off-peak,218
6
+ 2026-01-06,2026-W01,1,Tue,8,Peak,241
7
+ 2026-01-06,2026-W01,1,Tue,10,Off-peak,227
8
+ 2026-01-06,2026-W01,1,Tue,13,Peak,252
9
+ 2026-01-06,2026-W01,1,Tue,16,Off-peak,209
10
+ 2026-01-07,2026-W01,1,Wed,8,Peak,263
11
+ 2026-01-07,2026-W01,1,Wed,10,Off-peak,240
12
+ 2026-01-07,2026-W01,1,Wed,13,Peak,269
13
+ 2026-01-07,2026-W01,1,Wed,16,Off-peak,238
14
+ 2026-01-08,2026-W01,1,Thu,8,Peak,278
15
+ 2026-01-08,2026-W01,1,Thu,10,Off-peak,239
16
+ 2026-01-08,2026-W01,1,Thu,13,Peak,264
17
+ 2026-01-08,2026-W01,1,Thu,16,Off-peak,227
18
+ 2026-01-09,2026-W01,1,Fri,8,Peak,273
19
+ 2026-01-09,2026-W01,1,Fri,10,Off-peak,238
20
+ 2026-01-09,2026-W01,1,Fri,13,Peak,269
21
+ 2026-01-09,2026-W01,1,Fri,16,Off-peak,231
22
+ 2026-01-10,2026-W01,1,Sat,8,Peak,238
23
+ 2026-01-10,2026-W01,1,Sat,10,Off-peak,213
24
+ 2026-01-10,2026-W01,1,Sat,13,Peak,263
25
+ 2026-01-10,2026-W01,1,Sat,16,Off-peak,215
26
+ 2026-01-12,2026-W02,2,Mon,8,Peak,249
27
+ 2026-01-12,2026-W02,2,Mon,10,Off-peak,242
28
+ 2026-01-12,2026-W02,2,Mon,13,Peak,242
29
+ 2026-01-12,2026-W02,2,Mon,16,Off-peak,225
30
+ 2026-01-13,2026-W02,2,Tue,8,Peak,261
31
+ 2026-01-13,2026-W02,2,Tue,10,Off-peak,218
32
+ 2026-01-13,2026-W02,2,Tue,13,Peak,242
33
+ 2026-01-13,2026-W02,2,Tue,16,Off-peak,233
34
+ 2026-01-14,2026-W02,2,Wed,8,Peak,243
35
+ 2026-01-14,2026-W02,2,Wed,10,Off-peak,229
36
+ 2026-01-14,2026-W02,2,Wed,13,Peak,253
37
+ 2026-01-14,2026-W02,2,Wed,16,Off-peak,227
38
+ 2026-01-15,2026-W02,2,Thu,8,Peak,230
39
+ 2026-01-15,2026-W02,2,Thu,10,Off-peak,237
40
+ 2026-01-15,2026-W02,2,Thu,13,Peak,233
41
+ 2026-01-15,2026-W02,2,Thu,16,Off-peak,198
42
+ 2026-01-16,2026-W02,2,Fri,8,Peak,257
43
+ 2026-01-16,2026-W02,2,Fri,10,Off-peak,234
44
+ 2026-01-16,2026-W02,2,Fri,13,Peak,245
45
+ 2026-01-16,2026-W02,2,Fri,16,Off-peak,233
46
+ 2026-01-17,2026-W02,2,Sat,8,Peak,272
47
+ 2026-01-17,2026-W02,2,Sat,10,Off-peak,209
48
+ 2026-01-17,2026-W02,2,Sat,13,Peak,274
49
+ 2026-01-17,2026-W02,2,Sat,16,Off-peak,245
50
+ 2026-01-19,2026-W03,3,Mon,8,Peak,257
51
+ 2026-01-19,2026-W03,3,Mon,10,Off-peak,195
52
+ 2026-01-19,2026-W03,3,Mon,13,Peak,274
53
+ 2026-01-19,2026-W03,3,Mon,16,Off-peak,230
54
+ 2026-01-20,2026-W03,3,Tue,8,Peak,273
55
+ 2026-01-20,2026-W03,3,Tue,10,Off-peak,232
56
+ 2026-01-20,2026-W03,3,Tue,13,Peak,256
57
+ 2026-01-20,2026-W03,3,Tue,16,Off-peak,215
58
+ 2026-01-21,2026-W03,3,Wed,8,Peak,284
59
+ 2026-01-21,2026-W03,3,Wed,10,Off-peak,232
60
+ 2026-01-21,2026-W03,3,Wed,13,Peak,247
61
+ 2026-01-21,2026-W03,3,Wed,16,Off-peak,216
62
+ 2026-01-22,2026-W03,3,Thu,8,Peak,262
63
+ 2026-01-22,2026-W03,3,Thu,10,Off-peak,202
64
+ 2026-01-22,2026-W03,3,Thu,13,Peak,241
65
+ 2026-01-22,2026-W03,3,Thu,16,Off-peak,222
66
+ 2026-01-23,2026-W03,3,Fri,8,Peak,267
67
+ 2026-01-23,2026-W03,3,Fri,10,Off-peak,207
68
+ 2026-01-23,2026-W03,3,Fri,13,Peak,264
69
+ 2026-01-23,2026-W03,3,Fri,16,Off-peak,225
70
+ 2026-01-24,2026-W03,3,Sat,8,Peak,274
71
+ 2026-01-24,2026-W03,3,Sat,10,Off-peak,200
72
+ 2026-01-24,2026-W03,3,Sat,13,Peak,242
73
+ 2026-01-24,2026-W03,3,Sat,16,Off-peak,231
74
+ 2026-01-26,2026-W04,4,Mon,8,Peak,278
75
+ 2026-01-26,2026-W04,4,Mon,10,Off-peak,200
76
+ 2026-01-26,2026-W04,4,Mon,13,Peak,265
77
+ 2026-01-26,2026-W04,4,Mon,16,Off-peak,235
78
+ 2026-01-27,2026-W04,4,Tue,8,Peak,237
79
+ 2026-01-27,2026-W04,4,Tue,10,Off-peak,214
80
+ 2026-01-27,2026-W04,4,Tue,13,Peak,245
81
+ 2026-01-27,2026-W04,4,Tue,16,Off-peak,232
82
+ 2026-01-28,2026-W04,4,Wed,8,Peak,257
83
+ 2026-01-28,2026-W04,4,Wed,10,Off-peak,230
84
+ 2026-01-28,2026-W04,4,Wed,13,Peak,263
85
+ 2026-01-28,2026-W04,4,Wed,16,Off-peak,211
86
+ 2026-01-29,2026-W04,4,Thu,8,Peak,273
87
+ 2026-01-29,2026-W04,4,Thu,10,Off-peak,210
88
+ 2026-01-29,2026-W04,4,Thu,13,Peak,233
89
+ 2026-01-29,2026-W04,4,Thu,16,Off-peak,221
90
+ 2026-01-30,2026-W04,4,Fri,8,Peak,258
91
+ 2026-01-30,2026-W04,4,Fri,10,Off-peak,212
92
+ 2026-01-30,2026-W04,4,Fri,13,Peak,280
93
+ 2026-01-30,2026-W04,4,Fri,16,Off-peak,253
94
+ 2026-01-31,2026-W04,4,Sat,8,Peak,262
95
+ 2026-01-31,2026-W04,4,Sat,10,Off-peak,234
96
+ 2026-01-31,2026-W04,4,Sat,13,Peak,240
97
+ 2026-01-31,2026-W04,4,Sat,16,Off-peak,196
98
+ 2026-02-02,2026-W05,5,Mon,8,Peak,245
99
+ 2026-02-02,2026-W05,5,Mon,10,Off-peak,217
100
+ 2026-02-02,2026-W05,5,Mon,13,Peak,268
101
+ 2026-02-02,2026-W05,5,Mon,16,Off-peak,232
102
+ 2026-02-03,2026-W05,5,Tue,8,Peak,275
103
+ 2026-02-03,2026-W05,5,Tue,10,Off-peak,222
104
+ 2026-02-03,2026-W05,5,Tue,13,Peak,277
105
+ 2026-02-03,2026-W05,5,Tue,16,Off-peak,225
106
+ 2026-02-04,2026-W05,5,Wed,8,Peak,261
107
+ 2026-02-04,2026-W05,5,Wed,10,Off-peak,232
108
+ 2026-02-04,2026-W05,5,Wed,13,Peak,290
109
+ 2026-02-04,2026-W05,5,Wed,16,Off-peak,216
110
+ 2026-02-05,2026-W05,5,Thu,8,Peak,271
111
+ 2026-02-05,2026-W05,5,Thu,10,Off-peak,233
112
+ 2026-02-05,2026-W05,5,Thu,13,Peak,262
113
+ 2026-02-05,2026-W05,5,Thu,16,Off-peak,250
114
+ 2026-02-06,2026-W05,5,Fri,8,Peak,236
115
+ 2026-02-06,2026-W05,5,Fri,10,Off-peak,227
116
+ 2026-02-06,2026-W05,5,Fri,13,Peak,258
117
+ 2026-02-06,2026-W05,5,Fri,16,Off-peak,209
118
+ 2026-02-07,2026-W05,5,Sat,8,Peak,277
119
+ 2026-02-07,2026-W05,5,Sat,10,Off-peak,210
120
+ 2026-02-07,2026-W05,5,Sat,13,Peak,265
121
+ 2026-02-07,2026-W05,5,Sat,16,Off-peak,229
122
+ 2026-02-09,2026-W06,6,Mon,8,Peak,264
123
+ 2026-02-09,2026-W06,6,Mon,10,Off-peak,224
124
+ 2026-02-09,2026-W06,6,Mon,13,Peak,273
125
+ 2026-02-09,2026-W06,6,Mon,16,Off-peak,191
126
+ 2026-02-10,2026-W06,6,Tue,8,Peak,271
127
+ 2026-02-10,2026-W06,6,Tue,10,Off-peak,226
128
+ 2026-02-10,2026-W06,6,Tue,13,Peak,267
129
+ 2026-02-10,2026-W06,6,Tue,16,Off-peak,212
130
+ 2026-02-11,2026-W06,6,Wed,8,Peak,230
131
+ 2026-02-11,2026-W06,6,Wed,10,Off-peak,221
132
+ 2026-02-11,2026-W06,6,Wed,13,Peak,268
133
+ 2026-02-11,2026-W06,6,Wed,16,Off-peak,236
134
+ 2026-02-12,2026-W06,6,Thu,8,Peak,241
135
+ 2026-02-12,2026-W06,6,Thu,10,Off-peak,215
136
+ 2026-02-12,2026-W06,6,Thu,13,Peak,249
137
+ 2026-02-12,2026-W06,6,Thu,16,Off-peak,186
138
+ 2026-02-13,2026-W06,6,Fri,8,Peak,246
139
+ 2026-02-13,2026-W06,6,Fri,10,Off-peak,248
140
+ 2026-02-13,2026-W06,6,Fri,13,Peak,262
141
+ 2026-02-13,2026-W06,6,Fri,16,Off-peak,202
142
+ 2026-02-14,2026-W06,6,Sat,8,Peak,273
143
+ 2026-02-14,2026-W06,6,Sat,10,Off-peak,256
144
+ 2026-02-14,2026-W06,6,Sat,13,Peak,305
145
+ 2026-02-14,2026-W06,6,Sat,16,Off-peak,231
146
+ 2026-02-16,2026-W07,7,Mon,8,Peak,264
147
+ 2026-02-16,2026-W07,7,Mon,10,Off-peak,204
148
+ 2026-02-16,2026-W07,7,Mon,13,Peak,258
149
+ 2026-02-16,2026-W07,7,Mon,16,Off-peak,205
150
+ 2026-02-17,2026-W07,7,Tue,8,Peak,282
151
+ 2026-02-17,2026-W07,7,Tue,10,Off-peak,210
152
+ 2026-02-17,2026-W07,7,Tue,13,Peak,278
153
+ 2026-02-17,2026-W07,7,Tue,16,Off-peak,231
154
+ 2026-02-18,2026-W07,7,Wed,8,Peak,268
155
+ 2026-02-18,2026-W07,7,Wed,10,Off-peak,224
156
+ 2026-02-18,2026-W07,7,Wed,13,Peak,247
157
+ 2026-02-18,2026-W07,7,Wed,16,Off-peak,232
158
+ 2026-02-19,2026-W07,7,Thu,8,Peak,269
159
+ 2026-02-19,2026-W07,7,Thu,10,Off-peak,242
160
+ 2026-02-19,2026-W07,7,Thu,13,Peak,257
161
+ 2026-02-19,2026-W07,7,Thu,16,Off-peak,209
162
+ 2026-02-20,2026-W07,7,Fri,8,Peak,271
163
+ 2026-02-20,2026-W07,7,Fri,10,Off-peak,212
164
+ 2026-02-20,2026-W07,7,Fri,13,Peak,263
165
+ 2026-02-20,2026-W07,7,Fri,16,Off-peak,208
166
+ 2026-02-21,2026-W07,7,Sat,8,Peak,271
167
+ 2026-02-21,2026-W07,7,Sat,10,Off-peak,223
168
+ 2026-02-21,2026-W07,7,Sat,13,Peak,253
169
+ 2026-02-21,2026-W07,7,Sat,16,Off-peak,245
170
+ 2026-02-23,2026-W08,8,Mon,8,Peak,197
171
+ 2026-02-23,2026-W08,8,Mon,10,Off-peak,180
172
+ 2026-02-23,2026-W08,8,Mon,13,Peak,216
173
+ 2026-02-23,2026-W08,8,Mon,16,Off-peak,192
174
+ 2026-02-24,2026-W08,8,Tue,8,Peak,223
175
+ 2026-02-24,2026-W08,8,Tue,10,Off-peak,192
176
+ 2026-02-24,2026-W08,8,Tue,13,Peak,212
177
+ 2026-02-24,2026-W08,8,Tue,16,Off-peak,179
178
+ 2026-02-25,2026-W08,8,Wed,8,Peak,210
179
+ 2026-02-25,2026-W08,8,Wed,10,Off-peak,172
180
+ 2026-02-25,2026-W08,8,Wed,13,Peak,178
181
+ 2026-02-25,2026-W08,8,Wed,16,Off-peak,204
182
+ 2026-02-26,2026-W08,8,Thu,8,Peak,234
183
+ 2026-02-26,2026-W08,8,Thu,10,Off-peak,157
184
+ 2026-02-26,2026-W08,8,Thu,13,Peak,211
185
+ 2026-02-26,2026-W08,8,Thu,16,Off-peak,206
186
+ 2026-02-27,2026-W08,8,Fri,8,Peak,220
187
+ 2026-02-27,2026-W08,8,Fri,10,Off-peak,188
188
+ 2026-02-27,2026-W08,8,Fri,13,Peak,224
189
+ 2026-02-27,2026-W08,8,Fri,16,Off-peak,212
190
+ 2026-02-28,2026-W08,8,Sat,8,Peak,203
191
+ 2026-02-28,2026-W08,8,Sat,10,Off-peak,182
192
+ 2026-02-28,2026-W08,8,Sat,13,Peak,205
193
+ 2026-02-28,2026-W08,8,Sat,16,Off-peak,173
194
+ 2026-03-02,2026-W09,9,Mon,8,Peak,222
195
+ 2026-03-02,2026-W09,9,Mon,10,Off-peak,204
196
+ 2026-03-02,2026-W09,9,Mon,13,Peak,209
197
+ 2026-03-02,2026-W09,9,Mon,16,Off-peak,176
198
+ 2026-03-03,2026-W09,9,Tue,8,Peak,204
199
+ 2026-03-03,2026-W09,9,Tue,10,Off-peak,199
200
+ 2026-03-03,2026-W09,9,Tue,13,Peak,241
201
+ 2026-03-03,2026-W09,9,Tue,16,Off-peak,197
202
+ 2026-03-04,2026-W09,9,Wed,8,Peak,211
203
+ 2026-03-04,2026-W09,9,Wed,10,Off-peak,157
204
+ 2026-03-04,2026-W09,9,Wed,13,Peak,242
205
+ 2026-03-04,2026-W09,9,Wed,16,Off-peak,204
206
+ 2026-03-05,2026-W09,9,Thu,8,Peak,210
207
+ 2026-03-05,2026-W09,9,Thu,10,Off-peak,187
208
+ 2026-03-05,2026-W09,9,Thu,13,Peak,224
209
+ 2026-03-05,2026-W09,9,Thu,16,Off-peak,182
210
+ 2026-03-06,2026-W09,9,Fri,8,Peak,228
211
+ 2026-03-06,2026-W09,9,Fri,10,Off-peak,187
212
+ 2026-03-06,2026-W09,9,Fri,13,Peak,218
213
+ 2026-03-06,2026-W09,9,Fri,16,Off-peak,166
214
+ 2026-03-07,2026-W09,9,Sat,8,Peak,224
215
+ 2026-03-07,2026-W09,9,Sat,10,Off-peak,172
216
+ 2026-03-07,2026-W09,9,Sat,13,Peak,201
217
+ 2026-03-07,2026-W09,9,Sat,16,Off-peak,182
218
+ 2026-03-09,2026-W10,10,Mon,8,Peak,204
219
+ 2026-03-09,2026-W10,10,Mon,10,Off-peak,194
220
+ 2026-03-09,2026-W10,10,Mon,13,Peak,209
221
+ 2026-03-09,2026-W10,10,Mon,16,Off-peak,182
222
+ 2026-03-10,2026-W10,10,Tue,8,Peak,196
223
+ 2026-03-10,2026-W10,10,Tue,10,Off-peak,164
224
+ 2026-03-10,2026-W10,10,Tue,13,Peak,218
225
+ 2026-03-10,2026-W10,10,Tue,16,Off-peak,203
226
+ 2026-03-11,2026-W10,10,Wed,8,Peak,220
227
+ 2026-03-11,2026-W10,10,Wed,10,Off-peak,166
228
+ 2026-03-11,2026-W10,10,Wed,13,Peak,212
229
+ 2026-03-11,2026-W10,10,Wed,16,Off-peak,186
230
+ 2026-03-12,2026-W10,10,Thu,8,Peak,224
231
+ 2026-03-12,2026-W10,10,Thu,10,Off-peak,195
232
+ 2026-03-12,2026-W10,10,Thu,13,Peak,188
233
+ 2026-03-12,2026-W10,10,Thu,16,Off-peak,168
234
+ 2026-03-13,2026-W10,10,Fri,8,Peak,227
235
+ 2026-03-13,2026-W10,10,Fri,10,Off-peak,201
236
+ 2026-03-13,2026-W10,10,Fri,13,Peak,220
237
+ 2026-03-13,2026-W10,10,Fri,16,Off-peak,205
238
+ 2026-03-14,2026-W10,10,Sat,8,Peak,233
239
+ 2026-03-14,2026-W10,10,Sat,10,Off-peak,185
240
+ 2026-03-14,2026-W10,10,Sat,13,Peak,218
241
+ 2026-03-14,2026-W10,10,Sat,16,Off-peak,211
242
+ 2026-03-16,2026-W11,11,Mon,8,Peak,220
243
+ 2026-03-16,2026-W11,11,Mon,10,Off-peak,190
244
+ 2026-03-16,2026-W11,11,Mon,13,Peak,216
245
+ 2026-03-16,2026-W11,11,Mon,16,Off-peak,176
246
+ 2026-03-17,2026-W11,11,Tue,8,Peak,179
247
+ 2026-03-17,2026-W11,11,Tue,10,Off-peak,177
248
+ 2026-03-17,2026-W11,11,Tue,13,Peak,222
249
+ 2026-03-17,2026-W11,11,Tue,16,Off-peak,202
250
+ 2026-03-18,2026-W11,11,Wed,8,Peak,218
251
+ 2026-03-18,2026-W11,11,Wed,10,Off-peak,170
252
+ 2026-03-18,2026-W11,11,Wed,13,Peak,213
253
+ 2026-03-18,2026-W11,11,Wed,16,Off-peak,192
254
+ 2026-03-19,2026-W11,11,Thu,8,Peak,231
255
+ 2026-03-19,2026-W11,11,Thu,10,Off-peak,192
256
+ 2026-03-19,2026-W11,11,Thu,13,Peak,196
257
+ 2026-03-19,2026-W11,11,Thu,16,Off-peak,212
258
+ 2026-03-20,2026-W11,11,Fri,8,Peak,221
259
+ 2026-03-20,2026-W11,11,Fri,10,Off-peak,188
260
+ 2026-03-20,2026-W11,11,Fri,13,Peak,209
261
+ 2026-03-20,2026-W11,11,Fri,16,Off-peak,184
262
+ 2026-03-21,2026-W11,11,Sat,8,Peak,227
263
+ 2026-03-21,2026-W11,11,Sat,10,Off-peak,171
264
+ 2026-03-21,2026-W11,11,Sat,13,Peak,231
265
+ 2026-03-21,2026-W11,11,Sat,16,Off-peak,176
266
+ 2026-03-23,2026-W12,12,Mon,8,Peak,310
267
+ 2026-03-23,2026-W12,12,Mon,10,Off-peak,253
268
+ 2026-03-23,2026-W12,12,Mon,13,Peak,301
269
+ 2026-03-23,2026-W12,12,Mon,16,Off-peak,256
270
+ 2026-03-24,2026-W12,12,Tue,8,Peak,271
271
+ 2026-03-24,2026-W12,12,Tue,10,Off-peak,248
272
+ 2026-03-24,2026-W12,12,Tue,13,Peak,278
273
+ 2026-03-24,2026-W12,12,Tue,16,Off-peak,244
274
+ 2026-03-25,2026-W12,12,Wed,8,Peak,246
275
+ 2026-03-25,2026-W12,12,Wed,10,Off-peak,195
276
+ 2026-03-25,2026-W12,12,Wed,13,Peak,238
277
+ 2026-03-25,2026-W12,12,Wed,16,Off-peak,254
278
+ 2026-03-26,2026-W12,12,Thu,8,Peak,254
279
+ 2026-03-26,2026-W12,12,Thu,10,Off-peak,230
280
+ 2026-03-26,2026-W12,12,Thu,13,Peak,244
281
+ 2026-03-26,2026-W12,12,Thu,16,Off-peak,194
282
+ 2026-03-27,2026-W12,12,Fri,8,Peak,273
283
+ 2026-03-27,2026-W12,12,Fri,10,Off-peak,191
284
+ 2026-03-27,2026-W12,12,Fri,13,Peak,229
285
+ 2026-03-27,2026-W12,12,Fri,16,Off-peak,220
286
+ 2026-03-28,2026-W12,12,Sat,8,Peak,258
287
+ 2026-03-28,2026-W12,12,Sat,10,Off-peak,222
288
+ 2026-03-28,2026-W12,12,Sat,13,Peak,210
289
+ 2026-03-28,2026-W12,12,Sat,16,Off-peak,161
290
+ 2026-03-30,2026-W13,13,Mon,8,Peak,224
291
+ 2026-03-30,2026-W13,13,Mon,10,Off-peak,173
292
+ 2026-03-30,2026-W13,13,Mon,13,Peak,209
293
+ 2026-03-30,2026-W13,13,Mon,16,Off-peak,195
294
+ 2026-03-31,2026-W13,13,Tue,8,Peak,218
295
+ 2026-03-31,2026-W13,13,Tue,10,Off-peak,183
296
+ 2026-03-31,2026-W13,13,Tue,13,Peak,194
297
+ 2026-03-31,2026-W13,13,Tue,16,Off-peak,180
298
+ 2026-04-01,2026-W13,13,Wed,8,Peak,195
299
+ 2026-04-01,2026-W13,13,Wed,10,Off-peak,167
300
+ 2026-04-01,2026-W13,13,Wed,13,Peak,226
301
+ 2026-04-01,2026-W13,13,Wed,16,Off-peak,201
302
+ 2026-04-02,2026-W13,13,Thu,8,Peak,225
303
+ 2026-04-02,2026-W13,13,Thu,10,Off-peak,191
304
+ 2026-04-02,2026-W13,13,Thu,13,Peak,236
305
+ 2026-04-02,2026-W13,13,Thu,16,Off-peak,183
306
+ 2026-04-03,2026-W13,13,Fri,8,Peak,207
307
+ 2026-04-03,2026-W13,13,Fri,10,Off-peak,175
308
+ 2026-04-03,2026-W13,13,Fri,13,Peak,225
309
+ 2026-04-03,2026-W13,13,Fri,16,Off-peak,179
310
+ 2026-04-04,2026-W13,13,Sat,8,Peak,202
311
+ 2026-04-04,2026-W13,13,Sat,10,Off-peak,223
312
+ 2026-04-04,2026-W13,13,Sat,13,Peak,228
313
+ 2026-04-04,2026-W13,13,Sat,16,Off-peak,165
314
+ 2026-04-06,2026-W14,14,Mon,8,Peak,284
315
+ 2026-04-06,2026-W14,14,Mon,10,Off-peak,142
316
+ 2026-04-06,2026-W14,14,Mon,13,Peak,219
317
+ 2026-04-06,2026-W14,14,Mon,16,Off-peak,194
318
+ 2026-04-07,2026-W14,14,Tue,8,Peak,245
319
+ 2026-04-07,2026-W14,14,Tue,10,Off-peak,191
320
+ 2026-04-07,2026-W14,14,Tue,13,Peak,195
321
+ 2026-04-07,2026-W14,14,Tue,16,Off-peak,161
322
+ 2026-04-08,2026-W14,14,Wed,8,Peak,251
323
+ 2026-04-08,2026-W14,14,Wed,10,Off-peak,158
324
+ 2026-04-08,2026-W14,14,Wed,13,Peak,196
325
+ 2026-04-08,2026-W14,14,Wed,16,Off-peak,147
326
+ 2026-04-09,2026-W14,14,Thu,8,Peak,215
327
+ 2026-04-09,2026-W14,14,Thu,10,Off-peak,218
328
+ 2026-04-09,2026-W14,14,Thu,13,Peak,224
329
+ 2026-04-09,2026-W14,14,Thu,16,Off-peak,205
330
+ 2026-04-10,2026-W14,14,Fri,8,Peak,228
331
+ 2026-04-10,2026-W14,14,Fri,10,Off-peak,112
332
+ 2026-04-10,2026-W14,14,Fri,13,Peak,194
333
+ 2026-04-10,2026-W14,14,Fri,16,Off-peak,196
334
+ 2026-04-11,2026-W14,14,Sat,8,Peak,208
335
+ 2026-04-11,2026-W14,14,Sat,10,Off-peak,201
336
+ 2026-04-11,2026-W14,14,Sat,13,Peak,217
337
+ 2026-04-11,2026-W14,14,Sat,16,Off-peak,180
338
+ 2026-04-13,2026-W15,15,Mon,8,Peak,203
339
+ 2026-04-13,2026-W15,15,Mon,10,Off-peak,183
340
+ 2026-04-13,2026-W15,15,Mon,13,Peak,213
341
+ 2026-04-13,2026-W15,15,Mon,16,Off-peak,215
342
+ 2026-04-14,2026-W15,15,Tue,8,Peak,251
343
+ 2026-04-14,2026-W15,15,Tue,10,Off-peak,206
344
+ 2026-04-14,2026-W15,15,Tue,13,Peak,222
345
+ 2026-04-14,2026-W15,15,Tue,16,Off-peak,216
346
+ 2026-04-15,2026-W15,15,Wed,8,Peak,283
347
+ 2026-04-15,2026-W15,15,Wed,10,Off-peak,128
348
+ 2026-04-15,2026-W15,15,Wed,13,Peak,219
349
+ 2026-04-15,2026-W15,15,Wed,16,Off-peak,156
350
+ 2026-04-16,2026-W15,15,Thu,8,Peak,205
351
+ 2026-04-16,2026-W15,15,Thu,10,Off-peak,183
352
+ 2026-04-16,2026-W15,15,Thu,13,Peak,181
353
+ 2026-04-16,2026-W15,15,Thu,16,Off-peak,190
354
+ 2026-04-17,2026-W15,15,Fri,8,Peak,202
355
+ 2026-04-17,2026-W15,15,Fri,10,Off-peak,210
356
+ 2026-04-17,2026-W15,15,Fri,13,Peak,225
357
+ 2026-04-17,2026-W15,15,Fri,16,Off-peak,157
358
+ 2026-04-18,2026-W15,15,Sat,8,Peak,220
359
+ 2026-04-18,2026-W15,15,Sat,10,Off-peak,164
360
+ 2026-04-18,2026-W15,15,Sat,13,Peak,144
361
+ 2026-04-18,2026-W15,15,Sat,16,Off-peak,197
362
+ 2026-04-20,2026-W16,16,Mon,8,Peak,191
363
+ 2026-04-20,2026-W16,16,Mon,10,Off-peak,226
364
+ 2026-04-20,2026-W16,16,Mon,13,Peak,227
365
+ 2026-04-20,2026-W16,16,Mon,16,Off-peak,171
366
+ 2026-04-21,2026-W16,16,Tue,8,Peak,205
367
+ 2026-04-21,2026-W16,16,Tue,10,Off-peak,225
368
+ 2026-04-21,2026-W16,16,Tue,13,Peak,253
369
+ 2026-04-21,2026-W16,16,Tue,16,Off-peak,213
370
+ 2026-04-22,2026-W16,16,Wed,8,Peak,182
371
+ 2026-04-22,2026-W16,16,Wed,10,Off-peak,139
372
+ 2026-04-22,2026-W16,16,Wed,13,Peak,193
373
+ 2026-04-22,2026-W16,16,Wed,16,Off-peak,156
374
+ 2026-04-23,2026-W16,16,Thu,8,Peak,213
375
+ 2026-04-23,2026-W16,16,Thu,10,Off-peak,248
376
+ 2026-04-23,2026-W16,16,Thu,13,Peak,216
377
+ 2026-04-23,2026-W16,16,Thu,16,Off-peak,150
378
+ 2026-04-24,2026-W16,16,Fri,8,Peak,188
379
+ 2026-04-24,2026-W16,16,Fri,10,Off-peak,186
380
+ 2026-04-24,2026-W16,16,Fri,13,Peak,221
381
+ 2026-04-24,2026-W16,16,Fri,16,Off-peak,206
382
+ 2026-04-25,2026-W16,16,Sat,8,Peak,263
383
+ 2026-04-25,2026-W16,16,Sat,10,Off-peak,134
384
+ 2026-04-25,2026-W16,16,Sat,13,Peak,240
385
+ 2026-04-25,2026-W16,16,Sat,16,Off-peak,202
@@ -0,0 +1,66 @@
1
+ """Loaders for bundled demo datasets shipped with processbehavior."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from pathlib import Path
6
+ from typing import TYPE_CHECKING
7
+
8
+ if TYPE_CHECKING:
9
+ from ..process_behavior import ProcessBehavior
10
+
11
+ _DATA_DIR = Path(__file__).parent / 'data'
12
+
13
+
14
+ def load_coffee_shop() -> ProcessBehavior:
15
+ """Coffee-shop wait times — a full SPC story, ready to formulate.
16
+
17
+ A barista station's drink wait time (seconds), sampled four times a day at
18
+ 08:00, 10:00, 13:00 and 16:00 across 16 weeks, Mon-Sat (96 days x 4 readings
19
+ = 384 rows). The two rush hours (08:00, 13:00) are the ``Peak`` daypart and
20
+ the two quieter hours (10:00, 16:00) are ``Off-peak`` — Peak is genuinely
21
+ slower, a real main effect. Formulate with ``daypart`` as the factor and
22
+ ``date`` as the time axis for a full-replication (SDS 1) study.
23
+
24
+ The series has three deliberate events:
25
+
26
+ * **Week 8 (2026-02-23)** — a new espresso machine permanently lowers wait
27
+ time (~240s -> ~205s), improving Peak a touch more than Off-peak (a mild
28
+ interaction). A favorable shift on the Xbar chart.
29
+ * **Week 12** — a new POS is installed; a one-week learning curve elevates
30
+ and destabilises wait time, decaying back to normal by week 13 (a run
31
+ above the center line, not a lone outlier).
32
+ * **Weeks 14-16** — several new baristas are hired; the mean holds but the
33
+ within-subgroup spread roughly doubles — the dispersion (S) chart breaks
34
+ while the location (Xbar) chart looks fine. Averages hide variation.
35
+
36
+ Columns
37
+ -------
38
+ date : str (ISO date) day of the reading (use as the date time axis)
39
+ year_week : str ``2026-Www`` label for the week
40
+ week : int 1..16 (an integer time axis; handy for capability windows)
41
+ day_of_week : str Mon..Sat
42
+ hour : int hour of the reading (8, 10, 13, 16)
43
+ daypart : str Peak / Off-peak (the process-design factor)
44
+ wait_sec : int wait time in seconds (the response)
45
+
46
+ Returns
47
+ -------
48
+ ProcessBehavior
49
+ Wrapping the demo data; call ``.formulate(...)`` to build a Study.
50
+
51
+ Examples
52
+ --------
53
+ >>> from processbehavior import load_coffee_shop
54
+ >>> pb = load_coffee_shop()
55
+ >>> study = pb.formulate(response='wait_sec', factors=['daypart'], time='date')
56
+ >>> study.observed_design_state.sds # 1 — full replication
57
+ 1
58
+ >>> # before/after the week-8 change along the integer week axis
59
+ >>> study_w = pb.formulate(response='wait_sec', factors=['daypart'], time='week')
60
+ >>> study_w.capability(usl=240, target=180, window=(8, None)).ppk # after the change
61
+ """
62
+ # Lazy import keeps the datasets package import light and avoids any
63
+ # circular-import risk at package load.
64
+ from ..process_behavior import ProcessBehavior
65
+
66
+ return ProcessBehavior.read_csv(str(_DATA_DIR / 'coffee_shop_demo_long.csv'))