alphaengine 0.3.0__tar.gz → 0.5.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.
- {alphaengine-0.3.0 → alphaengine-0.5.0}/PKG-INFO +11 -3
- {alphaengine-0.3.0 → alphaengine-0.5.0}/README.md +10 -2
- alphaengine-0.5.0/src/alphaengine/_version.py +47 -0
- {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/cli.py +395 -193
- {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/client/executor.py +81 -17
- {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/client/session.py +91 -57
- {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/commands.py +59 -2
- {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/core/signals.py +8 -1
- {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/study/report.py +6 -1
- {alphaengine-0.3.0 → alphaengine-0.5.0}/tests/test_cli.py +168 -0
- {alphaengine-0.3.0 → alphaengine-0.5.0}/tests/test_client.py +49 -8
- {alphaengine-0.3.0 → alphaengine-0.5.0}/tests/test_smoke.py +7 -2
- alphaengine-0.3.0/src/alphaengine/_version.py +0 -20
- {alphaengine-0.3.0 → alphaengine-0.5.0}/.github/workflows/ci.yml +0 -0
- {alphaengine-0.3.0 → alphaengine-0.5.0}/.github/workflows/publish.yml +0 -0
- {alphaengine-0.3.0 → alphaengine-0.5.0}/.gitignore +0 -0
- {alphaengine-0.3.0 → alphaengine-0.5.0}/LICENSE +0 -0
- {alphaengine-0.3.0 → alphaengine-0.5.0}/SECURITY.md +0 -0
- {alphaengine-0.3.0 → alphaengine-0.5.0}/pyproject.toml +0 -0
- {alphaengine-0.3.0 → alphaengine-0.5.0}/scripts/gen_docs.py +0 -0
- {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/__init__.py +0 -0
- {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/__main__.py +0 -0
- {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/agent/__init__.py +0 -0
- {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/agent/answer.py +0 -0
- {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/agent/driver.py +0 -0
- {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/auth.py +0 -0
- {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/client/__init__.py +0 -0
- {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/client/agent.py +0 -0
- {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/core/__init__.py +0 -0
- {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/core/backtest.py +0 -0
- {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/core/factors.py +0 -0
- {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/core/pairs.py +0 -0
- {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/core/performance.py +0 -0
- {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/core/profile.py +0 -0
- {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/core/risk.py +0 -0
- {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/core/screen.py +0 -0
- {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/core/series_shapes.py +0 -0
- {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/core/stress.py +0 -0
- {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/core/technical.py +0 -0
- {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/core/validation.py +0 -0
- {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/demo.py +0 -0
- {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/demo_book.py +0 -0
- {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/demo_returns.py +0 -0
- {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/demo_signal.py +0 -0
- {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/demo_universe.py +0 -0
- {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/loaders.py +0 -0
- {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/model.py +0 -0
- {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/py.typed +0 -0
- {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/study/__init__.py +0 -0
- {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/study/schema.py +0 -0
- {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/sweep/__init__.py +0 -0
- {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/sweep/runner.py +0 -0
- {alphaengine-0.3.0 → alphaengine-0.5.0}/tests/test_agent.py +0 -0
- {alphaengine-0.3.0 → alphaengine-0.5.0}/tests/test_answer.py +0 -0
- {alphaengine-0.3.0 → alphaengine-0.5.0}/tests/test_commands.py +0 -0
- {alphaengine-0.3.0 → alphaengine-0.5.0}/tests/test_goldens.py +0 -0
- {alphaengine-0.3.0 → alphaengine-0.5.0}/tests/test_loaders.py +0 -0
- {alphaengine-0.3.0 → alphaengine-0.5.0}/tests/test_screen.py +0 -0
- {alphaengine-0.3.0 → alphaengine-0.5.0}/tests/test_signals.py +0 -0
- {alphaengine-0.3.0 → alphaengine-0.5.0}/tests/test_sweep.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: alphaengine
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.5.0
|
|
4
4
|
Summary: Validated research tooling for investment strategies: deflation, overfitting detection, and honest trial counts.
|
|
5
5
|
Project-URL: Homepage, https://github.com/quantOSC/alphaengine
|
|
6
6
|
Project-URL: Documentation, https://github.com/quantOSC/alphaengine#readme
|
|
@@ -149,6 +149,9 @@ distinction is the whole of the data boundary below.
|
|
|
149
149
|
| Command | Does | Where |
|
|
150
150
|
|---|---|---|
|
|
151
151
|
| `demo` | run the built-in example offline, with no account and no data | shell + session |
|
|
152
|
+
| `runs [--limit N]` | your own week: what ran, what it decided, what it filed | shell + session |
|
|
153
|
+
| `gaps` | what your record says is UNANSWERED, and what closes each one | shell + session |
|
|
154
|
+
| `tonight [--budget N]` | what would run unattended tonight, without running any of it | shell + session |
|
|
152
155
|
| `workflows` | what the server offers, what each needs, and which reproduce | shell + session |
|
|
153
156
|
| `key [quantos \| anthropic \| openai]` | enter a credential now, or see which rungs are unlocked | session |
|
|
154
157
|
| `commands [verb]` | this directory, or one command in full | shell + session |
|
|
@@ -204,11 +207,11 @@ distinction is the whole of the data boundary below.
|
|
|
204
207
|
| `--data FILE` | a local CSV: wide, long, or a single series |
|
|
205
208
|
| `--universe NAME` | a universe registered in the portal, with its stored closes |
|
|
206
209
|
| `--symbol TICKER` | one name out of a loaded universe; its closes become the return series |
|
|
207
|
-
| `--sleeve NAME` | the sleeve this run belongs to, and the budget it is bound by |
|
|
208
|
-
| `--thesis ID` | a draft thesis to propose this run's shortlist as a sleeve for |
|
|
209
210
|
| `--label TEXT` | what to call the artifact this run produces |
|
|
210
211
|
| `--input K=V` | a workflow input; repeatable |
|
|
211
212
|
| `--quiet` | only the result, no step narration |
|
|
213
|
+
| `--limit N` | how many rows to show (default 25) |
|
|
214
|
+
| `--budget N` | how many runs a night is worth (default 3) |
|
|
212
215
|
|
|
213
216
|
### Examples
|
|
214
217
|
|
|
@@ -222,6 +225,11 @@ alphaengine overlap
|
|
|
222
225
|
alphaengine size
|
|
223
226
|
alphaengine monitor
|
|
224
227
|
alphaengine demo
|
|
228
|
+
alphaengine runs
|
|
229
|
+
alphaengine runs --limit 50
|
|
230
|
+
alphaengine gaps
|
|
231
|
+
alphaengine tonight
|
|
232
|
+
alphaengine tonight --budget 5
|
|
225
233
|
alphaengine workflows
|
|
226
234
|
alphaengine commands
|
|
227
235
|
alphaengine run screen_universe --universe sp500
|
|
@@ -108,6 +108,9 @@ distinction is the whole of the data boundary below.
|
|
|
108
108
|
| Command | Does | Where |
|
|
109
109
|
|---|---|---|
|
|
110
110
|
| `demo` | run the built-in example offline, with no account and no data | shell + session |
|
|
111
|
+
| `runs [--limit N]` | your own week: what ran, what it decided, what it filed | shell + session |
|
|
112
|
+
| `gaps` | what your record says is UNANSWERED, and what closes each one | shell + session |
|
|
113
|
+
| `tonight [--budget N]` | what would run unattended tonight, without running any of it | shell + session |
|
|
111
114
|
| `workflows` | what the server offers, what each needs, and which reproduce | shell + session |
|
|
112
115
|
| `key [quantos \| anthropic \| openai]` | enter a credential now, or see which rungs are unlocked | session |
|
|
113
116
|
| `commands [verb]` | this directory, or one command in full | shell + session |
|
|
@@ -163,11 +166,11 @@ distinction is the whole of the data boundary below.
|
|
|
163
166
|
| `--data FILE` | a local CSV: wide, long, or a single series |
|
|
164
167
|
| `--universe NAME` | a universe registered in the portal, with its stored closes |
|
|
165
168
|
| `--symbol TICKER` | one name out of a loaded universe; its closes become the return series |
|
|
166
|
-
| `--sleeve NAME` | the sleeve this run belongs to, and the budget it is bound by |
|
|
167
|
-
| `--thesis ID` | a draft thesis to propose this run's shortlist as a sleeve for |
|
|
168
169
|
| `--label TEXT` | what to call the artifact this run produces |
|
|
169
170
|
| `--input K=V` | a workflow input; repeatable |
|
|
170
171
|
| `--quiet` | only the result, no step narration |
|
|
172
|
+
| `--limit N` | how many rows to show (default 25) |
|
|
173
|
+
| `--budget N` | how many runs a night is worth (default 3) |
|
|
171
174
|
|
|
172
175
|
### Examples
|
|
173
176
|
|
|
@@ -181,6 +184,11 @@ alphaengine overlap
|
|
|
181
184
|
alphaengine size
|
|
182
185
|
alphaengine monitor
|
|
183
186
|
alphaengine demo
|
|
187
|
+
alphaengine runs
|
|
188
|
+
alphaengine runs --limit 50
|
|
189
|
+
alphaengine gaps
|
|
190
|
+
alphaengine tonight
|
|
191
|
+
alphaengine tonight --budget 5
|
|
184
192
|
alphaengine workflows
|
|
185
193
|
alphaengine commands
|
|
186
194
|
alphaengine run screen_universe --universe sp500
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"""Single source of the version.
|
|
2
|
+
|
|
3
|
+
Read by hatchling at build time (see [tool.hatch.version] in pyproject.toml), so
|
|
4
|
+
this file and the published artifact can never disagree.
|
|
5
|
+
|
|
6
|
+
SEMVER, WITH ONE LOCAL RULE: a MAJOR bump is required whenever a computed value
|
|
7
|
+
changes. Once this is on PyPI the numbers are a public contract, somebody's
|
|
8
|
+
saved study has to reproduce in two years, so a different result from the same
|
|
9
|
+
inputs is a breaking change even when the signature is untouched.
|
|
10
|
+
|
|
11
|
+
While the leading digit is 0, the MINOR position carries that rule: 0.1 -> 0.2
|
|
12
|
+
is what a changed figure costs. The API may still move underneath it.
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
# 0.3.0 IS THE RULE ABOVE BEING OBEYED, not a marketing number. The sweep
|
|
16
|
+
# addressed its result matrix by TRIAL index while failed trials contribute no
|
|
17
|
+
# column, so any grid with a failure read the wrong survivor's column (or
|
|
18
|
+
# raised). Fixing it changes the figure a 0.2 install would have produced from
|
|
19
|
+
# the same inputs — which is exactly what the MINOR position costs here.
|
|
20
|
+
#
|
|
21
|
+
# 0.4.0 IS THE SAME RULE AGAIN, and it is the harder case to spot because it
|
|
22
|
+
# reads as "we added some charts". The wire's figure cap went 64 -> 512 and the
|
|
23
|
+
# per-period cap in `core.signals` went with it, so the SAME INPUTS NOW PRODUCE
|
|
24
|
+
# DIFFERENT OUTPUT: `ic_by_period` returns up to 512 readings where it returned
|
|
25
|
+
# 64, `best_curve` and `drawdown_curve` carry a curve rather than a sketch of
|
|
26
|
+
# one, a grid of up to 512 configurations records its full surface instead of
|
|
27
|
+
# reporting `trials_recorded: false`, and `compute.overlap` emits a rolling
|
|
28
|
+
# correlation and a scatter it did not emit before.
|
|
29
|
+
#
|
|
30
|
+
# Not one of those is a bug fix, and every one changes what a saved study
|
|
31
|
+
# reproduces. That costs the MINOR position while the leading digit is 0.
|
|
32
|
+
#
|
|
33
|
+
# 0.5.0 IS THE RULE READ THE OTHER WAY: no computed value moved, and the SURFACE
|
|
34
|
+
# broke. `--sleeve` and `--thesis` are removed along with `Session.sleeves()`,
|
|
35
|
+
# `.theses()` and `.propose_sleeve()`. Their three routes were part of the thesis
|
|
36
|
+
# object model, which came out of the platform with the agent desk it was built
|
|
37
|
+
# around, so the flags could only have failed at the END of a run — after the
|
|
38
|
+
# work, naming a server error rather than a missing feature.
|
|
39
|
+
#
|
|
40
|
+
# A removed flag is a breaking change even though every figure is byte-identical,
|
|
41
|
+
# and while the leading digit is 0 the MINOR position carries that too.
|
|
42
|
+
#
|
|
43
|
+
# Added in the same release, and the reason the removal is not a loss: `gaps` and
|
|
44
|
+
# `tonight`. The record already knew which workflow closes each open gap and
|
|
45
|
+
# nothing traversed those edges; these two read that derivation, so the terminal
|
|
46
|
+
# can now answer "what have I NOT tried" and "what will run while I sleep".
|
|
47
|
+
__version__ = "0.5.0"
|