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.
Files changed (60) hide show
  1. {alphaengine-0.3.0 → alphaengine-0.5.0}/PKG-INFO +11 -3
  2. {alphaengine-0.3.0 → alphaengine-0.5.0}/README.md +10 -2
  3. alphaengine-0.5.0/src/alphaengine/_version.py +47 -0
  4. {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/cli.py +395 -193
  5. {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/client/executor.py +81 -17
  6. {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/client/session.py +91 -57
  7. {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/commands.py +59 -2
  8. {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/core/signals.py +8 -1
  9. {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/study/report.py +6 -1
  10. {alphaengine-0.3.0 → alphaengine-0.5.0}/tests/test_cli.py +168 -0
  11. {alphaengine-0.3.0 → alphaengine-0.5.0}/tests/test_client.py +49 -8
  12. {alphaengine-0.3.0 → alphaengine-0.5.0}/tests/test_smoke.py +7 -2
  13. alphaengine-0.3.0/src/alphaengine/_version.py +0 -20
  14. {alphaengine-0.3.0 → alphaengine-0.5.0}/.github/workflows/ci.yml +0 -0
  15. {alphaengine-0.3.0 → alphaengine-0.5.0}/.github/workflows/publish.yml +0 -0
  16. {alphaengine-0.3.0 → alphaengine-0.5.0}/.gitignore +0 -0
  17. {alphaengine-0.3.0 → alphaengine-0.5.0}/LICENSE +0 -0
  18. {alphaengine-0.3.0 → alphaengine-0.5.0}/SECURITY.md +0 -0
  19. {alphaengine-0.3.0 → alphaengine-0.5.0}/pyproject.toml +0 -0
  20. {alphaengine-0.3.0 → alphaengine-0.5.0}/scripts/gen_docs.py +0 -0
  21. {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/__init__.py +0 -0
  22. {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/__main__.py +0 -0
  23. {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/agent/__init__.py +0 -0
  24. {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/agent/answer.py +0 -0
  25. {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/agent/driver.py +0 -0
  26. {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/auth.py +0 -0
  27. {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/client/__init__.py +0 -0
  28. {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/client/agent.py +0 -0
  29. {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/core/__init__.py +0 -0
  30. {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/core/backtest.py +0 -0
  31. {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/core/factors.py +0 -0
  32. {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/core/pairs.py +0 -0
  33. {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/core/performance.py +0 -0
  34. {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/core/profile.py +0 -0
  35. {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/core/risk.py +0 -0
  36. {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/core/screen.py +0 -0
  37. {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/core/series_shapes.py +0 -0
  38. {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/core/stress.py +0 -0
  39. {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/core/technical.py +0 -0
  40. {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/core/validation.py +0 -0
  41. {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/demo.py +0 -0
  42. {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/demo_book.py +0 -0
  43. {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/demo_returns.py +0 -0
  44. {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/demo_signal.py +0 -0
  45. {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/demo_universe.py +0 -0
  46. {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/loaders.py +0 -0
  47. {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/model.py +0 -0
  48. {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/py.typed +0 -0
  49. {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/study/__init__.py +0 -0
  50. {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/study/schema.py +0 -0
  51. {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/sweep/__init__.py +0 -0
  52. {alphaengine-0.3.0 → alphaengine-0.5.0}/src/alphaengine/sweep/runner.py +0 -0
  53. {alphaengine-0.3.0 → alphaengine-0.5.0}/tests/test_agent.py +0 -0
  54. {alphaengine-0.3.0 → alphaengine-0.5.0}/tests/test_answer.py +0 -0
  55. {alphaengine-0.3.0 → alphaengine-0.5.0}/tests/test_commands.py +0 -0
  56. {alphaengine-0.3.0 → alphaengine-0.5.0}/tests/test_goldens.py +0 -0
  57. {alphaengine-0.3.0 → alphaengine-0.5.0}/tests/test_loaders.py +0 -0
  58. {alphaengine-0.3.0 → alphaengine-0.5.0}/tests/test_screen.py +0 -0
  59. {alphaengine-0.3.0 → alphaengine-0.5.0}/tests/test_signals.py +0 -0
  60. {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.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"