aether-quant 1.0.0__tar.gz → 4.12.3__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 (388) hide show
  1. {aether_quant-1.0.0 → aether_quant-4.12.3}/.dockerignore +12 -0
  2. {aether_quant-1.0.0 → aether_quant-4.12.3}/.github/workflows/ci.yml +3 -0
  3. {aether_quant-1.0.0 → aether_quant-4.12.3}/.gitignore +10 -0
  4. aether_quant-4.12.3/Dockerfile +53 -0
  5. {aether_quant-1.0.0 → aether_quant-4.12.3}/PKG-INFO +1 -1
  6. {aether_quant-1.0.0 → aether_quant-4.12.3}/README.md +215 -155
  7. {aether_quant-1.0.0 → aether_quant-4.12.3}/aether_quant.egg-info/PKG-INFO +1 -1
  8. {aether_quant-1.0.0 → aether_quant-4.12.3}/aether_quant.egg-info/SOURCES.txt +44 -1
  9. {aether_quant-1.0.0 → aether_quant-4.12.3}/aether_quant.egg-info/scm_file_list.json +318 -275
  10. aether_quant-4.12.3/aether_quant.egg-info/scm_version.json +8 -0
  11. {aether_quant-1.0.0 → aether_quant-4.12.3}/analyzer/README.md +1 -1
  12. {aether_quant-1.0.0 → aether_quant-4.12.3}/analyzer/market_analyzer.py +1 -1
  13. {aether_quant-1.0.0 → aether_quant-4.12.3}/aq_cli.py +280 -21
  14. {aether_quant-1.0.0 → aether_quant-4.12.3}/config.json +364 -14
  15. aether_quant-4.12.3/data/reference/forex_pair_specs.json +108 -0
  16. {aether_quant-1.0.0 → aether_quant-4.12.3}/data/reference/futures_contract_specs.json +1 -1
  17. {aether_quant-1.0.0 → aether_quant-4.12.3}/data_pipeline/README.md +27 -0
  18. aether_quant-4.12.3/data_pipeline/dividend_backfill.py +243 -0
  19. {aether_quant-1.0.0 → aether_quant-4.12.3}/data_pipeline/fetch.py +31 -3
  20. {aether_quant-1.0.0 → aether_quant-4.12.3}/data_pipeline/fred_backfill.py +138 -3
  21. {aether_quant-1.0.0 → aether_quant-4.12.3}/data_pipeline/yfinance_backfill.py +112 -0
  22. {aether_quant-1.0.0 → aether_quant-4.12.3}/development/Changelog.md +1048 -12
  23. {aether_quant-1.0.0 → aether_quant-4.12.3}/development/Problems.md +1167 -9
  24. {aether_quant-1.0.0 → aether_quant-4.12.3}/development/README.md +2 -3
  25. aether_quant-1.0.0/development/v2_architecture.md → aether_quant-4.12.3/development/architecture.md +357 -124
  26. {aether_quant-1.0.0 → aether_quant-4.12.3}/development/asset_universe.md +62 -9
  27. aether_quant-4.12.3/development/backtest_equity_chart.png +0 -0
  28. {aether_quant-1.0.0 → aether_quant-4.12.3}/development/infrastructure.md +68 -30
  29. {aether_quant-1.0.0 → aether_quant-4.12.3}/development/project_structure.md +4 -3
  30. {aether_quant-1.0.0 → aether_quant-4.12.3}/docker-compose.yml +29 -3
  31. {aether_quant-1.0.0 → aether_quant-4.12.3}/execution/README.md +3 -3
  32. {aether_quant-1.0.0 → aether_quant-4.12.3}/execution/order_gate.py +28 -1
  33. {aether_quant-1.0.0 → aether_quant-4.12.3}/experience/README.md +15 -0
  34. {aether_quant-1.0.0 → aether_quant-4.12.3}/experience/__init__.py +7 -1
  35. aether_quant-4.12.3/experience/redis_queue.py +369 -0
  36. {aether_quant-1.0.0 → aether_quant-4.12.3}/features/README.md +13 -0
  37. {aether_quant-1.0.0 → aether_quant-4.12.3}/features/__init__.py +26 -0
  38. aether_quant-4.12.3/features/alt_data_features.py +110 -0
  39. aether_quant-4.12.3/features/bond_features.py +275 -0
  40. {aether_quant-1.0.0 → aether_quant-4.12.3}/features/options_greeks.py +139 -0
  41. {aether_quant-1.0.0 → aether_quant-4.12.3}/inference/README.md +65 -2
  42. {aether_quant-1.0.0 → aether_quant-4.12.3}/inference/__init__.py +7 -1
  43. {aether_quant-1.0.0 → aether_quant-4.12.3}/inference/exported_model.py +175 -0
  44. {aether_quant-1.0.0 → aether_quant-4.12.3}/inference/parallel_inference.py +22 -0
  45. aether_quant-4.12.3/inference/strategy_selector_inference.py +75 -0
  46. {aether_quant-1.0.0 → aether_quant-4.12.3}/lean.json +1 -1
  47. {aether_quant-1.0.0 → aether_quant-4.12.3}/main.py +2452 -324
  48. {aether_quant-1.0.0 → aether_quant-4.12.3}/ml/README.md +22 -0
  49. {aether_quant-1.0.0 → aether_quant-4.12.3}/monitoring/README.md +1 -0
  50. {aether_quant-1.0.0 → aether_quant-4.12.3}/monitoring/api_server.py +39 -11
  51. {aether_quant-1.0.0 → aether_quant-4.12.3}/monitoring/assets_status.py +9 -0
  52. aether_quant-4.12.3/monitoring/strategy_catalog.py +39 -0
  53. {aether_quant-1.0.0 → aether_quant-4.12.3}/portfolio/README.md +179 -5
  54. aether_quant-4.12.3/portfolio/options_arbitrage_detector.py +232 -0
  55. aether_quant-4.12.3/portfolio/options_assignment_risk.py +119 -0
  56. aether_quant-4.12.3/portfolio/options_margin_sizing.py +333 -0
  57. aether_quant-4.12.3/portfolio/options_strategy.py +1999 -0
  58. {aether_quant-1.0.0 → aether_quant-4.12.3}/regime/README.md +15 -4
  59. {aether_quant-1.0.0 → aether_quant-4.12.3}/requirements/README.md +2 -2
  60. {aether_quant-1.0.0 → aether_quant-4.12.3}/requirements/requirements-dev.txt +4 -0
  61. aether_quant-4.12.3/requirements/requirements.txt +38 -0
  62. {aether_quant-1.0.0 → aether_quant-4.12.3}/retraining/README.md +3 -3
  63. {aether_quant-1.0.0 → aether_quant-4.12.3}/retraining/__init__.py +4 -0
  64. {aether_quant-1.0.0 → aether_quant-4.12.3}/retraining/artifacts.py +33 -5
  65. {aether_quant-1.0.0 → aether_quant-4.12.3}/retraining/orchestrator.py +78 -2
  66. {aether_quant-1.0.0 → aether_quant-4.12.3}/retraining/worker.py +10 -0
  67. aether_quant-4.12.3/risk/README.md +598 -0
  68. {aether_quant-1.0.0 → aether_quant-4.12.3}/risk/__init__.py +10 -0
  69. aether_quant-4.12.3/risk/asset_class_router.py +584 -0
  70. aether_quant-4.12.3/risk/forex_risk.py +158 -0
  71. {aether_quant-1.0.0 → aether_quant-4.12.3}/risk/futures_risk.py +41 -0
  72. {aether_quant-1.0.0 → aether_quant-4.12.3}/risk/position_sizing.py +24 -2
  73. aether_quant-4.12.3/risk/rl_sizing.py +183 -0
  74. aether_quant-4.12.3/risk_controls.py +178 -0
  75. {aether_quant-1.0.0 → aether_quant-4.12.3}/scripts/README.md +2 -1
  76. aether_quant-4.12.3/scripts/profile_inference.py +585 -0
  77. {aether_quant-1.0.0 → aether_quant-4.12.3}/scripts/profile_subsystems.py +118 -1
  78. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/README.md +4 -3
  79. aether_quant-4.12.3/tests/test_alt_data_features.py +97 -0
  80. aether_quant-4.12.3/tests/test_api_server.py +114 -0
  81. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_aq_cli.py +250 -2
  82. aether_quant-4.12.3/tests/test_asset_class_router.py +512 -0
  83. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_bond_features.py +103 -0
  84. aether_quant-4.12.3/tests/test_dividend_backfill.py +184 -0
  85. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_experience_queue.py +183 -1
  86. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_exported_model.py +99 -0
  87. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_fetch.py +101 -2
  88. aether_quant-4.12.3/tests/test_forex_risk.py +124 -0
  89. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_fred_backfill.py +112 -0
  90. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_futures_risk.py +63 -0
  91. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_lean_backtest_ml_coverage.py +22 -14
  92. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_learned_topology.py +142 -0
  93. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_market_topology.py +334 -12
  94. aether_quant-4.12.3/tests/test_options_arbitrage_detector.py +170 -0
  95. aether_quant-4.12.3/tests/test_options_assignment_risk.py +195 -0
  96. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_options_greeks.py +75 -0
  97. aether_quant-4.12.3/tests/test_options_margin_sizing.py +178 -0
  98. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_options_strategy.py +106 -0
  99. aether_quant-4.12.3/tests/test_options_strategy_multileg.py +572 -0
  100. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_order_gate.py +75 -1
  101. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_parallel_inference.py +25 -1
  102. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_position_sizing.py +101 -0
  103. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_postgres_worker.py +43 -0
  104. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_profile_inference.py +28 -1
  105. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_profile_subsystems.py +25 -0
  106. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_retraining_artifacts.py +54 -0
  107. aether_quant-4.12.3/tests/test_risk_controls.py +388 -0
  108. aether_quant-4.12.3/tests/test_rl_sizing.py +193 -0
  109. aether_quant-4.12.3/tests/test_strategy_catalog.py +37 -0
  110. aether_quant-4.12.3/tests/test_strategy_selector_inference.py +83 -0
  111. aether_quant-4.12.3/tests/test_train_alt_data_features.py +206 -0
  112. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_train_bond_features.py +68 -0
  113. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_train_cross_sectional_features.py +168 -2
  114. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_train_ranking_validation.py +146 -10
  115. aether_quant-4.12.3/tests/test_train_rl_sizing.py +169 -0
  116. aether_quant-4.12.3/tests/test_train_strategy_selector.py +145 -0
  117. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_train_topology.py +15 -0
  118. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_yfinance_backfill.py +82 -0
  119. {aether_quant-1.0.0 → aether_quant-4.12.3}/topology/README.md +80 -9
  120. {aether_quant-1.0.0 → aether_quant-4.12.3}/topology/learned_topology.py +22 -1
  121. {aether_quant-1.0.0 → aether_quant-4.12.3}/topology/market_topology.py +198 -39
  122. {aether_quant-1.0.0 → aether_quant-4.12.3}/train.py +402 -38
  123. {aether_quant-1.0.0 → aether_quant-4.12.3}/train_gating.py +16 -6
  124. aether_quant-4.12.3/train_rl_sizing.py +429 -0
  125. aether_quant-4.12.3/train_strategy_selector.py +275 -0
  126. {aether_quant-1.0.0 → aether_quant-4.12.3}/train_topology.py +29 -6
  127. {aether_quant-1.0.0 → aether_quant-4.12.3}/visualization/README.md +15 -3
  128. aether_quant-4.12.3/webui/README.md +153 -0
  129. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/package-lock.json +1388 -16
  130. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/package.json +8 -1
  131. aether_quant-4.12.3/webui/src/App.tsx +52 -0
  132. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/src/api/client.ts +3 -1
  133. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/src/api/hooks.ts +14 -0
  134. aether_quant-4.12.3/webui/src/components/layout/AppShell.tsx +76 -0
  135. aether_quant-4.12.3/webui/src/components/neuralnet/NeuralNetworkStatsPanel.test.tsx +106 -0
  136. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/src/components/neuralnet/NeuralNetworkStatsPanel.tsx +70 -16
  137. aether_quant-4.12.3/webui/src/components/optionsstrategy/CorporateActionsPanel.tsx +42 -0
  138. aether_quant-4.12.3/webui/src/components/optionsstrategy/DividendScheduleSummaryPanel.tsx +43 -0
  139. aether_quant-4.12.3/webui/src/components/optionsstrategy/ForexPairDetailPanel.tsx +51 -0
  140. aether_quant-4.12.3/webui/src/components/optionsstrategy/HeldMultiLegPositionsPanel.tsx +71 -0
  141. aether_quant-4.12.3/webui/src/components/optionsstrategy/StrategyCatalogBrowser.tsx +48 -0
  142. aether_quant-4.12.3/webui/src/components/optionsstrategy/StrategySelectorScoresPanel.tsx +48 -0
  143. aether_quant-4.12.3/webui/src/components/risk/AssetSizingTable.test.tsx +52 -0
  144. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/src/components/risk/AssetSizingTable.tsx +67 -7
  145. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/src/components/risk/DerivativesMacroPanel.tsx +14 -3
  146. aether_quant-4.12.3/webui/src/components/risk/MacroSnapshotPanel.test.tsx +35 -0
  147. aether_quant-4.12.3/webui/src/components/risk/MacroSnapshotPanel.tsx +49 -0
  148. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/src/components/signals/Badge.tsx +5 -0
  149. aether_quant-4.12.3/webui/src/components/topology/TopologyScene3D.test.tsx +51 -0
  150. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/src/components/topology/TopologyScene3D.tsx +15 -1
  151. aether_quant-4.12.3/webui/src/components/tracing/DivergingBarChart.test.tsx +41 -0
  152. aether_quant-4.12.3/webui/src/components/tracing/LineChart.test.tsx +73 -0
  153. aether_quant-4.12.3/webui/src/lib/format.test.ts +74 -0
  154. aether_quant-1.0.0/webui/src/pages/Overview.tsx → aether_quant-4.12.3/webui/src/pages/OperationsPage.tsx +4 -18
  155. aether_quant-4.12.3/webui/src/pages/OptionsStrategyPage.tsx +27 -0
  156. aether_quant-4.12.3/webui/src/pages/Overview.tsx +26 -0
  157. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/src/pages/RiskPage.tsx +2 -0
  158. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/src/pages/TracingPage.tsx +9 -5
  159. aether_quant-4.12.3/webui/src/pages/pages.test.tsx +158 -0
  160. aether_quant-4.12.3/webui/src/test/setup.ts +24 -0
  161. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/src/types/state.ts +200 -4
  162. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/vite.config.ts +9 -0
  163. aether_quant-1.0.0/Dockerfile +0 -29
  164. aether_quant-1.0.0/aether_quant.egg-info/scm_version.json +0 -8
  165. aether_quant-1.0.0/development/backtest_equity_chart.png +0 -0
  166. aether_quant-1.0.0/experience/redis_queue.py +0 -198
  167. aether_quant-1.0.0/features/bond_features.py +0 -123
  168. aether_quant-1.0.0/portfolio/options_strategy.py +0 -349
  169. aether_quant-1.0.0/requirements/requirements.txt +0 -28
  170. aether_quant-1.0.0/risk/README.md +0 -248
  171. aether_quant-1.0.0/risk/asset_class_router.py +0 -275
  172. aether_quant-1.0.0/risk_controls.py +0 -55
  173. aether_quant-1.0.0/scripts/profile_inference.py +0 -327
  174. aether_quant-1.0.0/tests/test_api_server.py +0 -39
  175. aether_quant-1.0.0/tests/test_asset_class_router.py +0 -235
  176. aether_quant-1.0.0/tests/test_risk_controls.py +0 -75
  177. aether_quant-1.0.0/webui/README.md +0 -79
  178. aether_quant-1.0.0/webui/src/App.tsx +0 -26
  179. aether_quant-1.0.0/webui/src/components/layout/AppShell.tsx +0 -102
  180. {aether_quant-1.0.0 → aether_quant-4.12.3}/.devcontainer/devcontainer.json +0 -0
  181. {aether_quant-1.0.0 → aether_quant-4.12.3}/.devcontainer/dind-v1-test/devcontainer.json +0 -0
  182. {aether_quant-1.0.0 → aether_quant-4.12.3}/.env.compose.example +0 -0
  183. {aether_quant-1.0.0 → aether_quant-4.12.3}/.env.live.example +0 -0
  184. {aether_quant-1.0.0 → aether_quant-4.12.3}/.gitattributes +0 -0
  185. {aether_quant-1.0.0 → aether_quant-4.12.3}/.githooks/pre-commit +0 -0
  186. {aether_quant-1.0.0 → aether_quant-4.12.3}/.github/workflows/release.yml +0 -0
  187. {aether_quant-1.0.0 → aether_quant-4.12.3}/LICENSE +0 -0
  188. {aether_quant-1.0.0 → aether_quant-4.12.3}/aether_quant.egg-info/dependency_links.txt +0 -0
  189. {aether_quant-1.0.0 → aether_quant-4.12.3}/aether_quant.egg-info/entry_points.txt +0 -0
  190. {aether_quant-1.0.0 → aether_quant-4.12.3}/aether_quant.egg-info/top_level.txt +0 -0
  191. {aether_quant-1.0.0 → aether_quant-4.12.3}/analyzer/__init__.py +0 -0
  192. {aether_quant-1.0.0 → aether_quant-4.12.3}/audit/README.md +0 -0
  193. {aether_quant-1.0.0 → aether_quant-4.12.3}/audit/__init__.py +0 -0
  194. {aether_quant-1.0.0 → aether_quant-4.12.3}/audit/hash_chain.py +0 -0
  195. {aether_quant-1.0.0 → aether_quant-4.12.3}/audit/postgres_audit.py +0 -0
  196. {aether_quant-1.0.0 → aether_quant-4.12.3}/audit/postgres_worker.py +0 -0
  197. {aether_quant-1.0.0 → aether_quant-4.12.3}/audit/redis_queue.py +0 -0
  198. {aether_quant-1.0.0 → aether_quant-4.12.3}/audit/status_export.py +0 -0
  199. {aether_quant-1.0.0 → aether_quant-4.12.3}/backtests/.gitkeep +0 -0
  200. {aether_quant-1.0.0 → aether_quant-4.12.3}/cpp_inference_ext/README.md +0 -0
  201. {aether_quant-1.0.0 → aether_quant-4.12.3}/cpp_inference_ext/pyproject.toml +0 -0
  202. {aether_quant-1.0.0 → aether_quant-4.12.3}/cpp_inference_ext/setup.py +0 -0
  203. {aether_quant-1.0.0 → aether_quant-4.12.3}/cpp_inference_ext/src/linear_batched.cpp +0 -0
  204. {aether_quant-1.0.0 → aether_quant-4.12.3}/data/alternative/estimize/consensus/aapl/.keep +0 -0
  205. {aether_quant-1.0.0 → aether_quant-4.12.3}/data/alternative/estimize/estimate/.keep +0 -0
  206. {aether_quant-1.0.0 → aether_quant-4.12.3}/data/alternative/estimize/release/.keep +0 -0
  207. {aether_quant-1.0.0 → aether_quant-4.12.3}/data/alternative/sec/aapl/.keep +0 -0
  208. {aether_quant-1.0.0 → aether_quant-4.12.3}/data/alternative/trading-economics/.keep +0 -0
  209. {aether_quant-1.0.0 → aether_quant-4.12.3}/data/alternative/trading-economics/calendar/.keep +0 -0
  210. {aether_quant-1.0.0 → aether_quant-4.12.3}/data/alternative/trading-economics/earnings/.keep +0 -0
  211. {aether_quant-1.0.0 → aether_quant-4.12.3}/data/alternative/trading-economics/indicator/.keep +0 -0
  212. {aether_quant-1.0.0 → aether_quant-4.12.3}/data/reference/sector_mapping.json +0 -0
  213. {aether_quant-1.0.0 → aether_quant-4.12.3}/data_pipeline/__init__.py +0 -0
  214. {aether_quant-1.0.0 → aether_quant-4.12.3}/data_pipeline/ib_backfill.py +0 -0
  215. {aether_quant-1.0.0 → aether_quant-4.12.3}/data_pipeline/v2_manifest.py +0 -0
  216. {aether_quant-1.0.0 → aether_quant-4.12.3}/development/logo.png +0 -0
  217. {aether_quant-1.0.0 → aether_quant-4.12.3}/execution/__init__.py +0 -0
  218. {aether_quant-1.0.0 → aether_quant-4.12.3}/execution/config_cache.py +0 -0
  219. {aether_quant-1.0.0 → aether_quant-4.12.3}/execution/lean_config_render.py +0 -0
  220. {aether_quant-1.0.0 → aether_quant-4.12.3}/execution/live_credentials.py +0 -0
  221. {aether_quant-1.0.0 → aether_quant-4.12.3}/execution/live_credentials_io.py +0 -0
  222. {aether_quant-1.0.0 → aether_quant-4.12.3}/execution/paper_readiness.py +0 -0
  223. {aether_quant-1.0.0 → aether_quant-4.12.3}/execution/paper_readiness_io.py +0 -0
  224. {aether_quant-1.0.0 → aether_quant-4.12.3}/execution/paper_readiness_report.py +0 -0
  225. {aether_quant-1.0.0 → aether_quant-4.12.3}/execution/paper_readiness_scheduler.py +0 -0
  226. {aether_quant-1.0.0 → aether_quant-4.12.3}/execution/runtime_config_io.py +0 -0
  227. {aether_quant-1.0.0 → aether_quant-4.12.3}/execution/secret_scan.py +0 -0
  228. {aether_quant-1.0.0 → aether_quant-4.12.3}/experience/observation_metrics.py +0 -0
  229. {aether_quant-1.0.0 → aether_quant-4.12.3}/experience/postgres_worker.py +0 -0
  230. {aether_quant-1.0.0 → aether_quant-4.12.3}/experience/simulated_portfolio.py +0 -0
  231. {aether_quant-1.0.0 → aether_quant-4.12.3}/experts/README.md +0 -0
  232. {aether_quant-1.0.0 → aether_quant-4.12.3}/experts/__init__.py +0 -0
  233. {aether_quant-1.0.0 → aether_quant-4.12.3}/experts/expert_datasets.py +0 -0
  234. {aether_quant-1.0.0 → aether_quant-4.12.3}/features/derivatives_macro_features.py +0 -0
  235. {aether_quant-1.0.0 → aether_quant-4.12.3}/features/macro_features.py +0 -0
  236. {aether_quant-1.0.0 → aether_quant-4.12.3}/features/technical_indicators.py +0 -0
  237. {aether_quant-1.0.0 → aether_quant-4.12.3}/generate_backtest_report.py +0 -0
  238. {aether_quant-1.0.0 → aether_quant-4.12.3}/liquidity/README.md +0 -0
  239. {aether_quant-1.0.0 → aether_quant-4.12.3}/liquidity/__init__.py +0 -0
  240. {aether_quant-1.0.0 → aether_quant-4.12.3}/liquidity/market_liquidity.py +0 -0
  241. {aether_quant-1.0.0 → aether_quant-4.12.3}/moe/README.md +0 -0
  242. {aether_quant-1.0.0 → aether_quant-4.12.3}/moe/__init__.py +0 -0
  243. {aether_quant-1.0.0 → aether_quant-4.12.3}/moe/gating.py +0 -0
  244. {aether_quant-1.0.0 → aether_quant-4.12.3}/monitoring/__init__.py +0 -0
  245. {aether_quant-1.0.0 → aether_quant-4.12.3}/monitoring/neural_network_state.py +0 -0
  246. {aether_quant-1.0.0 → aether_quant-4.12.3}/notifications/README.md +0 -0
  247. {aether_quant-1.0.0 → aether_quant-4.12.3}/notifications/__init__.py +0 -0
  248. {aether_quant-1.0.0 → aether_quant-4.12.3}/notifications/postgres_telegram.py +0 -0
  249. {aether_quant-1.0.0 → aether_quant-4.12.3}/notifications/telegram_alerts.py +0 -0
  250. {aether_quant-1.0.0 → aether_quant-4.12.3}/notifications/telegram_client.py +0 -0
  251. {aether_quant-1.0.0 → aether_quant-4.12.3}/notifications/telegram_worker.py +0 -0
  252. {aether_quant-1.0.0 → aether_quant-4.12.3}/performance/README.md +0 -0
  253. {aether_quant-1.0.0 → aether_quant-4.12.3}/performance/__init__.py +0 -0
  254. {aether_quant-1.0.0 → aether_quant-4.12.3}/performance/postgres_triggers.py +0 -0
  255. {aether_quant-1.0.0 → aether_quant-4.12.3}/performance/rank_ic_monitor.py +0 -0
  256. {aether_quant-1.0.0 → aether_quant-4.12.3}/performance/trigger_worker.py +0 -0
  257. {aether_quant-1.0.0 → aether_quant-4.12.3}/performance/triggers.py +0 -0
  258. {aether_quant-1.0.0 → aether_quant-4.12.3}/portfolio/__init__.py +0 -0
  259. {aether_quant-1.0.0 → aether_quant-4.12.3}/portfolio/book_construction.py +0 -0
  260. {aether_quant-1.0.0 → aether_quant-4.12.3}/pyproject.toml +0 -0
  261. {aether_quant-1.0.0 → aether_quant-4.12.3}/regime/__init__.py +0 -0
  262. {aether_quant-1.0.0 → aether_quant-4.12.3}/regime/market_regime.py +0 -0
  263. {aether_quant-1.0.0 → aether_quant-4.12.3}/requirements.txt +0 -0
  264. {aether_quant-1.0.0 → aether_quant-4.12.3}/retraining/backtest_gate.py +0 -0
  265. {aether_quant-1.0.0 → aether_quant-4.12.3}/retraining/lean_backtest.py +0 -0
  266. {aether_quant-1.0.0 → aether_quant-4.12.3}/retraining/planning.py +0 -0
  267. {aether_quant-1.0.0 → aether_quant-4.12.3}/retraining/postgres_registry.py +0 -0
  268. {aether_quant-1.0.0 → aether_quant-4.12.3}/retraining/status_export.py +0 -0
  269. {aether_quant-1.0.0 → aether_quant-4.12.3}/retraining/validation_gate.py +0 -0
  270. {aether_quant-1.0.0 → aether_quant-4.12.3}/retraining/vault_client.py +0 -0
  271. {aether_quant-1.0.0 → aether_quant-4.12.3}/retraining/vault_commands.py +0 -0
  272. {aether_quant-1.0.0 → aether_quant-4.12.3}/risk/manual_override.py +0 -0
  273. {aether_quant-1.0.0 → aether_quant-4.12.3}/scripts/render_lean_credentials.py +0 -0
  274. {aether_quant-1.0.0 → aether_quant-4.12.3}/setup.cfg +0 -0
  275. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_assets_status.py +0 -0
  276. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_audit_postgres_worker.py +0 -0
  277. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_audit_queue.py +0 -0
  278. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_audit_status_export.py +0 -0
  279. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_backtest_gate.py +0 -0
  280. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_config_cache.py +0 -0
  281. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_derivatives_macro_features.py +0 -0
  282. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_dockerignore_secrets.py +0 -0
  283. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_expert_datasets.py +0 -0
  284. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_expert_models.py +0 -0
  285. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_gating_network.py +0 -0
  286. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_generate_backtest_report.py +0 -0
  287. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_hash_chain.py +0 -0
  288. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_ib_backfill.py +0 -0
  289. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_lean_backtest.py +0 -0
  290. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_lean_config_render.py +0 -0
  291. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_live_credentials.py +0 -0
  292. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_live_credentials_io.py +0 -0
  293. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_macro_features.py +0 -0
  294. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_manual_override.py +0 -0
  295. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_market_analyzer.py +0 -0
  296. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_market_liquidity.py +0 -0
  297. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_market_regime.py +0 -0
  298. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_neural_network_state.py +0 -0
  299. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_observation_metrics.py +0 -0
  300. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_paper_readiness.py +0 -0
  301. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_paper_readiness_io.py +0 -0
  302. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_paper_readiness_report.py +0 -0
  303. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_paper_readiness_scheduler.py +0 -0
  304. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_portfolio_book_construction.py +0 -0
  305. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_postgres_audit.py +0 -0
  306. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_postgres_telegram.py +0 -0
  307. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_postgres_triggers.py +0 -0
  308. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_rank_ic_monitor.py +0 -0
  309. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_retraining_orchestrator.py +0 -0
  310. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_retraining_planning.py +0 -0
  311. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_retraining_postgres_registry.py +0 -0
  312. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_retraining_worker.py +0 -0
  313. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_runtime_config_io.py +0 -0
  314. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_secret_scan.py +0 -0
  315. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_simulated_portfolio.py +0 -0
  316. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_status_export.py +0 -0
  317. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_technical_indicators.py +0 -0
  318. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_telegram_alerts.py +0 -0
  319. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_telegram_client.py +0 -0
  320. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_telegram_worker.py +0 -0
  321. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_train_asset_class_context_features.py +0 -0
  322. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_train_derivatives_macro_features.py +0 -0
  323. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_train_gating.py +0 -0
  324. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_train_indicators.py +0 -0
  325. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_train_macro_features.py +0 -0
  326. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_train_multitask.py +0 -0
  327. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_train_multitask_architecture.py +0 -0
  328. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_train_pipeline.py +0 -0
  329. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_train_select_model_context_columns.py +0 -0
  330. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_train_sequence.py +0 -0
  331. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_train_sequence_architecture.py +0 -0
  332. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_train_threshold_and_early_stop.py +0 -0
  333. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_train_walk_forward_windows.py +0 -0
  334. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_trigger_worker.py +0 -0
  335. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_triggers.py +0 -0
  336. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_v2_pipeline_manifest.py +0 -0
  337. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_validation_gate.py +0 -0
  338. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_vault_client.py +0 -0
  339. {aether_quant-1.0.0 → aether_quant-4.12.3}/tests/test_vault_commands.py +0 -0
  340. {aether_quant-1.0.0 → aether_quant-4.12.3}/topology/__init__.py +0 -0
  341. {aether_quant-1.0.0 → aether_quant-4.12.3}/train_multitask.py +0 -0
  342. {aether_quant-1.0.0 → aether_quant-4.12.3}/train_sequence.py +0 -0
  343. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/.gitignore +0 -0
  344. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/.oxlintrc.json +0 -0
  345. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/index.html +0 -0
  346. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/overview_v2_12.png +0 -0
  347. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/public/favicon.svg +0 -0
  348. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/public/icons.svg +0 -0
  349. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/risk_v2_12.png +0 -0
  350. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/src/components/heatmap/AssetHeatmap.tsx +0 -0
  351. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/src/components/layout/Panel.tsx +0 -0
  352. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/src/components/monitoring/AssetsStatusPanel.tsx +0 -0
  353. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/src/components/monitoring/AuditLogPanel.tsx +0 -0
  354. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/src/components/monitoring/CountTable.tsx +0 -0
  355. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/src/components/monitoring/MonitoringFeeds.tsx +0 -0
  356. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/src/components/monitoring/ObservationPanel.tsx +0 -0
  357. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/src/components/monitoring/PaperReadinessPanel.tsx +0 -0
  358. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/src/components/monitoring/PerformanceTriggersPanel.tsx +0 -0
  359. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/src/components/monitoring/RawStateViewer.tsx +0 -0
  360. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/src/components/monitoring/RetrainingStatusPanel.tsx +0 -0
  361. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/src/components/neuralnet/NeuralNetworkScene3D.tsx +0 -0
  362. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/src/components/risk/LiquidityTable.tsx +0 -0
  363. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/src/components/risk/RiskBar.tsx +0 -0
  364. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/src/components/risk/RiskCore.tsx +0 -0
  365. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/src/components/risk/StrategyRiskCards.tsx +0 -0
  366. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/src/components/scene3d/Scene3D.tsx +0 -0
  367. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/src/components/scorecards/Scorecards.tsx +0 -0
  368. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/src/components/signals/PositionsList.tsx +0 -0
  369. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/src/components/signals/SignalBoard.tsx +0 -0
  370. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/src/components/topology/ClusterList.tsx +0 -0
  371. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/src/components/topology/TopologyLearningPanel.tsx +0 -0
  372. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/src/components/tracing/AssetPerformancePanel.tsx +0 -0
  373. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/src/components/tracing/BacktestEquityPanel.tsx +0 -0
  374. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/src/components/tracing/DivergingBarChart.tsx +0 -0
  375. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/src/components/tracing/LineChart.tsx +0 -0
  376. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/src/components/tracing/MetricsSnapshotPanel.tsx +0 -0
  377. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/src/components/tracing/ObservationEquityPanel.tsx +0 -0
  378. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/src/index.css +0 -0
  379. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/src/lib/downsample.ts +0 -0
  380. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/src/lib/format.ts +0 -0
  381. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/src/main.tsx +0 -0
  382. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/src/pages/NeuralNetworkPage.tsx +0 -0
  383. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/src/pages/TopologyPage.tsx +0 -0
  384. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/src/types/audit.ts +0 -0
  385. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/src/types/tracing.ts +0 -0
  386. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/tsconfig.app.json +0 -0
  387. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/tsconfig.json +0 -0
  388. {aether_quant-1.0.0 → aether_quant-4.12.3}/webui/tsconfig.node.json +0 -0
@@ -37,3 +37,15 @@ lean.live.json
37
37
  lean.json
38
38
  *.key
39
39
  *.pem
40
+
41
+ # cpp_inference_ext/'s compiled build artifacts - mirrors .gitignore's own
42
+ # exclusion list. Docker now builds this extension fresh for the
43
+ # container's own Python 3.11 (see Dockerfile) - a locally-pre-built
44
+ # stray .pyd/.so from a developer's own (ABI-incompatible) host Python
45
+ # must never leak into the build context and get baked into the image,
46
+ # which is published to a public ghcr registry.
47
+ cpp_inference_ext/build/
48
+ cpp_inference_ext/*.egg-info/
49
+ cpp_inference_ext/*.pyd
50
+ cpp_inference_ext/*.so
51
+ cpp_inference_ext/install_log*.txt
@@ -15,6 +15,9 @@ jobs:
15
15
  with:
16
16
  python-version: "3.11"
17
17
 
18
+ - name: Syntax-check main.py (no Lean runtime available in CI - see development/Problems.md #69)
19
+ run: python -m py_compile main.py
20
+
18
21
  - name: Install dependencies
19
22
  run: pip install -r requirements/requirements.txt -r requirements/requirements-dev.txt
20
23
 
@@ -103,6 +103,16 @@ ml/sequence_training_metrics.json
103
103
  ml/gating_model.json
104
104
  ml/gating_feature_schema.json
105
105
  ml/gating_training_metrics.json
106
+ # Topology overlay + RL sizing artifacts (Phase 4.12/4.12.3,
107
+ # development/Problems.md #71) - same reasoning as the multitask/sequence/
108
+ # gating rules above: a trained model's weights must never end up
109
+ # committed to the public repo just because it's a newer artifact type.
110
+ ml/topology_model.json
111
+ ml/topology_feature_schema.json
112
+ ml/topology_training_metrics.json
113
+ ml/rl_sizing_model.json
114
+ ml/rl_sizing_feature_schema.json
115
+ ml/rl_sizing_training_metrics.json
106
116
 
107
117
  # Generated visualization/runtime feeds
108
118
  visualization/state.json
@@ -0,0 +1,53 @@
1
+ # Stage 1: build webui
2
+ FROM node:20-alpine AS webui-builder
3
+ WORKDIR /app/webui
4
+ COPY webui/package*.json ./
5
+ RUN npm ci
6
+ COPY webui/ .
7
+ RUN npm run build
8
+
9
+ # Stage 2: consolidated engine image - serves the FastAPI app AND every
10
+ # worker (experience/performance-trigger/telegram/paper-readiness/
11
+ # retraining). One image, one COPY of the whole source tree (respecting
12
+ # .dockerignore's exclusions - .venv/, node_modules/, data/, ml/,
13
+ # backtests/, etc., which arrive at runtime via compose volume mounts
14
+ # instead) rather than a hand-maintained per-worker COPY allow-list.
15
+ # This is the direct fix for development/Problems.md #1/#2/#20/#30 - four
16
+ # separate incidents where a per-worker Dockerfile's COPY list drifted out
17
+ # of sync with that worker's actual import graph and crash-looped on
18
+ # ModuleNotFoundError. With one image copying everything, that whole bug
19
+ # class is structurally impossible now. Each service's actual entrypoint
20
+ # is selected via docker-compose.yml's per-service `command:` override
21
+ # (CMD below is just the default/app entrypoint).
22
+ FROM python:3.11-slim
23
+ WORKDIR /app
24
+ COPY requirements/requirements.txt ./requirements/
25
+ RUN pip install --no-cache-dir -r requirements/requirements.txt
26
+ COPY . .
27
+
28
+ # Optional C++/pybind11 accelerator for inference/exported_model.py's
29
+ # _linear_batched() (development/Problems.md #32). This was previously
30
+ # never built for the actual container image - only ever built manually
31
+ # on a developer's own host machine for that machine's own (ABI-
32
+ # incompatible) local Python version, so the compiled .pyd/.so it produced
33
+ # never reached any deployed image. python:3.11-slim ships no C++
34
+ # compiler, so build-essential is installed just for this step and purged
35
+ # again in the SAME RUN (a separate `apt-get purge` in a later RUN would
36
+ # not shrink the image - Docker layers are additive). The whole extension
37
+ # is optional by design (inference/exported_model.py deferred-imports it
38
+ # and falls back to a pure-NumPy path on ANY import/call failure), so
39
+ # this step is deliberately soft-fail: if anything here breaks (a future
40
+ # base-image change, a pybind11/ABI mismatch, etc.) the `|| echo` swallows
41
+ # it and the Docker build still succeeds, exactly like every environment
42
+ # that has never had the accelerator built.
43
+ RUN (apt-get update && \
44
+ apt-get install -y --no-install-recommends build-essential && \
45
+ pip install --no-cache-dir "pybind11>=2.10" && \
46
+ pip install --no-cache-dir ./cpp_inference_ext && \
47
+ apt-get purge -y --auto-remove build-essential && \
48
+ rm -rf /var/lib/apt/lists/*) \
49
+ || echo "cpp_inference_ext: optional C++ accelerator build failed or was skipped - continuing without it (see development/Problems.md #32/#68)"
50
+
51
+ COPY --from=webui-builder /app/webui/dist ./webui/dist
52
+ EXPOSE 8000
53
+ CMD ["uvicorn", "monitoring.api_server:app", "--host", "0.0.0.0", "--port", "8000"]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aether-quant
3
- Version: 1.0.0
3
+ Version: 4.12.3
4
4
  Summary: Aether Quant convenience CLI
5
5
  Requires-Python: >=3.10
6
6
  License-File: LICENSE