forecastscope 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.
- forecastscope-0.1.0/CHANGELOG.md +8 -0
- forecastscope-0.1.0/LICENSE +21 -0
- forecastscope-0.1.0/MANIFEST.in +3 -0
- forecastscope-0.1.0/PKG-INFO +85 -0
- forecastscope-0.1.0/README.md +50 -0
- forecastscope-0.1.0/VERSION +1 -0
- forecastscope-0.1.0/docs/boundary.md +31 -0
- forecastscope-0.1.0/docs/extraction-source.json +183 -0
- forecastscope-0.1.0/docs/product-parity.json +132 -0
- forecastscope-0.1.0/docs/test-environment.json +23 -0
- forecastscope-0.1.0/docs/validation.json +57 -0
- forecastscope-0.1.0/pyproject.toml +41 -0
- forecastscope-0.1.0/requirements-test.txt +16 -0
- forecastscope-0.1.0/setup.cfg +4 -0
- forecastscope-0.1.0/src/forecastscope/__init__.py +5 -0
- forecastscope-0.1.0/src/forecastscope/api.py +72 -0
- forecastscope-0.1.0/src/forecastscope/combinations/__init__.py +1 -0
- forecastscope-0.1.0/src/forecastscope/combinations/context_memory.py +127 -0
- forecastscope-0.1.0/src/forecastscope/combinations/validated.py +144 -0
- forecastscope-0.1.0/src/forecastscope/diagnostics/__init__.py +236 -0
- forecastscope-0.1.0/src/forecastscope/diagnostics/autocorrelation.py +217 -0
- forecastscope-0.1.0/src/forecastscope/diagnostics/causality.py +183 -0
- forecastscope-0.1.0/src/forecastscope/diagnostics/changepoints.py +172 -0
- forecastscope-0.1.0/src/forecastscope/diagnostics/distribution.py +180 -0
- forecastscope-0.1.0/src/forecastscope/diagnostics/filters.py +201 -0
- forecastscope-0.1.0/src/forecastscope/diagnostics/fractal.py +206 -0
- forecastscope-0.1.0/src/forecastscope/diagnostics/nonlinear.py +267 -0
- forecastscope-0.1.0/src/forecastscope/diagnostics/seasonality.py +218 -0
- forecastscope-0.1.0/src/forecastscope/diagnostics/sequence.py +130 -0
- forecastscope-0.1.0/src/forecastscope/diagnostics/stationarity.py +233 -0
- forecastscope-0.1.0/src/forecastscope/diagnostics/volatility.py +187 -0
- forecastscope-0.1.0/src/forecastscope/forecasting.py +263 -0
- forecastscope-0.1.0/src/forecastscope/types.py +12 -0
- forecastscope-0.1.0/src/forecastscope.egg-info/PKG-INFO +85 -0
- forecastscope-0.1.0/src/forecastscope.egg-info/SOURCES.txt +52 -0
- forecastscope-0.1.0/src/forecastscope.egg-info/dependency_links.txt +1 -0
- forecastscope-0.1.0/src/forecastscope.egg-info/requires.txt +24 -0
- forecastscope-0.1.0/src/forecastscope.egg-info/top_level.txt +1 -0
- forecastscope-0.1.0/tests/test_analysis_autocorrelation.py +87 -0
- forecastscope-0.1.0/tests/test_analysis_causality.py +84 -0
- forecastscope-0.1.0/tests/test_analysis_changepoints.py +80 -0
- forecastscope-0.1.0/tests/test_analysis_distribution.py +89 -0
- forecastscope-0.1.0/tests/test_analysis_filters.py +93 -0
- forecastscope-0.1.0/tests/test_analysis_fractal.py +95 -0
- forecastscope-0.1.0/tests/test_analysis_nonlinear.py +89 -0
- forecastscope-0.1.0/tests/test_analysis_seasonality.py +86 -0
- forecastscope-0.1.0/tests/test_analysis_stationarity.py +90 -0
- forecastscope-0.1.0/tests/test_analysis_volatility.py +88 -0
- forecastscope-0.1.0/tests/test_diagnostic_availability.py +27 -0
- forecastscope-0.1.0/tests/test_forecasters.py +75 -0
- forecastscope-0.1.0/tests/test_public_api.py +48 -0
- forecastscope-0.1.0/tests/test_sequence_diagnostics.py +88 -0
- forecastscope-0.1.0/tests/test_validated_combination.py +48 -0
- forecastscope-0.1.0/tools/check_product_parity.py +65 -0
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## 0.01.000 - unreleased
|
|
4
|
+
|
|
5
|
+
- Extract finite-prefix forecasting, five-expert combinations and sequence
|
|
6
|
+
diagnostics with explicit originating source bindings.
|
|
7
|
+
- Add strict public request and forecast-output boundaries.
|
|
8
|
+
- Preserve numerical adversarial controls; product adoption remains pending.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Felipe Santibanez-Leal
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: forecastscope
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Finite-prefix forecasting, temporal forecast combinations and sequence diagnostics.
|
|
5
|
+
Author: Felipe Santibáñez-Leal
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Repository, https://github.com/fsantibanezleal/CAOS_ForecastScope
|
|
8
|
+
Project-URL: Issues, https://github.com/fsantibanezleal/CAOS_ForecastScope/issues
|
|
9
|
+
Requires-Python: >=3.11
|
|
10
|
+
Description-Content-Type: text/markdown
|
|
11
|
+
License-File: LICENSE
|
|
12
|
+
Requires-Dist: numpy<3,>=2.0
|
|
13
|
+
Provides-Extra: diagnostics
|
|
14
|
+
Requires-Dist: scipy<2,>=1.15; extra == "diagnostics"
|
|
15
|
+
Requires-Dist: pandas<4,>=2.3; extra == "diagnostics"
|
|
16
|
+
Requires-Dist: statsmodels<0.15,>=0.14.6; extra == "diagnostics"
|
|
17
|
+
Requires-Dist: arch<9,>=8; extra == "diagnostics"
|
|
18
|
+
Requires-Dist: ruptures<2,>=1.1.10; extra == "diagnostics"
|
|
19
|
+
Requires-Dist: EMD-signal<2,>=1.9; extra == "diagnostics"
|
|
20
|
+
Requires-Dist: PyWavelets<2,>=1.8; extra == "diagnostics"
|
|
21
|
+
Requires-Dist: antropy<0.3,>=0.2.2; extra == "diagnostics"
|
|
22
|
+
Requires-Dist: nolds==0.6.3; extra == "diagnostics"
|
|
23
|
+
Requires-Dist: hurst==0.0.5; extra == "diagnostics"
|
|
24
|
+
Requires-Dist: MFDFA==0.4.3; extra == "diagnostics"
|
|
25
|
+
Requires-Dist: pycatch22<0.5,>=0.4.5; extra == "diagnostics"
|
|
26
|
+
Requires-Dist: stumpy<2,>=1.14.1; extra == "diagnostics"
|
|
27
|
+
Requires-Dist: scikit-learn<2,>=1.9; extra == "diagnostics"
|
|
28
|
+
Requires-Dist: coreforecast<0.1,>=0.0.17; extra == "diagnostics"
|
|
29
|
+
Provides-Extra: dev
|
|
30
|
+
Requires-Dist: pytest>=8; extra == "dev"
|
|
31
|
+
Requires-Dist: ruff<0.17,>=0.15; extra == "dev"
|
|
32
|
+
Requires-Dist: build; extra == "dev"
|
|
33
|
+
Requires-Dist: twine; extra == "dev"
|
|
34
|
+
Dynamic: license-file
|
|
35
|
+
|
|
36
|
+
# forecastscope
|
|
37
|
+
|
|
38
|
+
Finite-prefix forecasts, temporal combinations of reference experts, and sequence
|
|
39
|
+
diagnostics in a reusable Python library. The core requires NumPy. Diagnostic
|
|
40
|
+
implementations use optional scientific packages through `forecastscope.diagnostics`.
|
|
41
|
+
|
|
42
|
+
Release availability is recorded on [PyPI](https://pypi.org/project/forecastscope/)
|
|
43
|
+
and [GitHub](https://github.com/fsantibanezleal/CAOS_ForecastScope/releases).
|
|
44
|
+
Application adoption is a separate step. The extraction preserves numerical
|
|
45
|
+
equations while adding strict public request and output validation, lint
|
|
46
|
+
normalization and warnings for unavailable optional diagnostics. It makes no new forecast
|
|
47
|
+
accuracy, calibration, chaos-identification or operational-performance claim.
|
|
48
|
+
|
|
49
|
+
```python
|
|
50
|
+
import numpy as np
|
|
51
|
+
from forecastscope import combine, forecast
|
|
52
|
+
|
|
53
|
+
history = 20 + np.tile([1., 4., 2., 3.], 30)
|
|
54
|
+
columns = forecast("HoltWinters", history, seasonality=4, horizon=8)
|
|
55
|
+
allocation = combine("ValidationMix", history, seasonality=4, horizon=8)
|
|
56
|
+
print(columns.shape, allocation.weights, allocation.origins)
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
The caller supplies a contiguous observed history; raw arrays contain no timestamps,
|
|
60
|
+
so contiguity itself is a caller precondition. Future targets belong to the caller's evaluation
|
|
61
|
+
protocol. NaNs, infinite values, fractional horizons, invalid seasonal lags and
|
|
62
|
+
unsupported probability grids are refused by the public entry points. The reference kernels preserve their documented short-history policies, including
|
|
63
|
+
Holt fallback when additive seasonal smoothing lacks two cycles or has lag one.
|
|
64
|
+
Combination experts can consequently coincide on a nonseasonal input. The five
|
|
65
|
+
reference experts use approximate Gaussian residual intervals; ordered columns do
|
|
66
|
+
not establish calibration. Temporal validation filters an outer-prefix-defined
|
|
67
|
+
historical grid, and does not reconstruct the exact grid a historical service
|
|
68
|
+
would have proposed at every earlier date.
|
|
69
|
+
|
|
70
|
+
The fixed contextual combination has an unfavorable comparison with its matching
|
|
71
|
+
recency control in its original development study. Later validation-selected
|
|
72
|
+
combinations have bounded point-score improvements on specified external collections,
|
|
73
|
+
with stronger automatic-method and interval-score comparisons retained. The package
|
|
74
|
+
does not turn those studies into a general superiority claim.
|
|
75
|
+
|
|
76
|
+
For diagnostics, install the `diagnostics` extra and import the topic module, for
|
|
77
|
+
example `forecastscope.diagnostics.sequence.matrix_profile`. Diagnostics describe
|
|
78
|
+
their supplied sequence and can be retrospective. They must not be computed on a
|
|
79
|
+
future block and then treated as prefix-only model-selection inputs.
|
|
80
|
+
|
|
81
|
+
The source origin and exact input hashes are recorded in
|
|
82
|
+
[docs/extraction-source.json](docs/extraction-source.json). The originating software
|
|
83
|
+
is MIT licensed; its copyright and licence remain in this repository. Application
|
|
84
|
+
cases, generator seeds, source CSVs, artifact schemas, pipeline stages and web assets
|
|
85
|
+
are outside this library. See [the extraction boundary](docs/boundary.md).
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# forecastscope
|
|
2
|
+
|
|
3
|
+
Finite-prefix forecasts, temporal combinations of reference experts, and sequence
|
|
4
|
+
diagnostics in a reusable Python library. The core requires NumPy. Diagnostic
|
|
5
|
+
implementations use optional scientific packages through `forecastscope.diagnostics`.
|
|
6
|
+
|
|
7
|
+
Release availability is recorded on [PyPI](https://pypi.org/project/forecastscope/)
|
|
8
|
+
and [GitHub](https://github.com/fsantibanezleal/CAOS_ForecastScope/releases).
|
|
9
|
+
Application adoption is a separate step. The extraction preserves numerical
|
|
10
|
+
equations while adding strict public request and output validation, lint
|
|
11
|
+
normalization and warnings for unavailable optional diagnostics. It makes no new forecast
|
|
12
|
+
accuracy, calibration, chaos-identification or operational-performance claim.
|
|
13
|
+
|
|
14
|
+
```python
|
|
15
|
+
import numpy as np
|
|
16
|
+
from forecastscope import combine, forecast
|
|
17
|
+
|
|
18
|
+
history = 20 + np.tile([1., 4., 2., 3.], 30)
|
|
19
|
+
columns = forecast("HoltWinters", history, seasonality=4, horizon=8)
|
|
20
|
+
allocation = combine("ValidationMix", history, seasonality=4, horizon=8)
|
|
21
|
+
print(columns.shape, allocation.weights, allocation.origins)
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
The caller supplies a contiguous observed history; raw arrays contain no timestamps,
|
|
25
|
+
so contiguity itself is a caller precondition. Future targets belong to the caller's evaluation
|
|
26
|
+
protocol. NaNs, infinite values, fractional horizons, invalid seasonal lags and
|
|
27
|
+
unsupported probability grids are refused by the public entry points. The reference kernels preserve their documented short-history policies, including
|
|
28
|
+
Holt fallback when additive seasonal smoothing lacks two cycles or has lag one.
|
|
29
|
+
Combination experts can consequently coincide on a nonseasonal input. The five
|
|
30
|
+
reference experts use approximate Gaussian residual intervals; ordered columns do
|
|
31
|
+
not establish calibration. Temporal validation filters an outer-prefix-defined
|
|
32
|
+
historical grid, and does not reconstruct the exact grid a historical service
|
|
33
|
+
would have proposed at every earlier date.
|
|
34
|
+
|
|
35
|
+
The fixed contextual combination has an unfavorable comparison with its matching
|
|
36
|
+
recency control in its original development study. Later validation-selected
|
|
37
|
+
combinations have bounded point-score improvements on specified external collections,
|
|
38
|
+
with stronger automatic-method and interval-score comparisons retained. The package
|
|
39
|
+
does not turn those studies into a general superiority claim.
|
|
40
|
+
|
|
41
|
+
For diagnostics, install the `diagnostics` extra and import the topic module, for
|
|
42
|
+
example `forecastscope.diagnostics.sequence.matrix_profile`. Diagnostics describe
|
|
43
|
+
their supplied sequence and can be retrospective. They must not be computed on a
|
|
44
|
+
future block and then treated as prefix-only model-selection inputs.
|
|
45
|
+
|
|
46
|
+
The source origin and exact input hashes are recorded in
|
|
47
|
+
[docs/extraction-source.json](docs/extraction-source.json). The originating software
|
|
48
|
+
is MIT licensed; its copyright and licence remain in this repository. Application
|
|
49
|
+
cases, generator seeds, source CSVs, artifact schemas, pipeline stages and web assets
|
|
50
|
+
are outside this library. See [the extraction boundary](docs/boundary.md).
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.01.000
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Extraction boundary
|
|
2
|
+
|
|
3
|
+
The reusable domain is finite-prefix forecasting, contextual combination and
|
|
4
|
+
sequence diagnostics. These procedures accept numerical histories and explicit
|
|
5
|
+
settings, and produce numerical results. They do not acquire a case, select a
|
|
6
|
+
customer, publish a manuscript or promote an artifact candidate.
|
|
7
|
+
|
|
8
|
+
The initial source moves preserve the originating kernels and their mathematical
|
|
9
|
+
adversarial tests. The application-specific forecast result dependency is replaced
|
|
10
|
+
with an independent five-field result type. Import relocation does not establish
|
|
11
|
+
parity by itself: core controls, diagnostic controls, installed-wheel execution
|
|
12
|
+
and comparison against the source implementation are separate checks.
|
|
13
|
+
|
|
14
|
+
The stable top-level calls validate complete finite histories, integer horizon
|
|
15
|
+
and seasonality, probability order, output shape and finite ordered forecast
|
|
16
|
+
columns. Lower-level extracted kernels retain historical numerical conventions,
|
|
17
|
+
including finite parameter grids and degeneracy floors. Those conventions are
|
|
18
|
+
documented rather than silently redefined during extraction. A later method
|
|
19
|
+
improvement requires a separately identified experiment and release.
|
|
20
|
+
|
|
21
|
+
ChronoScope retains source manifests, source reconstruction, case generators,
|
|
22
|
+
runtime/checkpoint policy, rendering and admission. Corpus-study partition policy
|
|
23
|
+
and its fixed model-selection protocol also remain application responsibilities.
|
|
24
|
+
They cannot become library defaults merely by copying a research script.
|
|
25
|
+
|
|
26
|
+
The product's historical evidence remains bound to the source that produced it.
|
|
27
|
+
Migration must archive the exact old source inputs and bind fresh executions to
|
|
28
|
+
the published library revision. Updating a recorded historical source hash to
|
|
29
|
+
hide a migration is forbidden. A successful package release alone does not close
|
|
30
|
+
the application's package-boundary requirement: it must consume that release,
|
|
31
|
+
remove its private distribution declaration and pass its own reproduction gates.
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
{
|
|
2
|
+
"source_repository": "https://github.com/fsantibanezleal/CAOS_RES_ChronoScope",
|
|
3
|
+
"source_commit": "9bda497e29f1705939e15e96e68dbd9f35a6dcfa",
|
|
4
|
+
"licence": "MIT",
|
|
5
|
+
"scope": "Initial extraction candidate; not a published dependency or product migration",
|
|
6
|
+
"files": {
|
|
7
|
+
"forecasting.py": {
|
|
8
|
+
"source_path": "data-pipeline/chronoscopelab/model/forecasters.py",
|
|
9
|
+
"source_sha256": "940c194ab85fe9d2ccbd58b89b986c1e0bb580298954f06a8793117b6469e664",
|
|
10
|
+
"extracted_sha256": "f10386d4ee119ed4b2075e245249fd570eb958e495c5109cdc872f5612a132e0",
|
|
11
|
+
"initial_extracted_sha256": "373d0243cdf8e5fb5bb3b9d411466bb486dc6625ac8825c50815863df712f73f",
|
|
12
|
+
"initial_function_and_class_bodies": "AST-identical to origin",
|
|
13
|
+
"initial_change": "import relocation and module documentation only; no function or class body change",
|
|
14
|
+
"current_ast_changes": [],
|
|
15
|
+
"current_change": "Linter normalization; explicit unavailable-diagnostic warnings where applicable; numerical parity measured separately"
|
|
16
|
+
},
|
|
17
|
+
"combinations/context_memory.py": {
|
|
18
|
+
"source_path": "data-pipeline/chronoscopelab/model/context_memory.py",
|
|
19
|
+
"source_sha256": "dbafac6c79f05a562718e217113c170aac6a968ddbae6bf723e8e5e7292fc5ad",
|
|
20
|
+
"extracted_sha256": "b20f37561e9eceb338a164a824b4bb23df83029978384335793a4d7d8da0b80d",
|
|
21
|
+
"initial_extracted_sha256": "b20f37561e9eceb338a164a824b4bb23df83029978384335793a4d7d8da0b80d",
|
|
22
|
+
"initial_function_and_class_bodies": "AST-identical to origin",
|
|
23
|
+
"initial_change": "import relocation and module documentation only; no function or class body change",
|
|
24
|
+
"current_ast_changes": [],
|
|
25
|
+
"current_change": "Linter normalization; explicit unavailable-diagnostic warnings where applicable; numerical parity measured separately"
|
|
26
|
+
},
|
|
27
|
+
"combinations/validated.py": {
|
|
28
|
+
"source_path": "data-pipeline/chronoscopelab/model/validated_combination.py",
|
|
29
|
+
"source_sha256": "dfbf1940dd6bd4832e234cc2f1efb28b06d5b4f72f6006e9b49f551918c88c95",
|
|
30
|
+
"extracted_sha256": "cc9d4494394ac0b02ce17eb2464d4e9e54875c716781d9f0d50dd5a43a9f635d",
|
|
31
|
+
"initial_extracted_sha256": "4bb43a8f0a325e5033844a3a0990acde68c14c31a3a324f5acbb9b53beb8171b",
|
|
32
|
+
"initial_function_and_class_bodies": "AST-identical to origin",
|
|
33
|
+
"initial_change": "import relocation and module documentation only; no function or class body change",
|
|
34
|
+
"current_ast_changes": [
|
|
35
|
+
"fit_validated"
|
|
36
|
+
],
|
|
37
|
+
"current_change": "Linter normalization; explicit unavailable-diagnostic warnings where applicable; numerical parity measured separately"
|
|
38
|
+
},
|
|
39
|
+
"diagnostics/autocorrelation.py": {
|
|
40
|
+
"source_path": "data-pipeline/chronoscopelab/analysis/autocorrelation.py",
|
|
41
|
+
"source_sha256": "a05b538d3d89d4a11081ab35e9ff01430157571063a5dae9af65d7127e110552",
|
|
42
|
+
"extracted_sha256": "a05b538d3d89d4a11081ab35e9ff01430157571063a5dae9af65d7127e110552",
|
|
43
|
+
"initial_extracted_sha256": "a05b538d3d89d4a11081ab35e9ff01430157571063a5dae9af65d7127e110552",
|
|
44
|
+
"initial_function_and_class_bodies": "AST-identical to origin",
|
|
45
|
+
"initial_change": "import relocation and module documentation only; no function or class body change",
|
|
46
|
+
"current_ast_changes": [],
|
|
47
|
+
"current_change": "Linter normalization; explicit unavailable-diagnostic warnings where applicable; numerical parity measured separately"
|
|
48
|
+
},
|
|
49
|
+
"diagnostics/causality.py": {
|
|
50
|
+
"source_path": "data-pipeline/chronoscopelab/analysis/causality.py",
|
|
51
|
+
"source_sha256": "e9b8fe8bc9b64a5cadf0e7accc2fae0b322fa1511958c375828f8ffede840c01",
|
|
52
|
+
"extracted_sha256": "f10c2313e4f25f3cda929ed2db6193e45ab05bdc366cf76962809a8233526ae8",
|
|
53
|
+
"initial_extracted_sha256": "e9b8fe8bc9b64a5cadf0e7accc2fae0b322fa1511958c375828f8ffede840c01",
|
|
54
|
+
"initial_function_and_class_bodies": "AST-identical to origin",
|
|
55
|
+
"initial_change": "import relocation and module documentation only; no function or class body change",
|
|
56
|
+
"current_ast_changes": [
|
|
57
|
+
"causality_report"
|
|
58
|
+
],
|
|
59
|
+
"current_change": "Linter normalization; explicit unavailable-diagnostic warnings where applicable; numerical parity measured separately"
|
|
60
|
+
},
|
|
61
|
+
"diagnostics/changepoints.py": {
|
|
62
|
+
"source_path": "data-pipeline/chronoscopelab/analysis/changepoints.py",
|
|
63
|
+
"source_sha256": "dc0ce4fcb0eae8ca1b58bcf12046d09298d9807ce83e3d9344528a583b8e1466",
|
|
64
|
+
"extracted_sha256": "c482aea7728181e162c951da5f6e787ab89c958da9fa7f7717a882bb327551c2",
|
|
65
|
+
"initial_extracted_sha256": "dc0ce4fcb0eae8ca1b58bcf12046d09298d9807ce83e3d9344528a583b8e1466",
|
|
66
|
+
"initial_function_and_class_bodies": "AST-identical to origin",
|
|
67
|
+
"initial_change": "import relocation and module documentation only; no function or class body change",
|
|
68
|
+
"current_ast_changes": [
|
|
69
|
+
"_segments",
|
|
70
|
+
"changepoints_report"
|
|
71
|
+
],
|
|
72
|
+
"current_change": "Linter normalization; explicit unavailable-diagnostic warnings where applicable; numerical parity measured separately"
|
|
73
|
+
},
|
|
74
|
+
"diagnostics/distribution.py": {
|
|
75
|
+
"source_path": "data-pipeline/chronoscopelab/analysis/distribution.py",
|
|
76
|
+
"source_sha256": "36d79880747d2cef9c715e84e23586014988b77eadb78acac33edf6cf3d07f42",
|
|
77
|
+
"extracted_sha256": "39d3ce3d551727d44963bfdbcaae0723f6673639fe83a3267cdef75224b59889",
|
|
78
|
+
"initial_extracted_sha256": "36d79880747d2cef9c715e84e23586014988b77eadb78acac33edf6cf3d07f42",
|
|
79
|
+
"initial_function_and_class_bodies": "AST-identical to origin",
|
|
80
|
+
"initial_change": "import relocation and module documentation only; no function or class body change",
|
|
81
|
+
"current_ast_changes": [
|
|
82
|
+
"complexity",
|
|
83
|
+
"distribution_report"
|
|
84
|
+
],
|
|
85
|
+
"current_change": "Linter normalization; explicit unavailable-diagnostic warnings where applicable; numerical parity measured separately"
|
|
86
|
+
},
|
|
87
|
+
"diagnostics/filters.py": {
|
|
88
|
+
"source_path": "data-pipeline/chronoscopelab/analysis/filters.py",
|
|
89
|
+
"source_sha256": "227301d30878b6379d9588e8baa204a03a1d8d8dd4a329f90df8ac65db87741f",
|
|
90
|
+
"extracted_sha256": "12a85b23ab530c1d20a960dc2d97d109d2fc3fda67a82777c56cc3a446487bcc",
|
|
91
|
+
"initial_extracted_sha256": "227301d30878b6379d9588e8baa204a03a1d8d8dd4a329f90df8ac65db87741f",
|
|
92
|
+
"initial_function_and_class_bodies": "AST-identical to origin",
|
|
93
|
+
"initial_change": "import relocation and module documentation only; no function or class body change",
|
|
94
|
+
"current_ast_changes": [
|
|
95
|
+
"filters_report"
|
|
96
|
+
],
|
|
97
|
+
"current_change": "Linter normalization; explicit unavailable-diagnostic warnings where applicable; numerical parity measured separately"
|
|
98
|
+
},
|
|
99
|
+
"diagnostics/fractal.py": {
|
|
100
|
+
"source_path": "data-pipeline/chronoscopelab/analysis/fractal.py",
|
|
101
|
+
"source_sha256": "f1fa42f4c0676a97cde5a07ca79e9a832ae356c13451a7d46ee3859c107f3b1e",
|
|
102
|
+
"extracted_sha256": "c4c9752da0abee7d29eec8dd28445b2ebc8d7db49a5264d6e2406019bc3087cc",
|
|
103
|
+
"initial_extracted_sha256": "f1fa42f4c0676a97cde5a07ca79e9a832ae356c13451a7d46ee3859c107f3b1e",
|
|
104
|
+
"initial_function_and_class_bodies": "AST-identical to origin",
|
|
105
|
+
"initial_change": "import relocation and module documentation only; no function or class body change",
|
|
106
|
+
"current_ast_changes": [
|
|
107
|
+
"dcca_coefficient",
|
|
108
|
+
"fractal_report",
|
|
109
|
+
"hurst"
|
|
110
|
+
],
|
|
111
|
+
"current_change": "Linter normalization; explicit unavailable-diagnostic warnings where applicable; numerical parity measured separately"
|
|
112
|
+
},
|
|
113
|
+
"diagnostics/nonlinear.py": {
|
|
114
|
+
"source_path": "data-pipeline/chronoscopelab/analysis/nonlinear.py",
|
|
115
|
+
"source_sha256": "fcbc4a473636d1dd8a6c13b5170d1d6ee977fd6dc78beb56bd2d12f2caa6f593",
|
|
116
|
+
"extracted_sha256": "d3d139e2a65716fdf9471335101677a01508cd2ac0f972679c8ff825faadbc18",
|
|
117
|
+
"initial_extracted_sha256": "fcbc4a473636d1dd8a6c13b5170d1d6ee977fd6dc78beb56bd2d12f2caa6f593",
|
|
118
|
+
"initial_function_and_class_bodies": "AST-identical to origin",
|
|
119
|
+
"initial_change": "import relocation and module documentation only; no function or class body change",
|
|
120
|
+
"current_ast_changes": [
|
|
121
|
+
"nonlinear_report"
|
|
122
|
+
],
|
|
123
|
+
"current_change": "Linter normalization; explicit unavailable-diagnostic warnings where applicable; numerical parity measured separately"
|
|
124
|
+
},
|
|
125
|
+
"diagnostics/seasonality.py": {
|
|
126
|
+
"source_path": "data-pipeline/chronoscopelab/analysis/seasonality.py",
|
|
127
|
+
"source_sha256": "99c328fdb6b792b73485928146313e613f9c3ba354b1760e82e8bdd7e50b7cbb",
|
|
128
|
+
"extracted_sha256": "c9c41ae90230eef5e3eec723a44792476ed57646ca1af1f11b6e5ee9bb9a5ace",
|
|
129
|
+
"initial_extracted_sha256": "99c328fdb6b792b73485928146313e613f9c3ba354b1760e82e8bdd7e50b7cbb",
|
|
130
|
+
"initial_function_and_class_bodies": "AST-identical to origin",
|
|
131
|
+
"initial_change": "import relocation and module documentation only; no function or class body change",
|
|
132
|
+
"current_ast_changes": [
|
|
133
|
+
"seasonality_report"
|
|
134
|
+
],
|
|
135
|
+
"current_change": "Linter normalization; explicit unavailable-diagnostic warnings where applicable; numerical parity measured separately"
|
|
136
|
+
},
|
|
137
|
+
"diagnostics/sequence.py": {
|
|
138
|
+
"source_path": "data-pipeline/chronoscopelab/analysis/sequence.py",
|
|
139
|
+
"source_sha256": "63cf6a21ba110d08fd5bde2c9e4df2ec53a75b29ab03fba151b83be35c7420b9",
|
|
140
|
+
"extracted_sha256": "a89bc7f5353fa892e99fc76383434bdc9d717d988a6942bc6c44fbe0a891c8da",
|
|
141
|
+
"initial_extracted_sha256": "63cf6a21ba110d08fd5bde2c9e4df2ec53a75b29ab03fba151b83be35c7420b9",
|
|
142
|
+
"initial_function_and_class_bodies": "AST-identical to origin",
|
|
143
|
+
"initial_change": "import relocation and module documentation only; no function or class body change",
|
|
144
|
+
"current_ast_changes": [
|
|
145
|
+
"matrix_profile"
|
|
146
|
+
],
|
|
147
|
+
"current_change": "Linter normalization; explicit unavailable-diagnostic warnings where applicable; numerical parity measured separately"
|
|
148
|
+
},
|
|
149
|
+
"diagnostics/stationarity.py": {
|
|
150
|
+
"source_path": "data-pipeline/chronoscopelab/analysis/stationarity.py",
|
|
151
|
+
"source_sha256": "42490c61430e82012d163318fbf231a0a21c50b4e53ca9d2e1c58a13bf257029",
|
|
152
|
+
"extracted_sha256": "42490c61430e82012d163318fbf231a0a21c50b4e53ca9d2e1c58a13bf257029",
|
|
153
|
+
"initial_extracted_sha256": "42490c61430e82012d163318fbf231a0a21c50b4e53ca9d2e1c58a13bf257029",
|
|
154
|
+
"initial_function_and_class_bodies": "AST-identical to origin",
|
|
155
|
+
"initial_change": "import relocation and module documentation only; no function or class body change",
|
|
156
|
+
"current_ast_changes": [],
|
|
157
|
+
"current_change": "Linter normalization; explicit unavailable-diagnostic warnings where applicable; numerical parity measured separately"
|
|
158
|
+
},
|
|
159
|
+
"diagnostics/volatility.py": {
|
|
160
|
+
"source_path": "data-pipeline/chronoscopelab/analysis/volatility.py",
|
|
161
|
+
"source_sha256": "38685dc0684377d816ead19cff357c75caef68c5db7038fb9c5c96ad213978c0",
|
|
162
|
+
"extracted_sha256": "1113870a8749f528821265c14fe0998fd936521704aaca50c2e60d5102997215",
|
|
163
|
+
"initial_extracted_sha256": "38685dc0684377d816ead19cff357c75caef68c5db7038fb9c5c96ad213978c0",
|
|
164
|
+
"initial_function_and_class_bodies": "AST-identical to origin",
|
|
165
|
+
"initial_change": "import relocation and module documentation only; no function or class body change",
|
|
166
|
+
"current_ast_changes": [
|
|
167
|
+
"volatility_report"
|
|
168
|
+
],
|
|
169
|
+
"current_change": "Linter normalization; explicit unavailable-diagnostic warnings where applicable; numerical parity measured separately"
|
|
170
|
+
},
|
|
171
|
+
"diagnostics/__init__.py": {
|
|
172
|
+
"source_path": "data-pipeline/chronoscopelab/analysis/__init__.py",
|
|
173
|
+
"source_sha256": "875ba0e041f06378c91d12ac260ad30245f6404d7cb0e747e5ebb223ad991437",
|
|
174
|
+
"extracted_sha256": "0082636cf6110170eb52fa6f9067d34492aa21027772e19acc4030f49d195d46",
|
|
175
|
+
"initial_extracted_sha256": "61ca22b5c6eb33191702e43b00e51eea7b17e3af5aa1283949e82d2cd2dc157b",
|
|
176
|
+
"initial_function_and_class_bodies": "AST-identical to origin",
|
|
177
|
+
"initial_change": "import relocation and module documentation only; no function or class body change",
|
|
178
|
+
"current_ast_changes": [],
|
|
179
|
+
"current_change": "Linter normalization; explicit unavailable-diagnostic warnings where applicable; numerical parity measured separately"
|
|
180
|
+
}
|
|
181
|
+
},
|
|
182
|
+
"initial_extraction_commit": "4ac2e9e37cdb4cdb0775957cd8ecea87771d3c58"
|
|
183
|
+
}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
{
|
|
2
|
+
"state": "installed-wheel-parity; product adoption separate",
|
|
3
|
+
"source_artifact_sha256": "8b49b2fe6298bede97a209ac117389152bf1859d78e0006a96e8521ac02a16a1",
|
|
4
|
+
"cases": [
|
|
5
|
+
{
|
|
6
|
+
"case_id": "BRKV_level_shift",
|
|
7
|
+
"history_sha256": "638f51aba294642d2f443ca2696529c7a6b567775cf289ef2b2410d9567c2752",
|
|
8
|
+
"history_length": 288,
|
|
9
|
+
"horizon": 12,
|
|
10
|
+
"seasonality": 12,
|
|
11
|
+
"exact_method_comparisons": 10
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"case_id": "CHAO_mackey",
|
|
15
|
+
"history_sha256": "f45f00b8f7d20dff4913033654380eed162f3c0b76cec4b4c632a282618b4eaa",
|
|
16
|
+
"history_length": 488,
|
|
17
|
+
"horizon": 12,
|
|
18
|
+
"seasonality": 1,
|
|
19
|
+
"exact_method_comparisons": 10
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"case_id": "CTRL_white_noise",
|
|
23
|
+
"history_sha256": "c616114588fc458e97120ddcaf524a6b514cd0d5f7d7da4130a2729ad528dcb4",
|
|
24
|
+
"history_length": 148,
|
|
25
|
+
"horizon": 12,
|
|
26
|
+
"seasonality": 1,
|
|
27
|
+
"exact_method_comparisons": 10
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"case_id": "EXOG_promo",
|
|
31
|
+
"history_sha256": "e9eda802c21d30f314343920fa40d0c563dee28d85c4c8906a7be43ee55489fe",
|
|
32
|
+
"history_length": 226,
|
|
33
|
+
"horizon": 14,
|
|
34
|
+
"seasonality": 7,
|
|
35
|
+
"exact_method_comparisons": 10
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"case_id": "HETV_garch",
|
|
39
|
+
"history_sha256": "1fd83131c366f0fbd6d53063d5c3f597bcd175b98820c8d39afe069b2569e3d3",
|
|
40
|
+
"history_length": 488,
|
|
41
|
+
"horizon": 12,
|
|
42
|
+
"seasonality": 1,
|
|
43
|
+
"exact_method_comparisons": 10
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"case_id": "INTM_demand",
|
|
47
|
+
"history_sha256": "2af699ad52da5f20ea73083cf827f08d7313c88e1c93c3b2e947f89325b5403c",
|
|
48
|
+
"history_length": 188,
|
|
49
|
+
"horizon": 12,
|
|
50
|
+
"seasonality": 1,
|
|
51
|
+
"exact_method_comparisons": 10
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"case_id": "LMEM_fractional",
|
|
55
|
+
"history_sha256": "8db0096900fb2afa0c885ba844b82cbe6a9695af50778bff076a9582902e00bd",
|
|
56
|
+
"history_length": 488,
|
|
57
|
+
"horizon": 12,
|
|
58
|
+
"seasonality": 1,
|
|
59
|
+
"exact_method_comparisons": 10
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"case_id": "MSEA_daily_weekly",
|
|
63
|
+
"history_sha256": "55ca773de66d99466146704eaa768a5e58c1fc24489750a1ccfc5a9d3ed84df2",
|
|
64
|
+
"history_length": 648,
|
|
65
|
+
"horizon": 24,
|
|
66
|
+
"seasonality": 24,
|
|
67
|
+
"exact_method_comparisons": 10
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"case_id": "REAL_electricity",
|
|
71
|
+
"history_sha256": "f52426a81659d943fda200e18b2a87a7204ee95d7f6a38534826a4107e5673f1",
|
|
72
|
+
"history_length": 456,
|
|
73
|
+
"horizon": 24,
|
|
74
|
+
"seasonality": 24,
|
|
75
|
+
"exact_method_comparisons": 10
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"case_id": "REAL_m4_daily",
|
|
79
|
+
"history_sha256": "19778fb24286d629735984783e956156a601998e4780a4a84523b41da6cd08b3",
|
|
80
|
+
"history_length": 386,
|
|
81
|
+
"horizon": 14,
|
|
82
|
+
"seasonality": 7,
|
|
83
|
+
"exact_method_comparisons": 10
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"case_id": "REAL_m4_hourly",
|
|
87
|
+
"history_sha256": "88c3fc19baeda2a2382373e7faca054dda3d4724eb385590a128b0dcbee3c52d",
|
|
88
|
+
"history_length": 456,
|
|
89
|
+
"horizon": 24,
|
|
90
|
+
"seasonality": 24,
|
|
91
|
+
"exact_method_comparisons": 10
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"case_id": "REAL_pm25",
|
|
95
|
+
"history_sha256": "ea8eb0c5ac7a0d73d28490690ce1a77beb4a6ce0ee720b21f74a89b2601e8916",
|
|
96
|
+
"history_length": 456,
|
|
97
|
+
"horizon": 24,
|
|
98
|
+
"seasonality": 24,
|
|
99
|
+
"exact_method_comparisons": 10
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"case_id": "RWLK_noise",
|
|
103
|
+
"history_sha256": "67223f6d58ffdab11c374e18b477bdf7cb5f06a77d1d61bc8d73eafc42f484a9",
|
|
104
|
+
"history_length": 188,
|
|
105
|
+
"horizon": 12,
|
|
106
|
+
"seasonality": 1,
|
|
107
|
+
"exact_method_comparisons": 10
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"case_id": "SEAS_hourly",
|
|
111
|
+
"history_sha256": "1f7fb34587e6e19742a4e0c392edbd7f24b6752e1b573d06bbcca6f340fb50a9",
|
|
112
|
+
"history_length": 456,
|
|
113
|
+
"horizon": 24,
|
|
114
|
+
"seasonality": 24,
|
|
115
|
+
"exact_method_comparisons": 10
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
"case_id": "TRND_seasonal",
|
|
119
|
+
"history_sha256": "3edefdb9459052438bb4948035d45f1fe83f9797e8415f1c49516e83840a6016",
|
|
120
|
+
"history_length": 168,
|
|
121
|
+
"horizon": 12,
|
|
122
|
+
"seasonality": 12,
|
|
123
|
+
"exact_method_comparisons": 10
|
|
124
|
+
}
|
|
125
|
+
],
|
|
126
|
+
"total_exact_comparisons": 150,
|
|
127
|
+
"scope": "Full-precision quantile matrices, allocation weights and historical origins; no new accuracy trial",
|
|
128
|
+
"runtime": {
|
|
129
|
+
"python": "3.12.10",
|
|
130
|
+
"numpy": "2.5.4"
|
|
131
|
+
}
|
|
132
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"python": "3.12.10",
|
|
3
|
+
"platform_class": "Windows x86_64",
|
|
4
|
+
"scientific_dependencies": {
|
|
5
|
+
"numpy": "2.5.4",
|
|
6
|
+
"pandas": "3.1.1",
|
|
7
|
+
"scipy": "1.18.1",
|
|
8
|
+
"statsmodels": "0.14.6",
|
|
9
|
+
"arch": "8.0.0",
|
|
10
|
+
"EMD-signal": "1.10.0",
|
|
11
|
+
"PyWavelets": "1.10.0",
|
|
12
|
+
"antropy": "0.2.3",
|
|
13
|
+
"nolds": "0.6.3",
|
|
14
|
+
"hurst": "0.0.5",
|
|
15
|
+
"MFDFA": "0.4.3",
|
|
16
|
+
"pycatch22": "0.4.5",
|
|
17
|
+
"stumpy": "1.14.1",
|
|
18
|
+
"scikit-learn": "1.9.1",
|
|
19
|
+
"coreforecast": "0.0.20",
|
|
20
|
+
"numba": "0.68.1"
|
|
21
|
+
},
|
|
22
|
+
"scope": "Local diagnostic validation environment; the consuming product retains its own exact pins"
|
|
23
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{
|
|
2
|
+
"state": "validated-local-candidate; PyPI publication and product adoption pending",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"checks": [
|
|
5
|
+
{
|
|
6
|
+
"check": "source core controls",
|
|
7
|
+
"passed": 31,
|
|
8
|
+
"python": "3.13.14",
|
|
9
|
+
"numpy": "2.4.6"
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"check": "complete installed-wheel diagnostic and core suite",
|
|
13
|
+
"passed": 128,
|
|
14
|
+
"warnings_retained": 35,
|
|
15
|
+
"python": "3.12.10",
|
|
16
|
+
"numpy": "2.5.4"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"check": "isolated installed wheel without SciPy or product package",
|
|
20
|
+
"passed": 31,
|
|
21
|
+
"python": "3.12.10"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"check": "exact product forecast and combination comparisons",
|
|
25
|
+
"passed": 150,
|
|
26
|
+
"cases": 15
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"check": "wheel and sdist metadata",
|
|
30
|
+
"state": "pass"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"check": "declared dependencies",
|
|
34
|
+
"state": "no broken requirements"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"check": "Ruff current source tests and parity tooling",
|
|
38
|
+
"state": "pass"
|
|
39
|
+
}
|
|
40
|
+
],
|
|
41
|
+
"retained_failures": [
|
|
42
|
+
{
|
|
43
|
+
"check": "initial optional diagnostic suite",
|
|
44
|
+
"passed": 125,
|
|
45
|
+
"failed": 1,
|
|
46
|
+
"reason": "Missing coreforecast declaration for Guerrero seasonal Box-Cox; dependency added and complete suite rerun"
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"check": "first current-Ruff check",
|
|
50
|
+
"reason": "New lint rules found import/order/normalization and silent optional-error handling; corrected, no rules disabled"
|
|
51
|
+
}
|
|
52
|
+
],
|
|
53
|
+
"limits": [
|
|
54
|
+
"These are numerical and packaging controls, not a new forecasting accuracy trial",
|
|
55
|
+
"Linux CI, PyPI publication, app migration and its own release gates are separate"
|
|
56
|
+
]
|
|
57
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=77", "wheel"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "forecastscope"
|
|
7
|
+
version = "0.1.0"
|
|
8
|
+
description = "Finite-prefix forecasting, temporal forecast combinations and sequence diagnostics."
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.11"
|
|
11
|
+
license = "MIT"
|
|
12
|
+
authors = [{name = "Felipe Santibáñez-Leal"}]
|
|
13
|
+
dependencies = ["numpy>=2.0,<3"]
|
|
14
|
+
|
|
15
|
+
[project.optional-dependencies]
|
|
16
|
+
diagnostics = [
|
|
17
|
+
"scipy>=1.15,<2", "pandas>=2.3,<4", "statsmodels>=0.14.6,<0.15", "arch>=8,<9",
|
|
18
|
+
"ruptures>=1.1.10,<2", "EMD-signal>=1.9,<2", "PyWavelets>=1.8,<2",
|
|
19
|
+
"antropy>=0.2.2,<0.3", "nolds==0.6.3", "hurst==0.0.5", "MFDFA==0.4.3",
|
|
20
|
+
"pycatch22>=0.4.5,<0.5", "stumpy>=1.14.1,<2", "scikit-learn>=1.9,<2",
|
|
21
|
+
"coreforecast>=0.0.17,<0.1",
|
|
22
|
+
]
|
|
23
|
+
dev = ["pytest>=8", "ruff>=0.15,<0.17", "build", "twine"]
|
|
24
|
+
|
|
25
|
+
[project.urls]
|
|
26
|
+
Repository = "https://github.com/fsantibanezleal/CAOS_ForecastScope"
|
|
27
|
+
Issues = "https://github.com/fsantibanezleal/CAOS_ForecastScope/issues"
|
|
28
|
+
|
|
29
|
+
[tool.setuptools.packages.find]
|
|
30
|
+
where = ["src"]
|
|
31
|
+
|
|
32
|
+
[tool.pytest.ini_options]
|
|
33
|
+
testpaths = ["tests"]
|
|
34
|
+
addopts = "-q"
|
|
35
|
+
|
|
36
|
+
[tool.ruff]
|
|
37
|
+
line-length = 110
|
|
38
|
+
target-version = "py311"
|
|
39
|
+
|
|
40
|
+
[tool.ruff.lint]
|
|
41
|
+
ignore = ["E741"]
|