ts_shape.events.production
¤
Production Events
Detectors for production events in long-form timeseries (uuid-per-signal).
- MachineStateEvents: Run/idle intervals and transition points from a boolean state signal.
- detect_run_idle: Intervalize run/idle with optional min duration.
-
transition_events: Point events on idle→run and run→idle changes.
-
LineThroughputEvents: Throughput metrics and takt adherence.
- count_parts: Parts per fixed window from a counter uuid.
-
takt_adherence: Cycle time violations vs. a takt time.
-
ChangeoverEvents: Product/recipe changes and end-of-changeover derivation.
- detect_changeover: Point events at product value changes.
-
changeover_window: End via fixed window or stable band metrics.
-
FlowConstraintEvents: Blocked/starved intervals between upstream/downstream run signals.
- blocked_events: Upstream running while downstream not consuming.
- starved_events: Downstream running while upstream not supplying.
Modules:
Classes:
-
ChangeoverEvents
–Production: Changeover
-
FlowConstraintEvents
–Production: Flow Constraints
-
LineThroughputEvents
–Production: Line Throughput
-
MachineStateEvents
–Production: Machine State
ChangeoverEvents
¤
ChangeoverEvents(dataframe: DataFrame, *, event_uuid: str = 'prod:changeover', time_column: str = 'systime')
Bases: Base
Production: Changeover
Detect product/recipe changes and compute changeover windows without requiring a dedicated 'first good' signal.
Methods: - detect_changeover: point events when product/recipe changes. - changeover_window: derive an end time via fixed window or 'stable_band' metrics.
Methods:
-
changeover_window
–Compute changeover windows per product change.
-
detect_changeover
–Emit point events when the product/recipe changes value.
-
get_dataframe
–Returns the processed DataFrame.
Source code in src/ts_shape/events/production/changeover.py
18 19 20 21 22 23 24 25 26 27 |
|
changeover_window
¤
changeover_window(product_uuid: str, *, value_column: str = 'value_string', start_time: Optional[Timestamp] = None, until: str = 'fixed_window', config: Optional[Dict[str, Any]] = None, fallback: Optional[Dict[str, Any]] = None) -> DataFrame
Compute changeover windows per product change.
until
- fixed_window: end = start + config['duration'] (e.g., '10m')
- stable_band: end when all metrics stabilize within band for hold: config = { 'metrics': [ {'uuid': 'm1', 'value_column': 'value_double', 'band': 0.2, 'hold': '2m'}, ... ] }
fallback: {'default_duration': '10m', 'completed': False}
Source code in src/ts_shape/events/production/changeover.py
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 |
|
detect_changeover
¤
detect_changeover(product_uuid: str, *, value_column: str = 'value_string', min_hold: str = '0s') -> DataFrame
Emit point events when the product/recipe changes value.
Uses a hold check: the new product must persist for at least min_hold until the next change.
Source code in src/ts_shape/events/production/changeover.py
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
|
get_dataframe
¤
get_dataframe() -> DataFrame
Returns the processed DataFrame.
Source code in src/ts_shape/utils/base.py
34 35 36 |
|
FlowConstraintEvents
¤
FlowConstraintEvents(dataframe: DataFrame, *, time_column: str = 'systime', event_uuid: str = 'prod:flow')
Bases: Base
Production: Flow Constraints
- blocked_events: upstream running while downstream not consuming.
- starved_events: downstream idle due to lack of upstream supply.
Methods:
-
blocked_events
–Blocked: upstream_run=True while downstream_run=False.
-
get_dataframe
–Returns the processed DataFrame.
-
starved_events
–Starved: downstream_run=True while upstream_run=False.
Source code in src/ts_shape/events/production/flow_constraints.py
14 15 16 17 18 19 20 21 22 23 |
|
blocked_events
¤
blocked_events(*, roles: Dict[str, str], tolerance: str = '200ms', min_duration: str = '0s') -> DataFrame
Blocked: upstream_run=True while downstream_run=False.
roles = {'upstream_run': uuid, 'downstream_run': uuid}
Source code in src/ts_shape/events/production/flow_constraints.py
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
|
get_dataframe
¤
get_dataframe() -> DataFrame
Returns the processed DataFrame.
Source code in src/ts_shape/utils/base.py
34 35 36 |
|
starved_events
¤
starved_events(*, roles: Dict[str, str], tolerance: str = '200ms', min_duration: str = '0s') -> DataFrame
Starved: downstream_run=True while upstream_run=False.
roles = {'upstream_run': uuid, 'downstream_run': uuid}
Source code in src/ts_shape/events/production/flow_constraints.py
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
|
LineThroughputEvents
¤
LineThroughputEvents(dataframe: DataFrame, *, event_uuid: str = 'prod:throughput', time_column: str = 'systime')
Bases: Base
Production: Line Throughput
Methods: - count_parts: Part counts per fixed window from a monotonically increasing counter. - takt_adherence: Cycle time violations against a takt time from step/boolean triggers.
Methods:
-
count_parts
–Compute parts per window for a counter uuid.
-
get_dataframe
–Returns the processed DataFrame.
-
takt_adherence
–Flag cycles whose durations exceed the takt_time.
Source code in src/ts_shape/events/production/line_throughput.py
15 16 17 18 19 20 21 22 23 24 |
|
count_parts
¤
count_parts(counter_uuid: str, *, value_column: str = 'value_integer', window: str = '1m') -> DataFrame
Compute parts per window for a counter uuid.
Returns columns: window_start, uuid, source_uuid, is_delta, count
Source code in src/ts_shape/events/production/line_throughput.py
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
|
get_dataframe
¤
get_dataframe() -> DataFrame
Returns the processed DataFrame.
Source code in src/ts_shape/utils/base.py
34 35 36 |
|
takt_adherence
¤
takt_adherence(cycle_uuid: str, *, value_column: str = 'value_bool', takt_time: str = '60s', min_violation: str = '0s') -> DataFrame
Flag cycles whose durations exceed the takt_time.
For boolean triggers: detect True rising edges as cycle boundaries. For integer steps: detect increments as cycle boundaries.
Returns: systime (at boundary), uuid, source_uuid, is_delta, cycle_time_seconds, violation
Source code in src/ts_shape/events/production/line_throughput.py
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
|
MachineStateEvents
¤
MachineStateEvents(dataframe: DataFrame, run_state_uuid: str, *, event_uuid: str = 'prod:run_idle', value_column: str = 'value_bool', time_column: str = 'systime')
Bases: Base
Production: Machine State
Detect run/idle transitions and intervals from a boolean state signal.
- MachineStateEvents: Run/idle state intervals and transitions.
- detect_run_idle: Intervalize run/idle states with optional min duration filter.
- transition_events: Point events on state changes (idle->run, run->idle).
Methods:
-
detect_run_idle
–Return intervals labeled as 'run' or 'idle'.
-
get_dataframe
–Returns the processed DataFrame.
-
transition_events
–Return point events at state transitions.
Source code in src/ts_shape/events/production/machine_state.py
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
|
detect_run_idle
¤
detect_run_idle(min_duration: str = '0s') -> DataFrame
Return intervals labeled as 'run' or 'idle'.
- min_duration: discard intervals shorter than this duration. Columns: start, end, uuid, source_uuid, is_delta, state
Source code in src/ts_shape/events/production/machine_state.py
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
|
get_dataframe
¤
get_dataframe() -> DataFrame
Returns the processed DataFrame.
Source code in src/ts_shape/utils/base.py
34 35 36 |
|
transition_events
¤
transition_events() -> DataFrame
Return point events at state transitions.
Columns: systime, uuid, source_uuid, is_delta, transition ('idle_to_run'|'run_to_idle')
Source code in src/ts_shape/events/production/machine_state.py
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
|