electric-barometer 0.1.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.
- electric_barometer-0.1.0/LICENSE +28 -0
- electric_barometer-0.1.0/PKG-INFO +200 -0
- electric_barometer-0.1.0/README.md +153 -0
- electric_barometer-0.1.0/pyproject.toml +79 -0
- electric_barometer-0.1.0/setup.cfg +4 -0
- electric_barometer-0.1.0/src/electric_barometer/__init__.py +34 -0
- electric_barometer-0.1.0/src/electric_barometer.egg-info/PKG-INFO +200 -0
- electric_barometer-0.1.0/src/electric_barometer.egg-info/SOURCES.txt +10 -0
- electric_barometer-0.1.0/src/electric_barometer.egg-info/dependency_links.txt +1 -0
- electric_barometer-0.1.0/src/electric_barometer.egg-info/requires.txt +29 -0
- electric_barometer-0.1.0/src/electric_barometer.egg-info/top_level.txt +1 -0
- electric_barometer-0.1.0/tests/test_smoke_imports.py +16 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
BSD 3-Clause License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025, Kyle Corrie
|
|
4
|
+
|
|
5
|
+
Redistribution and use in source and binary forms, with or without
|
|
6
|
+
modification, are permitted provided that the following conditions are met:
|
|
7
|
+
|
|
8
|
+
1. Redistributions of source code must retain the above copyright notice, this
|
|
9
|
+
list of conditions and the following disclaimer.
|
|
10
|
+
|
|
11
|
+
2. Redistributions in binary form must reproduce the above copyright notice,
|
|
12
|
+
this list of conditions and the following disclaimer in the documentation
|
|
13
|
+
and/or other materials provided with the distribution.
|
|
14
|
+
|
|
15
|
+
3. Neither the name of the copyright holder nor the names of its
|
|
16
|
+
contributors may be used to endorse or promote products derived from
|
|
17
|
+
this software without specific prior written permission.
|
|
18
|
+
|
|
19
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
20
|
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
21
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
22
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
23
|
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
24
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
25
|
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
26
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
27
|
+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
28
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: electric-barometer
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Umbrella package for the Electric Barometer ecosystem (metrics, evaluation, adapters, and related tooling).
|
|
5
|
+
Author-email: "Kyle Corrie (Economistician)" <kcorrie@economistician.com>
|
|
6
|
+
License: BSD-3-Clause
|
|
7
|
+
Project-URL: Homepage, https://github.com/Economistician/electric-barometer
|
|
8
|
+
Project-URL: Repository, https://github.com/Economistician/electric-barometer
|
|
9
|
+
Project-URL: Issues, https://github.com/Economistician/electric-barometer/issues
|
|
10
|
+
Project-URL: Documentation, https://economistician.github.io/eb-docs/
|
|
11
|
+
Keywords: forecasting,operations,evaluation,metrics,time-series
|
|
12
|
+
Classifier: Development Status :: 3 - Alpha
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: Intended Audience :: Science/Research
|
|
15
|
+
Classifier: License :: OSI Approved :: BSD License
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Operating System :: OS Independent
|
|
21
|
+
Requires-Python: >=3.10
|
|
22
|
+
Description-Content-Type: text/markdown
|
|
23
|
+
License-File: LICENSE
|
|
24
|
+
Requires-Dist: eb-metrics<0.2,>=0.1.1
|
|
25
|
+
Requires-Dist: eb-evaluation<0.2,>=0.1.1
|
|
26
|
+
Requires-Dist: eb-adapters<0.2,>=0.1.0
|
|
27
|
+
Provides-Extra: dev
|
|
28
|
+
Requires-Dist: pytest>=8.0; extra == "dev"
|
|
29
|
+
Requires-Dist: pytest-cov>=5.0; extra == "dev"
|
|
30
|
+
Provides-Extra: metrics
|
|
31
|
+
Requires-Dist: eb-metrics<0.2,>=0.1.1; extra == "metrics"
|
|
32
|
+
Provides-Extra: evaluation
|
|
33
|
+
Requires-Dist: eb-evaluation<0.2,>=0.1.1; extra == "evaluation"
|
|
34
|
+
Provides-Extra: adapters
|
|
35
|
+
Requires-Dist: eb-adapters<0.2,>=0.1.1; extra == "adapters"
|
|
36
|
+
Provides-Extra: sklearn
|
|
37
|
+
Requires-Dist: eb-metrics[sklearn]<0.2,>=0.1.1; extra == "sklearn"
|
|
38
|
+
Provides-Extra: tf
|
|
39
|
+
Requires-Dist: eb-metrics[tf]<0.2,>=0.1.1; extra == "tf"
|
|
40
|
+
Provides-Extra: all
|
|
41
|
+
Requires-Dist: electric-barometer[metrics]; extra == "all"
|
|
42
|
+
Requires-Dist: electric-barometer[evaluation]; extra == "all"
|
|
43
|
+
Requires-Dist: electric-barometer[adapters]; extra == "all"
|
|
44
|
+
Requires-Dist: electric-barometer[sklearn]; extra == "all"
|
|
45
|
+
Requires-Dist: electric-barometer[tf]; extra == "all"
|
|
46
|
+
Dynamic: license-file
|
|
47
|
+
|
|
48
|
+
# Electric Barometer
|
|
49
|
+
|
|
50
|
+

|
|
51
|
+

|
|
52
|
+

|
|
53
|
+
|
|
54
|
+
**Electric Barometer** is a modular, cost-aware forecasting evaluation framework designed
|
|
55
|
+
for operational decision-making. It provides a structured way to evaluate, compare, and
|
|
56
|
+
select forecasts when error costs are asymmetric and operational consequences matter.
|
|
57
|
+
|
|
58
|
+
Rather than delivering a single monolithic library, Electric Barometer is intentionally
|
|
59
|
+
organized as a small ecosystem of focused packages, each with a clear responsibility.
|
|
60
|
+
|
|
61
|
+
This repository serves as the **umbrella distribution and conceptual entry point** for
|
|
62
|
+
the Electric Barometer ecosystem.
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## The Electric Barometer Ecosystem
|
|
67
|
+
|
|
68
|
+
Electric Barometer is composed of several interoperable packages:
|
|
69
|
+
|
|
70
|
+
- **`eb-metrics`**
|
|
71
|
+
Defines individual forecast error and service metrics, including cost-asymmetric
|
|
72
|
+
measures such as Cost-Weighted Service Loss (CWSL), Forecast Readiness Score (FRS),
|
|
73
|
+
and related primitives.
|
|
74
|
+
|
|
75
|
+
- **`eb-evaluation`**
|
|
76
|
+
Provides DataFrame-first utilities for applying metrics across entities, groups,
|
|
77
|
+
hierarchies, and time windows. This layer handles evaluation, comparison, and
|
|
78
|
+
selection logic while delegating metric math to `eb-metrics`.
|
|
79
|
+
|
|
80
|
+
- **`eb-adapters`**
|
|
81
|
+
Normalizes interfaces for external forecasting and regression libraries so they can
|
|
82
|
+
be evaluated consistently. Adapters expose a common `.fit / .predict` contract for
|
|
83
|
+
heterogeneous models.
|
|
84
|
+
|
|
85
|
+
- **`eb-examples`**
|
|
86
|
+
Contains worked examples, notebooks, and practical demonstrations showing how the
|
|
87
|
+
Electric Barometer ecosystem is used end-to-end in real scenarios.
|
|
88
|
+
|
|
89
|
+
- **`eb-papers`**
|
|
90
|
+
The source of truth for conceptual definitions, theoretical foundations, and
|
|
91
|
+
methodological rationale behind Electric Barometer metrics and frameworks.
|
|
92
|
+
|
|
93
|
+
Each package is versioned, tested, and documented independently, but designed to work
|
|
94
|
+
together seamlessly.
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## What This Repository Provides
|
|
99
|
+
|
|
100
|
+
This `electric-barometer` repository:
|
|
101
|
+
|
|
102
|
+
- Acts as the **canonical entry point** to the ecosystem
|
|
103
|
+
- Provides a single install surface for core Electric Barometer functionality
|
|
104
|
+
- Establishes the conceptual map of the project
|
|
105
|
+
- Ensures compatible dependency resolution across subpackages
|
|
106
|
+
|
|
107
|
+
It intentionally contains minimal implementation code.
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
## Installation
|
|
112
|
+
|
|
113
|
+
Install the Electric Barometer umbrella package via pip:
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
pip install electric-barometer
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
This installs the core dependencies required to work with Electric Barometer metrics.
|
|
120
|
+
Additional functionality is provided by installing the underlying packages directly
|
|
121
|
+
(e.g., `eb-evaluation`, `eb-adapters`) or via future optional extras.
|
|
122
|
+
|
|
123
|
+
For development:
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
pip install -e .
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## Design Philosophy
|
|
132
|
+
|
|
133
|
+
Electric Barometer is built around a few core principles:
|
|
134
|
+
|
|
135
|
+
- **Separation of concerns**
|
|
136
|
+
Metric definitions, evaluation logic, and model interfaces live in separate packages.
|
|
137
|
+
|
|
138
|
+
- **Cost-aware evaluation**
|
|
139
|
+
Forecast accuracy is evaluated in terms of operational impact, not symmetric error
|
|
140
|
+
alone.
|
|
141
|
+
|
|
142
|
+
- **Operational realism**
|
|
143
|
+
Metrics and frameworks are designed for environments where underbuild and overbuild
|
|
144
|
+
have different consequences.
|
|
145
|
+
|
|
146
|
+
- **Composable tooling**
|
|
147
|
+
Users can adopt only the layers they need without committing to a monolith.
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## Examples and Tutorials
|
|
152
|
+
|
|
153
|
+
Examples, notebooks, and applied workflows are maintained in the separate
|
|
154
|
+
**`eb-examples`** repository.
|
|
155
|
+
|
|
156
|
+
This repository intentionally avoids embedding example code to keep the core packages
|
|
157
|
+
lean and focused.
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## Documentation
|
|
162
|
+
|
|
163
|
+
Unified documentation for the Electric Barometer ecosystem is available at:
|
|
164
|
+
|
|
165
|
+
https://economistician.github.io/eb-docs/
|
|
166
|
+
|
|
167
|
+
Documentation is generated directly from source code docstrings and kept consistent
|
|
168
|
+
across packages.
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## Status
|
|
173
|
+
|
|
174
|
+
Electric Barometer is under active development.
|
|
175
|
+
Public APIs may evolve prior to the first stable release.
|
|
176
|
+
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
## Authorship and Stewardship
|
|
180
|
+
|
|
181
|
+
The Electric Barometer ecosystem is designed and maintained by
|
|
182
|
+
**Kyle Corrie** under the *Economistician* moniker.
|
|
183
|
+
|
|
184
|
+
The project reflects applied research and production experience in
|
|
185
|
+
forecasting, operations research, and cost-asymmetric decision systems
|
|
186
|
+
within large-scale operational environments.
|
|
187
|
+
|
|
188
|
+
For questions, collaboration, or research inquiries:
|
|
189
|
+
|
|
190
|
+
- GitHub: https://github.com/Economistician
|
|
191
|
+
- Contact: kcorrie@economistician.com
|
|
192
|
+
|
|
193
|
+
Conceptual foundations and formal methodology are documented in the
|
|
194
|
+
companion research repository **eb-papers**.
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
## License
|
|
199
|
+
|
|
200
|
+
This project is licensed under the BSD 3-Clause License.
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
# Electric Barometer
|
|
2
|
+
|
|
3
|
+

|
|
4
|
+

|
|
5
|
+

|
|
6
|
+
|
|
7
|
+
**Electric Barometer** is a modular, cost-aware forecasting evaluation framework designed
|
|
8
|
+
for operational decision-making. It provides a structured way to evaluate, compare, and
|
|
9
|
+
select forecasts when error costs are asymmetric and operational consequences matter.
|
|
10
|
+
|
|
11
|
+
Rather than delivering a single monolithic library, Electric Barometer is intentionally
|
|
12
|
+
organized as a small ecosystem of focused packages, each with a clear responsibility.
|
|
13
|
+
|
|
14
|
+
This repository serves as the **umbrella distribution and conceptual entry point** for
|
|
15
|
+
the Electric Barometer ecosystem.
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## The Electric Barometer Ecosystem
|
|
20
|
+
|
|
21
|
+
Electric Barometer is composed of several interoperable packages:
|
|
22
|
+
|
|
23
|
+
- **`eb-metrics`**
|
|
24
|
+
Defines individual forecast error and service metrics, including cost-asymmetric
|
|
25
|
+
measures such as Cost-Weighted Service Loss (CWSL), Forecast Readiness Score (FRS),
|
|
26
|
+
and related primitives.
|
|
27
|
+
|
|
28
|
+
- **`eb-evaluation`**
|
|
29
|
+
Provides DataFrame-first utilities for applying metrics across entities, groups,
|
|
30
|
+
hierarchies, and time windows. This layer handles evaluation, comparison, and
|
|
31
|
+
selection logic while delegating metric math to `eb-metrics`.
|
|
32
|
+
|
|
33
|
+
- **`eb-adapters`**
|
|
34
|
+
Normalizes interfaces for external forecasting and regression libraries so they can
|
|
35
|
+
be evaluated consistently. Adapters expose a common `.fit / .predict` contract for
|
|
36
|
+
heterogeneous models.
|
|
37
|
+
|
|
38
|
+
- **`eb-examples`**
|
|
39
|
+
Contains worked examples, notebooks, and practical demonstrations showing how the
|
|
40
|
+
Electric Barometer ecosystem is used end-to-end in real scenarios.
|
|
41
|
+
|
|
42
|
+
- **`eb-papers`**
|
|
43
|
+
The source of truth for conceptual definitions, theoretical foundations, and
|
|
44
|
+
methodological rationale behind Electric Barometer metrics and frameworks.
|
|
45
|
+
|
|
46
|
+
Each package is versioned, tested, and documented independently, but designed to work
|
|
47
|
+
together seamlessly.
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## What This Repository Provides
|
|
52
|
+
|
|
53
|
+
This `electric-barometer` repository:
|
|
54
|
+
|
|
55
|
+
- Acts as the **canonical entry point** to the ecosystem
|
|
56
|
+
- Provides a single install surface for core Electric Barometer functionality
|
|
57
|
+
- Establishes the conceptual map of the project
|
|
58
|
+
- Ensures compatible dependency resolution across subpackages
|
|
59
|
+
|
|
60
|
+
It intentionally contains minimal implementation code.
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Installation
|
|
65
|
+
|
|
66
|
+
Install the Electric Barometer umbrella package via pip:
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
pip install electric-barometer
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
This installs the core dependencies required to work with Electric Barometer metrics.
|
|
73
|
+
Additional functionality is provided by installing the underlying packages directly
|
|
74
|
+
(e.g., `eb-evaluation`, `eb-adapters`) or via future optional extras.
|
|
75
|
+
|
|
76
|
+
For development:
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
pip install -e .
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## Design Philosophy
|
|
85
|
+
|
|
86
|
+
Electric Barometer is built around a few core principles:
|
|
87
|
+
|
|
88
|
+
- **Separation of concerns**
|
|
89
|
+
Metric definitions, evaluation logic, and model interfaces live in separate packages.
|
|
90
|
+
|
|
91
|
+
- **Cost-aware evaluation**
|
|
92
|
+
Forecast accuracy is evaluated in terms of operational impact, not symmetric error
|
|
93
|
+
alone.
|
|
94
|
+
|
|
95
|
+
- **Operational realism**
|
|
96
|
+
Metrics and frameworks are designed for environments where underbuild and overbuild
|
|
97
|
+
have different consequences.
|
|
98
|
+
|
|
99
|
+
- **Composable tooling**
|
|
100
|
+
Users can adopt only the layers they need without committing to a monolith.
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## Examples and Tutorials
|
|
105
|
+
|
|
106
|
+
Examples, notebooks, and applied workflows are maintained in the separate
|
|
107
|
+
**`eb-examples`** repository.
|
|
108
|
+
|
|
109
|
+
This repository intentionally avoids embedding example code to keep the core packages
|
|
110
|
+
lean and focused.
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## Documentation
|
|
115
|
+
|
|
116
|
+
Unified documentation for the Electric Barometer ecosystem is available at:
|
|
117
|
+
|
|
118
|
+
https://economistician.github.io/eb-docs/
|
|
119
|
+
|
|
120
|
+
Documentation is generated directly from source code docstrings and kept consistent
|
|
121
|
+
across packages.
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## Status
|
|
126
|
+
|
|
127
|
+
Electric Barometer is under active development.
|
|
128
|
+
Public APIs may evolve prior to the first stable release.
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## Authorship and Stewardship
|
|
133
|
+
|
|
134
|
+
The Electric Barometer ecosystem is designed and maintained by
|
|
135
|
+
**Kyle Corrie** under the *Economistician* moniker.
|
|
136
|
+
|
|
137
|
+
The project reflects applied research and production experience in
|
|
138
|
+
forecasting, operations research, and cost-asymmetric decision systems
|
|
139
|
+
within large-scale operational environments.
|
|
140
|
+
|
|
141
|
+
For questions, collaboration, or research inquiries:
|
|
142
|
+
|
|
143
|
+
- GitHub: https://github.com/Economistician
|
|
144
|
+
- Contact: kcorrie@economistician.com
|
|
145
|
+
|
|
146
|
+
Conceptual foundations and formal methodology are documented in the
|
|
147
|
+
companion research repository **eb-papers**.
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## License
|
|
152
|
+
|
|
153
|
+
This project is licensed under the BSD 3-Clause License.
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "electric-barometer"
|
|
3
|
+
version = "0.1.0"
|
|
4
|
+
description = "Umbrella package for the Electric Barometer ecosystem (metrics, evaluation, adapters, and related tooling)."
|
|
5
|
+
readme = "README.md"
|
|
6
|
+
requires-python = ">=3.10"
|
|
7
|
+
license = { text = "BSD-3-Clause" }
|
|
8
|
+
|
|
9
|
+
authors = [
|
|
10
|
+
{ name = "Kyle Corrie (Economistician)", email = "kcorrie@economistician.com" }
|
|
11
|
+
]
|
|
12
|
+
|
|
13
|
+
# Keep installable even before all subpackages are published to PyPI.
|
|
14
|
+
dependencies = ["eb-metrics>=0.1.1,<0.2","eb-evaluation>=0.1.1,<0.2","eb-adapters>=0.1.0,<0.2"]
|
|
15
|
+
|
|
16
|
+
keywords = ["forecasting", "operations", "evaluation", "metrics", "time-series"]
|
|
17
|
+
|
|
18
|
+
classifiers = [
|
|
19
|
+
"Development Status :: 3 - Alpha",
|
|
20
|
+
"Intended Audience :: Developers",
|
|
21
|
+
"Intended Audience :: Science/Research",
|
|
22
|
+
"License :: OSI Approved :: BSD License",
|
|
23
|
+
"Programming Language :: Python :: 3",
|
|
24
|
+
"Programming Language :: Python :: 3.10",
|
|
25
|
+
"Programming Language :: Python :: 3.11",
|
|
26
|
+
"Programming Language :: Python :: 3.12",
|
|
27
|
+
"Operating System :: OS Independent",
|
|
28
|
+
]
|
|
29
|
+
|
|
30
|
+
[project.urls]
|
|
31
|
+
Homepage = "https://github.com/Economistician/electric-barometer"
|
|
32
|
+
Repository = "https://github.com/Economistician/electric-barometer"
|
|
33
|
+
Issues = "https://github.com/Economistician/electric-barometer/issues"
|
|
34
|
+
Documentation = "https://economistician.github.io/eb-docs/"
|
|
35
|
+
|
|
36
|
+
[project.optional-dependencies]
|
|
37
|
+
dev = [
|
|
38
|
+
"pytest>=8.0",
|
|
39
|
+
"pytest-cov>=5.0",
|
|
40
|
+
]
|
|
41
|
+
|
|
42
|
+
# Ecosystem extras (enable as packages become available on PyPI)
|
|
43
|
+
metrics = [
|
|
44
|
+
"eb-metrics>=0.1.1,<0.2",
|
|
45
|
+
]
|
|
46
|
+
evaluation = [
|
|
47
|
+
"eb-evaluation>=0.1.1,<0.2",
|
|
48
|
+
]
|
|
49
|
+
adapters = [
|
|
50
|
+
"eb-adapters>=0.1.1,<0.2",
|
|
51
|
+
]
|
|
52
|
+
|
|
53
|
+
# Proxy extras to eb-metrics extras (already exist in eb-metrics)
|
|
54
|
+
sklearn = [
|
|
55
|
+
"eb-metrics[sklearn]>=0.1.1,<0.2",
|
|
56
|
+
]
|
|
57
|
+
tf = [
|
|
58
|
+
"eb-metrics[tf]>=0.1.1,<0.2",
|
|
59
|
+
]
|
|
60
|
+
|
|
61
|
+
# Convenience rollups
|
|
62
|
+
all = [
|
|
63
|
+
"electric-barometer[metrics]",
|
|
64
|
+
"electric-barometer[evaluation]",
|
|
65
|
+
"electric-barometer[adapters]",
|
|
66
|
+
"electric-barometer[sklearn]",
|
|
67
|
+
"electric-barometer[tf]",
|
|
68
|
+
]
|
|
69
|
+
|
|
70
|
+
[build-system]
|
|
71
|
+
requires = ["setuptools>=64", "wheel"]
|
|
72
|
+
build-backend = "setuptools.build_meta"
|
|
73
|
+
|
|
74
|
+
[tool.setuptools.packages.find]
|
|
75
|
+
where = ["src"]
|
|
76
|
+
|
|
77
|
+
[tool.pytest.ini_options]
|
|
78
|
+
pythonpath = ["src"]
|
|
79
|
+
addopts = "-ra"
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
electric-barometer
|
|
5
|
+
==================
|
|
6
|
+
|
|
7
|
+
Umbrella package for the Electric Barometer ecosystem.
|
|
8
|
+
|
|
9
|
+
This distribution intentionally contains minimal runtime code. Its primary
|
|
10
|
+
purpose is to provide a stable installation and versioning surface for the
|
|
11
|
+
Electric Barometer framework by coordinating the following leaf packages:
|
|
12
|
+
|
|
13
|
+
- eb-metrics : Core asymmetric forecast metrics
|
|
14
|
+
- eb-evaluation : DataFrame-based evaluation and orchestration utilities
|
|
15
|
+
- eb-adapters : Forecast model adapter interfaces
|
|
16
|
+
|
|
17
|
+
End users are expected to interact primarily with the leaf packages directly.
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
from importlib.metadata import PackageNotFoundError, version
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def _resolve_version() -> str:
|
|
24
|
+
"""Resolve the installed version of the electric-barometer distribution."""
|
|
25
|
+
try:
|
|
26
|
+
return version("electric-barometer")
|
|
27
|
+
except PackageNotFoundError:
|
|
28
|
+
# Fallback for editable installs or source checkouts
|
|
29
|
+
return "0.0.0"
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
__version__ = _resolve_version()
|
|
33
|
+
|
|
34
|
+
__all__ = ["__version__"]
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: electric-barometer
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Umbrella package for the Electric Barometer ecosystem (metrics, evaluation, adapters, and related tooling).
|
|
5
|
+
Author-email: "Kyle Corrie (Economistician)" <kcorrie@economistician.com>
|
|
6
|
+
License: BSD-3-Clause
|
|
7
|
+
Project-URL: Homepage, https://github.com/Economistician/electric-barometer
|
|
8
|
+
Project-URL: Repository, https://github.com/Economistician/electric-barometer
|
|
9
|
+
Project-URL: Issues, https://github.com/Economistician/electric-barometer/issues
|
|
10
|
+
Project-URL: Documentation, https://economistician.github.io/eb-docs/
|
|
11
|
+
Keywords: forecasting,operations,evaluation,metrics,time-series
|
|
12
|
+
Classifier: Development Status :: 3 - Alpha
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: Intended Audience :: Science/Research
|
|
15
|
+
Classifier: License :: OSI Approved :: BSD License
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Operating System :: OS Independent
|
|
21
|
+
Requires-Python: >=3.10
|
|
22
|
+
Description-Content-Type: text/markdown
|
|
23
|
+
License-File: LICENSE
|
|
24
|
+
Requires-Dist: eb-metrics<0.2,>=0.1.1
|
|
25
|
+
Requires-Dist: eb-evaluation<0.2,>=0.1.1
|
|
26
|
+
Requires-Dist: eb-adapters<0.2,>=0.1.0
|
|
27
|
+
Provides-Extra: dev
|
|
28
|
+
Requires-Dist: pytest>=8.0; extra == "dev"
|
|
29
|
+
Requires-Dist: pytest-cov>=5.0; extra == "dev"
|
|
30
|
+
Provides-Extra: metrics
|
|
31
|
+
Requires-Dist: eb-metrics<0.2,>=0.1.1; extra == "metrics"
|
|
32
|
+
Provides-Extra: evaluation
|
|
33
|
+
Requires-Dist: eb-evaluation<0.2,>=0.1.1; extra == "evaluation"
|
|
34
|
+
Provides-Extra: adapters
|
|
35
|
+
Requires-Dist: eb-adapters<0.2,>=0.1.1; extra == "adapters"
|
|
36
|
+
Provides-Extra: sklearn
|
|
37
|
+
Requires-Dist: eb-metrics[sklearn]<0.2,>=0.1.1; extra == "sklearn"
|
|
38
|
+
Provides-Extra: tf
|
|
39
|
+
Requires-Dist: eb-metrics[tf]<0.2,>=0.1.1; extra == "tf"
|
|
40
|
+
Provides-Extra: all
|
|
41
|
+
Requires-Dist: electric-barometer[metrics]; extra == "all"
|
|
42
|
+
Requires-Dist: electric-barometer[evaluation]; extra == "all"
|
|
43
|
+
Requires-Dist: electric-barometer[adapters]; extra == "all"
|
|
44
|
+
Requires-Dist: electric-barometer[sklearn]; extra == "all"
|
|
45
|
+
Requires-Dist: electric-barometer[tf]; extra == "all"
|
|
46
|
+
Dynamic: license-file
|
|
47
|
+
|
|
48
|
+
# Electric Barometer
|
|
49
|
+
|
|
50
|
+

|
|
51
|
+

|
|
52
|
+

|
|
53
|
+
|
|
54
|
+
**Electric Barometer** is a modular, cost-aware forecasting evaluation framework designed
|
|
55
|
+
for operational decision-making. It provides a structured way to evaluate, compare, and
|
|
56
|
+
select forecasts when error costs are asymmetric and operational consequences matter.
|
|
57
|
+
|
|
58
|
+
Rather than delivering a single monolithic library, Electric Barometer is intentionally
|
|
59
|
+
organized as a small ecosystem of focused packages, each with a clear responsibility.
|
|
60
|
+
|
|
61
|
+
This repository serves as the **umbrella distribution and conceptual entry point** for
|
|
62
|
+
the Electric Barometer ecosystem.
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## The Electric Barometer Ecosystem
|
|
67
|
+
|
|
68
|
+
Electric Barometer is composed of several interoperable packages:
|
|
69
|
+
|
|
70
|
+
- **`eb-metrics`**
|
|
71
|
+
Defines individual forecast error and service metrics, including cost-asymmetric
|
|
72
|
+
measures such as Cost-Weighted Service Loss (CWSL), Forecast Readiness Score (FRS),
|
|
73
|
+
and related primitives.
|
|
74
|
+
|
|
75
|
+
- **`eb-evaluation`**
|
|
76
|
+
Provides DataFrame-first utilities for applying metrics across entities, groups,
|
|
77
|
+
hierarchies, and time windows. This layer handles evaluation, comparison, and
|
|
78
|
+
selection logic while delegating metric math to `eb-metrics`.
|
|
79
|
+
|
|
80
|
+
- **`eb-adapters`**
|
|
81
|
+
Normalizes interfaces for external forecasting and regression libraries so they can
|
|
82
|
+
be evaluated consistently. Adapters expose a common `.fit / .predict` contract for
|
|
83
|
+
heterogeneous models.
|
|
84
|
+
|
|
85
|
+
- **`eb-examples`**
|
|
86
|
+
Contains worked examples, notebooks, and practical demonstrations showing how the
|
|
87
|
+
Electric Barometer ecosystem is used end-to-end in real scenarios.
|
|
88
|
+
|
|
89
|
+
- **`eb-papers`**
|
|
90
|
+
The source of truth for conceptual definitions, theoretical foundations, and
|
|
91
|
+
methodological rationale behind Electric Barometer metrics and frameworks.
|
|
92
|
+
|
|
93
|
+
Each package is versioned, tested, and documented independently, but designed to work
|
|
94
|
+
together seamlessly.
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## What This Repository Provides
|
|
99
|
+
|
|
100
|
+
This `electric-barometer` repository:
|
|
101
|
+
|
|
102
|
+
- Acts as the **canonical entry point** to the ecosystem
|
|
103
|
+
- Provides a single install surface for core Electric Barometer functionality
|
|
104
|
+
- Establishes the conceptual map of the project
|
|
105
|
+
- Ensures compatible dependency resolution across subpackages
|
|
106
|
+
|
|
107
|
+
It intentionally contains minimal implementation code.
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
## Installation
|
|
112
|
+
|
|
113
|
+
Install the Electric Barometer umbrella package via pip:
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
pip install electric-barometer
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
This installs the core dependencies required to work with Electric Barometer metrics.
|
|
120
|
+
Additional functionality is provided by installing the underlying packages directly
|
|
121
|
+
(e.g., `eb-evaluation`, `eb-adapters`) or via future optional extras.
|
|
122
|
+
|
|
123
|
+
For development:
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
pip install -e .
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## Design Philosophy
|
|
132
|
+
|
|
133
|
+
Electric Barometer is built around a few core principles:
|
|
134
|
+
|
|
135
|
+
- **Separation of concerns**
|
|
136
|
+
Metric definitions, evaluation logic, and model interfaces live in separate packages.
|
|
137
|
+
|
|
138
|
+
- **Cost-aware evaluation**
|
|
139
|
+
Forecast accuracy is evaluated in terms of operational impact, not symmetric error
|
|
140
|
+
alone.
|
|
141
|
+
|
|
142
|
+
- **Operational realism**
|
|
143
|
+
Metrics and frameworks are designed for environments where underbuild and overbuild
|
|
144
|
+
have different consequences.
|
|
145
|
+
|
|
146
|
+
- **Composable tooling**
|
|
147
|
+
Users can adopt only the layers they need without committing to a monolith.
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## Examples and Tutorials
|
|
152
|
+
|
|
153
|
+
Examples, notebooks, and applied workflows are maintained in the separate
|
|
154
|
+
**`eb-examples`** repository.
|
|
155
|
+
|
|
156
|
+
This repository intentionally avoids embedding example code to keep the core packages
|
|
157
|
+
lean and focused.
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## Documentation
|
|
162
|
+
|
|
163
|
+
Unified documentation for the Electric Barometer ecosystem is available at:
|
|
164
|
+
|
|
165
|
+
https://economistician.github.io/eb-docs/
|
|
166
|
+
|
|
167
|
+
Documentation is generated directly from source code docstrings and kept consistent
|
|
168
|
+
across packages.
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## Status
|
|
173
|
+
|
|
174
|
+
Electric Barometer is under active development.
|
|
175
|
+
Public APIs may evolve prior to the first stable release.
|
|
176
|
+
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
## Authorship and Stewardship
|
|
180
|
+
|
|
181
|
+
The Electric Barometer ecosystem is designed and maintained by
|
|
182
|
+
**Kyle Corrie** under the *Economistician* moniker.
|
|
183
|
+
|
|
184
|
+
The project reflects applied research and production experience in
|
|
185
|
+
forecasting, operations research, and cost-asymmetric decision systems
|
|
186
|
+
within large-scale operational environments.
|
|
187
|
+
|
|
188
|
+
For questions, collaboration, or research inquiries:
|
|
189
|
+
|
|
190
|
+
- GitHub: https://github.com/Economistician
|
|
191
|
+
- Contact: kcorrie@economistician.com
|
|
192
|
+
|
|
193
|
+
Conceptual foundations and formal methodology are documented in the
|
|
194
|
+
companion research repository **eb-papers**.
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
## License
|
|
199
|
+
|
|
200
|
+
This project is licensed under the BSD 3-Clause License.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
LICENSE
|
|
2
|
+
README.md
|
|
3
|
+
pyproject.toml
|
|
4
|
+
src/electric_barometer/__init__.py
|
|
5
|
+
src/electric_barometer.egg-info/PKG-INFO
|
|
6
|
+
src/electric_barometer.egg-info/SOURCES.txt
|
|
7
|
+
src/electric_barometer.egg-info/dependency_links.txt
|
|
8
|
+
src/electric_barometer.egg-info/requires.txt
|
|
9
|
+
src/electric_barometer.egg-info/top_level.txt
|
|
10
|
+
tests/test_smoke_imports.py
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
eb-metrics<0.2,>=0.1.1
|
|
2
|
+
eb-evaluation<0.2,>=0.1.1
|
|
3
|
+
eb-adapters<0.2,>=0.1.0
|
|
4
|
+
|
|
5
|
+
[adapters]
|
|
6
|
+
eb-adapters<0.2,>=0.1.1
|
|
7
|
+
|
|
8
|
+
[all]
|
|
9
|
+
electric-barometer[metrics]
|
|
10
|
+
electric-barometer[evaluation]
|
|
11
|
+
electric-barometer[adapters]
|
|
12
|
+
electric-barometer[sklearn]
|
|
13
|
+
electric-barometer[tf]
|
|
14
|
+
|
|
15
|
+
[dev]
|
|
16
|
+
pytest>=8.0
|
|
17
|
+
pytest-cov>=5.0
|
|
18
|
+
|
|
19
|
+
[evaluation]
|
|
20
|
+
eb-evaluation<0.2,>=0.1.1
|
|
21
|
+
|
|
22
|
+
[metrics]
|
|
23
|
+
eb-metrics<0.2,>=0.1.1
|
|
24
|
+
|
|
25
|
+
[sklearn]
|
|
26
|
+
eb-metrics[sklearn]<0.2,>=0.1.1
|
|
27
|
+
|
|
28
|
+
[tf]
|
|
29
|
+
eb-metrics[tf]<0.2,>=0.1.1
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
electric_barometer
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import importlib
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
def _can_import(name: str) -> bool:
|
|
5
|
+
return importlib.util.find_spec(name) is not None
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def test_smoke_imports():
|
|
9
|
+
import electric_barometer # noqa: F401
|
|
10
|
+
import eb_metrics # noqa: F401
|
|
11
|
+
|
|
12
|
+
# Optional ecosystem packages (may not be installed yet)
|
|
13
|
+
if _can_import("eb_evaluation"):
|
|
14
|
+
import eb_evaluation # noqa: F401
|
|
15
|
+
if _can_import("eb_adapters"):
|
|
16
|
+
import eb_adapters # noqa: F401
|