ml4t-data 0.2.0__tar.gz → 0.3.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 (406) hide show
  1. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/PKG-INFO +9 -7
  2. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/README.md +1 -1
  3. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/pyproject.toml +11 -4
  4. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/_version.py +2 -2
  5. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/adjustments/__init__.py +6 -0
  6. ml4t_data-0.3.0/src/ml4t/data/adjustments/_history_factors.py +110 -0
  7. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/adjustments/core.py +17 -10
  8. ml4t_data-0.3.0/src/ml4t/data/adjustments/history.py +554 -0
  9. ml4t_data-0.3.0/src/ml4t/data/adjustments/inputs.py +336 -0
  10. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/assets/__init__.py +2 -0
  11. ml4t_data-0.3.0/src/ml4t/data/assets/registry.py +300 -0
  12. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/assets/validation.py +55 -46
  13. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/calendar/crypto.py +39 -15
  14. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/cli/batch.py +1 -0
  15. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/cli/core.py +8 -1
  16. ml4t_data-0.3.0/src/ml4t/data/compat/__init__.py +1 -0
  17. ml4t_data-0.3.0/src/ml4t/data/compat/empyrical.py +240 -0
  18. ml4t_data-0.3.0/src/ml4t/data/compat/zipline.py +535 -0
  19. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/config/models.py +13 -1
  20. ml4t_data-0.3.0/src/ml4t/data/core/feeds.py +26 -0
  21. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/core/models.py +67 -2
  22. ml4t_data-0.3.0/src/ml4t/data/core/revisions.py +101 -0
  23. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/data_manager.py +44 -40
  24. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/futures/__init__.py +3 -0
  25. ml4t_data-0.3.0/src/ml4t/data/futures/inputs.py +678 -0
  26. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/futures/roll.py +164 -27
  27. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/macro/downloader.py +10 -1
  28. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/managers/bulk_manager.py +6 -2
  29. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/managers/metadata_manager.py +16 -27
  30. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/managers/storage_manager.py +137 -33
  31. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/providers/AGENTS.md +1 -0
  32. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/providers/__init__.py +12 -0
  33. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/providers/base.py +122 -7
  34. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/providers/databento.py +62 -6
  35. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/providers/fama_french.py +125 -25
  36. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/providers/finnhub.py +18 -6
  37. ml4t_data-0.3.0/src/ml4t/data/providers/forecastex.py +438 -0
  38. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/providers/fred.py +146 -7
  39. ml4t_data-0.3.0/src/ml4t/data/providers/kalshi.py +1634 -0
  40. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/providers/polygon.py +22 -1
  41. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/providers/polymarket.py +740 -6
  42. ml4t_data-0.3.0/src/ml4t/data/providers/polymarket_us.py +431 -0
  43. ml4t_data-0.3.0/src/ml4t/data/providers/prediction_markets.py +136 -0
  44. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/providers/protocols.py +17 -0
  45. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/providers/registry.py +16 -0
  46. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/providers/yahoo.py +87 -15
  47. ml4t_data-0.3.0/src/ml4t/data/sessions/_cme_crypto.py +85 -0
  48. ml4t_data-0.3.0/src/ml4t/data/sessions/assigner.py +458 -0
  49. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/sessions/completer.py +74 -145
  50. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/storage/__init__.py +5 -0
  51. ml4t_data-0.3.0/src/ml4t/data/storage/_temporal.py +80 -0
  52. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/storage/flat.py +5 -31
  53. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/storage/hive.py +51 -47
  54. ml4t_data-0.3.0/src/ml4t/data/storage/snapshot.py +423 -0
  55. ml4t_data-0.3.0/src/ml4t/data/update_manager.py +1280 -0
  56. ml4t_data-0.3.0/src/ml4t/data/utils/atomic.py +31 -0
  57. ml4t_data-0.3.0/src/ml4t/data/utils/conversion.py +323 -0
  58. ml4t_data-0.3.0/src/ml4t/data/utils/gaps.py +492 -0
  59. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/validation/cross_validation.py +74 -40
  60. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/validation/rules.py +45 -4
  61. ml4t_data-0.3.0/tests/_zipline_bundle_fixture.py +156 -0
  62. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/assets/test_validation.py +37 -7
  63. ml4t_data-0.3.0/tests/fixtures/acquisition/F-F_Momentum_Factor_CSV.zip +0 -0
  64. ml4t_data-0.3.0/tests/fixtures/acquisition/F-F_Momentum_Factor_daily_CSV.zip +0 -0
  65. ml4t_data-0.3.0/tests/fixtures/acquisition/F-F_Research_Data_5_Factors_2x3_daily_CSV.zip +0 -0
  66. ml4t_data-0.3.0/tests/fixtures/acquisition/F-F_Research_Data_Factors_CSV.zip +0 -0
  67. ml4t_data-0.3.0/tests/fixtures/acquisition/F-F_Research_Data_Factors_daily_CSV.zip +0 -0
  68. ml4t_data-0.3.0/tests/fixtures/acquisition/famafrench-provider-response.json +75 -0
  69. ml4t_data-0.3.0/tests/fixtures/acquisition/fred-dgs3mo.csv +4 -0
  70. ml4t_data-0.3.0/tests/fixtures/acquisition/provenance.json +21 -0
  71. ml4t_data-0.3.0/tests/fixtures/acquisition/yahoo-adjustment-provider.json +139 -0
  72. ml4t_data-0.3.0/tests/fixtures/acquisition/yahoo-dst-provider.json +123 -0
  73. ml4t_data-0.3.0/tests/futures/test_prepared_inputs.py +973 -0
  74. ml4t_data-0.3.0/tests/futures/test_scheduled_roll_workflow.py +103 -0
  75. ml4t_data-0.3.0/tests/integration/test_forecastex.py +34 -0
  76. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/integration/test_kalshi.py +66 -0
  77. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/integration/test_polymarket.py +57 -0
  78. ml4t_data-0.3.0/tests/integration/test_polymarket_us.py +35 -0
  79. ml4t_data-0.3.0/tests/providers/conftest.py +43 -0
  80. ml4t_data-0.3.0/tests/providers/fixtures/polymarket/clob_prices_history.json +106 -0
  81. ml4t_data-0.3.0/tests/providers/fixtures/polymarket/data_api_trades.json +413 -0
  82. ml4t_data-0.3.0/tests/providers/fixtures/polymarket/gamma_keyset_active.json +198 -0
  83. ml4t_data-0.3.0/tests/providers/fixtures/polymarket/gamma_keyset_closed.json +1224 -0
  84. ml4t_data-0.3.0/tests/providers/test_forecastex_provider.py +295 -0
  85. ml4t_data-0.3.0/tests/providers/test_kalshi_history.py +819 -0
  86. ml4t_data-0.3.0/tests/providers/test_polymarket_history.py +408 -0
  87. ml4t_data-0.3.0/tests/providers/test_polymarket_us_provider.py +323 -0
  88. ml4t_data-0.3.0/tests/test_acquisition_atomic_flush.py +41 -0
  89. ml4t_data-0.3.0/tests/test_acquisition_migration.py +893 -0
  90. ml4t_data-0.3.0/tests/test_acquisition_warning_contract.py +19 -0
  91. ml4t_data-0.3.0/tests/test_action_inputs.py +332 -0
  92. ml4t_data-0.3.0/tests/test_adjusted_history.py +428 -0
  93. ml4t_data-0.3.0/tests/test_calendar_backfill_ranges.py +205 -0
  94. ml4t_data-0.3.0/tests/test_calendar_frame_bounds.py +210 -0
  95. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_cli_batch.py +3 -1
  96. ml4t_data-0.3.0/tests/test_cme_crypto_cutover.py +168 -0
  97. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_conversion.py +80 -10
  98. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_crypto_assets.py +45 -1
  99. ml4t_data-0.3.0/tests/test_daily_session_gaps.py +157 -0
  100. ml4t_data-0.3.0/tests/test_daily_timestamp_declarations.py +180 -0
  101. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_data_manager_storage.py +4 -1
  102. ml4t_data-0.3.0/tests/test_dated_inputs.py +206 -0
  103. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_fama_french_provider.py +32 -0
  104. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_finnhub_provider.py +15 -0
  105. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_gaps.py +27 -30
  106. ml4t_data-0.3.0/tests/test_history_factors.py +272 -0
  107. ml4t_data-0.3.0/tests/test_history_identity.py +249 -0
  108. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_incremental_update_system.py +13 -3
  109. ml4t_data-0.3.0/tests/test_ingestion_calendar_declarations.py +197 -0
  110. ml4t_data-0.3.0/tests/test_intraday_schedule_gaps.py +381 -0
  111. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_macro_downloader.py +2 -1
  112. ml4t_data-0.3.0/tests/test_market_input_handoff.py +456 -0
  113. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_polygon_provider.py +24 -0
  114. ml4t_data-0.3.0/tests/test_portable_snapshot.py +465 -0
  115. ml4t_data-0.3.0/tests/test_portable_snapshot_example.py +29 -0
  116. ml4t_data-0.3.0/tests/test_preserve_market_absences.py +161 -0
  117. ml4t_data-0.3.0/tests/test_provider_tls_trust.py +28 -0
  118. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_release_pipeline.py +107 -1
  119. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_release_workflows.py +4 -0
  120. ml4t_data-0.3.0/tests/test_session_calendar_contract.py +380 -0
  121. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_sessions.py +28 -36
  122. ml4t_data-0.3.0/tests/test_source_reference_contract.py +99 -0
  123. ml4t_data-0.3.0/tests/test_stored_gap_report.py +409 -0
  124. ml4t_data-0.3.0/tests/test_targeted_databento_acquisition.py +480 -0
  125. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_update_manager.py +48 -13
  126. ml4t_data-0.3.0/tests/test_update_provider_reuse.py +48 -0
  127. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_utils_gaps.py +73 -138
  128. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_validation.py +1 -1
  129. ml4t_data-0.3.0/tests/test_validation_calendar_contract.py +280 -0
  130. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_validation_rules.py +5 -5
  131. ml4t_data-0.3.0/tests/test_zipline_bundle_exchange.py +374 -0
  132. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/validation/test_rules.py +3 -3
  133. ml4t_data-0.2.0/src/ml4t/data/providers/kalshi.py +0 -832
  134. ml4t_data-0.2.0/src/ml4t/data/sessions/assigner.py +0 -287
  135. ml4t_data-0.2.0/src/ml4t/data/update_manager.py +0 -851
  136. ml4t_data-0.2.0/src/ml4t/data/utils/conversion.py +0 -138
  137. ml4t_data-0.2.0/src/ml4t/data/utils/gaps.py +0 -329
  138. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/.gitignore +0 -0
  139. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/LICENSE +0 -0
  140. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/scripts/verify_distribution.py +0 -0
  141. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/scripts/verify_provider_contract_runs.py +0 -0
  142. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/AGENTS.md +0 -0
  143. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/__init__.py +0 -0
  144. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/anomaly/__init__.py +0 -0
  145. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/anomaly/base.py +0 -0
  146. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/anomaly/config.py +0 -0
  147. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/anomaly/detectors.py +0 -0
  148. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/anomaly/manager.py +0 -0
  149. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/assets/asset_class.py +0 -0
  150. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/assets/contracts.py +0 -0
  151. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/assets/data/__init__.py +0 -0
  152. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/assets/data/crypto_top100.json +0 -0
  153. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/assets/data/forex_majors.json +0 -0
  154. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/assets/data/nasdaq100.json +0 -0
  155. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/assets/data/sp500.json +0 -0
  156. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/assets/schemas.py +0 -0
  157. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/calendar/__init__.py +0 -0
  158. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/cli/__init__.py +0 -0
  159. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/cli/config.py +0 -0
  160. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/cli/cot.py +0 -0
  161. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/cli/futures.py +0 -0
  162. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/cli/utils.py +0 -0
  163. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/cli_interface.py +0 -0
  164. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/config/__init__.py +0 -0
  165. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/config/_serialization.py +0 -0
  166. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/config/loader.py +0 -0
  167. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/config/validator.py +0 -0
  168. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/core/__init__.py +0 -0
  169. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/core/config.py +0 -0
  170. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/core/exceptions.py +0 -0
  171. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/core/schemas.py +0 -0
  172. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/cot/__init__.py +0 -0
  173. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/cot/fetcher.py +0 -0
  174. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/cot/workflow.py +0 -0
  175. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/crypto/__init__.py +0 -0
  176. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/crypto/downloader.py +0 -0
  177. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/etfs/__init__.py +0 -0
  178. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/etfs/downloader.py +0 -0
  179. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/export/__init__.py +0 -0
  180. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/export/formats/__init__.py +0 -0
  181. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/export/formats/base.py +0 -0
  182. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/export/formats/csv.py +0 -0
  183. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/export/formats/excel.py +0 -0
  184. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/export/formats/json.py +0 -0
  185. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/export/manager.py +0 -0
  186. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/futures/AGENTS.md +0 -0
  187. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/futures/adjustment.py +0 -0
  188. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/futures/book_downloader.py +0 -0
  189. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/futures/config.py +0 -0
  190. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/futures/continuous.py +0 -0
  191. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/futures/continuous_downloader.py +0 -0
  192. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/futures/databento_parser.py +0 -0
  193. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/futures/definitions.py +0 -0
  194. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/futures/downloader.py +0 -0
  195. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/futures/individual_downloader.py +0 -0
  196. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/futures/parser.py +0 -0
  197. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/futures/schema.py +0 -0
  198. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/macro/__init__.py +0 -0
  199. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/managers/__init__.py +0 -0
  200. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/managers/async_batch.py +0 -0
  201. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/managers/batch_manager.py +0 -0
  202. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/managers/config_manager.py +0 -0
  203. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/managers/fetch_manager.py +0 -0
  204. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/managers/provider_manager.py +0 -0
  205. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/provider_updater.py +0 -0
  206. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/providers/alpaca.py +0 -0
  207. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/providers/aqr.py +0 -0
  208. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/providers/async_base.py +0 -0
  209. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/providers/binance.py +0 -0
  210. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/providers/binance_public.py +0 -0
  211. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/providers/coingecko.py +0 -0
  212. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/providers/cryptocompare.py +0 -0
  213. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/providers/eodhd.py +0 -0
  214. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/providers/fundamentals.py +0 -0
  215. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/providers/fxmacrodata.py +0 -0
  216. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/providers/learned_synthetic.py +0 -0
  217. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/providers/mixins/__init__.py +0 -0
  218. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/providers/mixins/async_session.py +0 -0
  219. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/providers/mixins/circuit_breaker.py +0 -0
  220. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/providers/mixins/rate_limit.py +0 -0
  221. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/providers/mixins/retry.py +0 -0
  222. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/providers/mixins/session.py +0 -0
  223. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/providers/mixins/validation.py +0 -0
  224. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/providers/mock.py +0 -0
  225. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/providers/nasdaq_itch.py +0 -0
  226. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/providers/oanda.py +0 -0
  227. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/providers/okx.py +0 -0
  228. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/providers/synthetic.py +0 -0
  229. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/providers/tiingo.py +0 -0
  230. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/providers/twelve_data.py +0 -0
  231. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/providers/wiki_prices.py +0 -0
  232. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/py.typed +0 -0
  233. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/security/__init__.py +0 -0
  234. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/security/path_validator.py +0 -0
  235. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/sessions/__init__.py +0 -0
  236. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/storage/AGENTS.md +0 -0
  237. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/storage/async_base.py +0 -0
  238. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/storage/backend.py +0 -0
  239. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/storage/chunked.py +0 -0
  240. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/storage/config.py +0 -0
  241. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/storage/data_profile.py +0 -0
  242. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/storage/keys.py +0 -0
  243. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/storage/legacy_migration.py +0 -0
  244. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/storage/metadata_tracker.py +0 -0
  245. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/storage/migration.py +0 -0
  246. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/storage/protocols.py +0 -0
  247. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/synthetic/__init__.py +0 -0
  248. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/synthetic/ohlcv_utils.py +0 -0
  249. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/synthetic/registry.py +0 -0
  250. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/universe.py +0 -0
  251. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/utils/__init__.py +0 -0
  252. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/utils/async_rate_limit.py +0 -0
  253. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/utils/format.py +0 -0
  254. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/utils/gap_optimizer.py +0 -0
  255. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/utils/global_rate_limit.py +0 -0
  256. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/utils/locking.py +0 -0
  257. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/utils/rate_limit.py +0 -0
  258. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/utils/retry.py +0 -0
  259. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/validation/__init__.py +0 -0
  260. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/validation/base.py +0 -0
  261. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/validation/ohlcv.py +0 -0
  262. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/src/ml4t/data/validation/report.py +0 -0
  263. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/__init__.py +0 -0
  264. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/anomaly/__init__.py +0 -0
  265. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/anomaly/test_base.py +0 -0
  266. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/anomaly/test_config.py +0 -0
  267. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/anomaly/test_detectors.py +0 -0
  268. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/anomaly/test_manager.py +0 -0
  269. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/assets/__init__.py +0 -0
  270. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/assets/test_asset_class.py +0 -0
  271. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/assets/test_contracts.py +0 -0
  272. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/assets/test_schemas.py +0 -0
  273. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/conftest.py +0 -0
  274. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/core/__init__.py +0 -0
  275. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/core/test_schemas.py +0 -0
  276. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/cot/__init__.py +0 -0
  277. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/cot/test_fetcher.py +0 -0
  278. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/cot/test_workflow.py +0 -0
  279. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/futures/test_adjustment.py +0 -0
  280. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/futures/test_book_downloader.py +0 -0
  281. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/futures/test_continuous.py +0 -0
  282. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/futures/test_databento_parser.py +0 -0
  283. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/futures/test_downloader.py +0 -0
  284. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/futures/test_parser.py +0 -0
  285. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/futures/test_roll.py +0 -0
  286. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/integration/conftest.py +0 -0
  287. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/integration/test_alpaca.py +0 -0
  288. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/integration/test_binance_public.py +0 -0
  289. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/integration/test_coingecko.py +0 -0
  290. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/integration/test_cryptocompare.py +0 -0
  291. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/integration/test_eodhd.py +0 -0
  292. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/integration/test_factor_providers.py +0 -0
  293. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/integration/test_finnhub.py +0 -0
  294. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/integration/test_fred.py +0 -0
  295. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/integration/test_fxmacrodata.py +0 -0
  296. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/integration/test_oanda.py +0 -0
  297. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/integration/test_polygon.py +0 -0
  298. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/integration/test_real_api_integration.py +0 -0
  299. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/integration/test_release_provider_contracts.py +0 -0
  300. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/integration/test_tiingo.py +0 -0
  301. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/integration/test_twelve_data.py +0 -0
  302. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/integration/test_wiki_prices.py +0 -0
  303. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/integration/test_yahoo.py +0 -0
  304. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/providers/test_nasdaq_itch.py +0 -0
  305. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/storage/test_data_profile.py +0 -0
  306. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/storage/test_keys.py +0 -0
  307. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/storage/test_legacy_migration.py +0 -0
  308. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/storage/test_metadata_tracker.py +0 -0
  309. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/storage/test_migration.py +0 -0
  310. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/synthetic/__init__.py +0 -0
  311. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/synthetic/test_learned_synthetic.py +0 -0
  312. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/synthetic/test_registry.py +0 -0
  313. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_adjustments_core.py +0 -0
  314. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_alpaca_provider.py +0 -0
  315. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_anomaly/__init__.py +0 -0
  316. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_anomaly/test_detectors.py +0 -0
  317. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_anomaly/test_manager.py +0 -0
  318. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_aqr_provider.py +0 -0
  319. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_aqr_provider_edge_cases.py +0 -0
  320. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_async_providers.py +0 -0
  321. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_async_providers_extended.py +0 -0
  322. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_async_rate_limit.py +0 -0
  323. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_base_provider_enhanced.py +0 -0
  324. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_batch_load.py +0 -0
  325. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_batch_load_integration.py +0 -0
  326. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_batch_load_performance.py +0 -0
  327. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_binance.py +0 -0
  328. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_binance_public_edge_cases.py +0 -0
  329. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_binance_public_provider.py +0 -0
  330. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_chunked_storage.py +0 -0
  331. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_cli_interface.py +0 -0
  332. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_coingecko_provider.py +0 -0
  333. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_config.py +0 -0
  334. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_config_basics.py +0 -0
  335. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_config_integration.py +0 -0
  336. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_config_loader.py +0 -0
  337. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_config_models.py +0 -0
  338. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_config_validator.py +0 -0
  339. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_configuration_authority.py +0 -0
  340. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_core_abstractions.py +0 -0
  341. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_core_models.py +0 -0
  342. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_cot.py +0 -0
  343. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_crypto_downloader.py +0 -0
  344. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_cryptocompare.py +0 -0
  345. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_cryptocompare_provider.py +0 -0
  346. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_data_manager.py +0 -0
  347. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_data_manager_unit.py +0 -0
  348. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_data_manager_universe.py +0 -0
  349. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_databento_acceptance.py +0 -0
  350. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_databento_provider.py +0 -0
  351. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_distribution_verification.py +0 -0
  352. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_eodhd_provider.py +0 -0
  353. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_etf_downloader.py +0 -0
  354. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_exceptions.py +0 -0
  355. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_export.py +0 -0
  356. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_fred_unit.py +0 -0
  357. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_fundamentals_providers.py +0 -0
  358. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_fxmacrodata_provider.py +0 -0
  359. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_gap_optimizer.py +0 -0
  360. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_global_rate_limit.py +0 -0
  361. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_global_rate_limiting.py +0 -0
  362. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_hive_storage.py +0 -0
  363. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_import.py +0 -0
  364. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_kalshi_unit.py +0 -0
  365. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_locking.py +0 -0
  366. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_metadata_tracker.py +0 -0
  367. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_mock_provider.py +0 -0
  368. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_mock_provider_enhanced.py +0 -0
  369. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_multi_asset.py +0 -0
  370. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_oanda_provider.py +0 -0
  371. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_offline_network_policy.py +0 -0
  372. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_okx_provider.py +0 -0
  373. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_package_metadata.py +0 -0
  374. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_polymarket_unit.py +0 -0
  375. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_provider_consistency.py +0 -0
  376. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_provider_contract_verification.py +0 -0
  377. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_provider_registration.py +0 -0
  378. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_provider_registry_contract.py +0 -0
  379. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_provider_updater.py +0 -0
  380. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_rate_limit.py +0 -0
  381. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_regenerate_combined.py +0 -0
  382. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_retry.py +0 -0
  383. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_security.py +0 -0
  384. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_simple_utils.py +0 -0
  385. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_storage.py +0 -0
  386. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_storage_backends.py +0 -0
  387. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_storage_config_authority.py +0 -0
  388. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_storage_migration.py +0 -0
  389. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_storage_paths.py +0 -0
  390. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_synthetic_provider.py +0 -0
  391. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_tiingo_provider.py +0 -0
  392. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_twelve_data_provider.py +0 -0
  393. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_universe.py +0 -0
  394. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_validation_report.py +0 -0
  395. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_validation_simple.py +0 -0
  396. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_validation_unit.py +0 -0
  397. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_wiki_prices_provider.py +0 -0
  398. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_yahoo_empty_download_reporting.py +0 -0
  399. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_yahoo_provider.py +0 -0
  400. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_yahoo_provider_edge_cases.py +0 -0
  401. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/test_yahoo_provider_unit.py +0 -0
  402. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/utils/test_format.py +0 -0
  403. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/utils/test_format_integration.py +0 -0
  404. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/validation/test_cross_validation.py +0 -0
  405. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/validation/test_ohlcv_validator.py +0 -0
  406. {ml4t_data-0.2.0 → ml4t_data-0.3.0}/tests/validation/test_report.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: ml4t-data
3
- Version: 0.2.0
3
+ Version: 0.3.0
4
4
  Summary: Market data acquisition, storage, and update workflows for machine learning for trading.
5
5
  Project-URL: Homepage, https://www.ml4trading.io/
6
6
  Project-URL: Documentation, https://www.ml4trading.io/docs/data/
@@ -29,15 +29,17 @@ Classifier: Topic :: Scientific/Engineering :: Information Analysis
29
29
  Classifier: Typing :: Typed
30
30
  Requires-Python: <3.15,>=3.12
31
31
  Requires-Dist: aiofiles>=23.0.0
32
+ Requires-Dist: certifi>=2026.10.19
32
33
  Requires-Dist: click>=8.0.0
33
34
  Requires-Dist: filelock>=3.19.1
34
35
  Requires-Dist: httpx>=0.25.0
36
+ Requires-Dist: ml4t-specs>=0.2.0
35
37
  Requires-Dist: numpy>=1.24.0
36
38
  Requires-Dist: openpyxl>=3.1.5
37
- Requires-Dist: pandas-market-calendars>=4.3.0
39
+ Requires-Dist: pandas-market-calendars>=5.4.0
38
40
  Requires-Dist: pandas>=2.0.0
39
41
  Requires-Dist: platformdirs>=4.0.0
40
- Requires-Dist: polars>=0.20.0
42
+ Requires-Dist: polars>=1.36.1
41
43
  Requires-Dist: pybreaker>=1.0.0
42
44
  Requires-Dist: pydantic-settings>=2.0.0
43
45
  Requires-Dist: pydantic<3,>=2.12
@@ -68,14 +70,14 @@ Requires-Dist: requests>=2.32.0; extra == 'all'
68
70
  Requires-Dist: ruff>=0.1.0; extra == 'all'
69
71
  Requires-Dist: ty; extra == 'all'
70
72
  Requires-Dist: xlsxwriter>=3.1.0; extra == 'all'
71
- Requires-Dist: yfinance>=0.2.0; extra == 'all'
73
+ Requires-Dist: yfinance>=1.5.2; extra == 'all'
72
74
  Provides-Extra: all-providers
73
75
  Requires-Dist: cot-reports>=0.1.0; extra == 'all-providers'
74
76
  Requires-Dist: databento>=0.38.0; extra == 'all-providers'
75
77
  Requires-Dist: oandapyv20>=0.7.0; extra == 'all-providers'
76
78
  Requires-Dist: pyarrow>=14.0.0; extra == 'all-providers'
77
79
  Requires-Dist: requests>=2.32.0; extra == 'all-providers'
78
- Requires-Dist: yfinance>=0.2.0; extra == 'all-providers'
80
+ Requires-Dist: yfinance>=1.5.2; extra == 'all-providers'
79
81
  Provides-Extra: cot
80
82
  Requires-Dist: cot-reports>=0.1.0; extra == 'cot'
81
83
  Provides-Extra: databento
@@ -104,7 +106,7 @@ Provides-Extra: oanda
104
106
  Requires-Dist: oandapyv20>=0.7.0; extra == 'oanda'
105
107
  Requires-Dist: requests>=2.32.0; extra == 'oanda'
106
108
  Provides-Extra: yahoo
107
- Requires-Dist: yfinance>=0.2.0; extra == 'yahoo'
109
+ Requires-Dist: yfinance>=1.5.2; extra == 'yahoo'
108
110
  Description-Content-Type: text/markdown
109
111
 
110
112
  # ml4t-data
@@ -179,7 +181,7 @@ uv run pre-commit install
179
181
  uv run ruff check src/ tests/
180
182
  uv run ruff format --check src/ tests/
181
183
  uv run ty check
182
- uv run pytest tests/ -q
184
+ uv run pytest tests/ -q -ra --cov=ml4t.data --cov-report=term-missing
183
185
  uv run mkdocs build --strict
184
186
  uv build
185
187
  ```
@@ -70,7 +70,7 @@ uv run pre-commit install
70
70
  uv run ruff check src/ tests/
71
71
  uv run ruff format --check src/ tests/
72
72
  uv run ty check
73
- uv run pytest tests/ -q
73
+ uv run pytest tests/ -q -ra --cov=ml4t.data --cov-report=term-missing
74
74
  uv run mkdocs build --strict
75
75
  uv build
76
76
  ```
@@ -8,6 +8,9 @@ build-backend = "hatchling.build"
8
8
  [tool.hatch.version]
9
9
  source = "vcs"
10
10
 
11
+ [tool.hatch.metadata]
12
+ allow-direct-references = true
13
+
11
14
  [tool.hatch.build.hooks.vcs]
12
15
  version-file = "src/ml4t/data/_version.py"
13
16
 
@@ -74,12 +77,14 @@ requires-python = ">=3.12,<3.15"
74
77
 
75
78
  # Core dependencies
76
79
  dependencies = [
80
+ "ml4t-specs>=0.2.0",
77
81
  # Data processing
78
- "polars>=0.20.0",
82
+ "polars>=1.36.1",
79
83
  "pandas>=2.0.0",
80
84
  "numpy>=1.24.0",
81
85
  # HTTP and networking
82
86
  "httpx>=0.25.0",
87
+ "certifi>=2026.10.19",
83
88
  "tenacity>=8.0.0",
84
89
  "pybreaker>=1.0.0", # Circuit breaker pattern
85
90
  # Configuration and CLI
@@ -95,14 +100,14 @@ dependencies = [
95
100
  "rich>=13.0.0",
96
101
  "aiofiles>=23.0.0", # Async file I/O for async storage backends
97
102
  # Exchange calendars for session-aware operations
98
- "pandas-market-calendars>=4.3.0",
103
+ "pandas-market-calendars>=5.4.0",
99
104
  "openpyxl>=3.1.5",
100
105
  ]
101
106
 
102
107
  [project.optional-dependencies]
103
108
  # Provider-specific dependencies
104
109
  yahoo = [
105
- "yfinance>=0.2.0",
110
+ "yfinance>=1.5.2",
106
111
  ]
107
112
  databento = [
108
113
  "databento>=0.38.0",
@@ -181,7 +186,7 @@ dev = [
181
186
  "twine>=6.0.0",
182
187
  "pip-audit>=2.10.1",
183
188
  "databento>=0.38.0",
184
- "yfinance>=0.2.0",
189
+ "yfinance>=1.5.2",
185
190
  ]
186
191
 
187
192
  [tool.uv]
@@ -301,6 +306,8 @@ omit = [
301
306
  ]
302
307
 
303
308
  [tool.coverage.report]
309
+ fail_under = 85
310
+ show_missing = true
304
311
  exclude_lines = [
305
312
  "pragma: no cover",
306
313
  "def __repr__",
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '0.2.0'
22
- __version_tuple__ = version_tuple = (0, 2, 0)
21
+ __version__ = version = '0.3.0'
22
+ __version_tuple__ = version_tuple = (0, 3, 0)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -15,9 +15,15 @@ from .core import (
15
15
  apply_dividends,
16
16
  apply_splits,
17
17
  )
18
+ from .history import AdjustedHistory, prepare_adjusted_history
19
+ from .inputs import apply_adjustment_factors, prepare_action_inputs
18
20
 
19
21
  __all__ = [
20
22
  "apply_splits",
21
23
  "apply_dividends",
22
24
  "apply_corporate_actions",
25
+ "apply_adjustment_factors",
26
+ "prepare_action_inputs",
27
+ "AdjustedHistory",
28
+ "prepare_adjusted_history",
23
29
  ]
@@ -0,0 +1,110 @@
1
+ """Select supplied factor curves without recomputing their financial definition."""
2
+
3
+ from datetime import datetime
4
+ from typing import Any
5
+
6
+ import pandas as pd
7
+ import polars as pl
8
+
9
+ from ml4t.data.core.revisions import select_revisions, session_label_at, utc_column, utc_cutoff
10
+ from ml4t.specs import FeedSpec
11
+
12
+
13
+ def prepare_supplied_factors(
14
+ factors: pl.DataFrame,
15
+ prices: pl.DataFrame,
16
+ actions: pl.DataFrame,
17
+ feed: FeedSpec,
18
+ as_of: datetime | str | None,
19
+ clock_col: str,
20
+ ) -> tuple[pl.DataFrame, dict[str, Any]]:
21
+ asset = FeedSpec._coerce_entity_col(feed.entity_col) or "asset"
22
+ keys = [asset, clock_col]
23
+ if "price_adjustment_factor" not in factors.columns:
24
+ raise ValueError("A supplied history requires price_adjustment_factor")
25
+ candidates = factors.join(prices.select(keys).unique(), on=keys, how="semi")
26
+ candidates = utc_column(candidates, "available_at", feed.timezone)
27
+ versioned = {"source", "revision_id"}.issubset(candidates.columns) and all(
28
+ not candidates[name].null_count() for name in ("source", "revision_id")
29
+ )
30
+ selected = (
31
+ select_revisions(candidates, [*keys, "source"], as_of)
32
+ if as_of is not None or versioned
33
+ else candidates
34
+ )
35
+ if selected.select(keys).is_duplicated().any():
36
+ raise ValueError("Choose one supplied factor revision per observation")
37
+ if prices.select(keys).join(selected.select(keys), on=keys, how="anti").height:
38
+ raise ValueError("Supplied factor coverage is incomplete at the requested cutoff")
39
+ if "basis_at" not in selected.columns:
40
+ selected = selected.with_columns(
41
+ pl.lit(None, dtype=pl.Datetime("ns", "UTC")).alias("basis_at")
42
+ )
43
+ if selected.schema["basis_at"] != pl.Date:
44
+ selected = utc_column(selected, "basis_at", feed.timezone)
45
+ if as_of is not None:
46
+ if selected.schema["basis_at"] == pl.Date or selected["basis_at"].null_count():
47
+ raise ValueError("Known basis_at instants are required for causal supplied factors")
48
+ if selected.filter(pl.col("basis_at") > utc_cutoff(as_of)).height:
49
+ raise ValueError("Supplied basis_at cannot be later than the cutoff")
50
+ counts = selected.group_by(asset).agg(pl.col("basis_at").n_unique())
51
+ if counts.filter(pl.col("basis_at") != 1).height:
52
+ raise ValueError("Declare one supplied share basis per asset")
53
+ bases = selected.select(asset, "basis_at").unique()
54
+ if actions.height:
55
+ latest = actions.group_by(asset).agg(
56
+ pl.col("effective_at").max().alias("last_effective_at")
57
+ )
58
+ if actions.schema["effective_at"] == pl.Date:
59
+ stamps = bases["basis_at"].cast(pl.Datetime("ns", "UTC")).cast(pl.Int64)
60
+ labels = [
61
+ session_label_at(pd.Timestamp(value, unit="ns", tz="UTC"), feed)
62
+ for value in stamps
63
+ ]
64
+ bases = bases.with_columns(pl.Series("basis_session", labels, dtype=pl.Date))
65
+ checked = bases.join(latest, on=asset, how="left")
66
+ stale = checked.filter(pl.col("last_effective_at") > pl.col("basis_session"))
67
+ else:
68
+ checked = bases.join(latest, on=asset, how="left")
69
+ stale = checked.filter(pl.col("last_effective_at") > pl.col("basis_at"))
70
+ if stale.height:
71
+ raise ValueError("Supplied share basis predates an applicable known source action")
72
+ if "currency" in selected.columns and "currency" in prices.columns:
73
+ units = prices.select(*keys, pl.col("currency").alias("price_currency")).join(
74
+ selected.select(*keys, pl.col("currency").alias("factor_currency")),
75
+ on=keys,
76
+ )
77
+ if units.filter(
78
+ pl.col("price_currency").is_not_null()
79
+ & pl.col("factor_currency").is_not_null()
80
+ & (pl.col("price_currency") != pl.col("factor_currency"))
81
+ ).height:
82
+ raise ValueError("Known price and supplied factor currency units conflict")
83
+ numeric = [
84
+ name
85
+ for name in ("price_adjustment_factor", "volume_adjustment_factor")
86
+ if name in selected.columns
87
+ ]
88
+ provenance = [name for name in selected.columns if name not in {*keys, *numeric}]
89
+ projected = selected.select(
90
+ *keys,
91
+ *numeric,
92
+ *(pl.col(name).alias(f"factor_{name}") for name in provenance),
93
+ )
94
+ output = (
95
+ prices.select(asset, feed.timestamp_col, clock_col)
96
+ .join(
97
+ projected,
98
+ on=keys,
99
+ how="left",
100
+ validate="1:1",
101
+ )
102
+ .drop(clock_col)
103
+ )
104
+ return output, {
105
+ "factor_revision_identity": "declared" if versioned else "unknown unversioned capture",
106
+ "factor_basis_known": not selected["basis_at"].null_count(),
107
+ "factor_availability_known": not selected["available_at"].null_count(),
108
+ "factor_rows_outside_window": factors.height - candidates.height,
109
+ "volume_factor_supplied": "volume_adjustment_factor" in numeric,
110
+ }
@@ -47,6 +47,22 @@ def _future_cumulative_product(column: str) -> pl.Expr:
47
47
  return pl.col(column).shift(-1, fill_value=1.0).reverse().cum_prod().reverse()
48
48
 
49
49
 
50
+ def _event_adjustment_factors(
51
+ prices: pl.DataFrame, *, split_col: str, dividend_col: str | None
52
+ ) -> pl.DataFrame:
53
+ """Add canonical local event factors before composing a historical share basis."""
54
+ price_event_factor = (
55
+ pl.col("close")
56
+ / (pl.col(split_col).cast(pl.Float64) * (pl.col("close") + pl.col(dividend_col)))
57
+ if dividend_col is not None
58
+ else 1.0 / pl.col(split_col).cast(pl.Float64)
59
+ )
60
+ return prices.with_columns(
61
+ price_event_factor.alias("_price_event_factor"),
62
+ pl.col(split_col).cast(pl.Float64).alias("_volume_event_factor"),
63
+ )
64
+
65
+
50
66
  def _apply_canonical_adjustments(
51
67
  prices: pl.DataFrame,
52
68
  *,
@@ -64,16 +80,7 @@ def _apply_canonical_adjustments(
64
80
  )
65
81
  df = prices.sort("date").clone()
66
82
 
67
- price_event_factor = (
68
- pl.col("close")
69
- / (pl.col(split_col).cast(pl.Float64) * (pl.col("close") + pl.col(dividend_col)))
70
- if dividend_col is not None
71
- else 1.0 / pl.col(split_col).cast(pl.Float64)
72
- )
73
- df = df.with_columns(
74
- price_event_factor.alias("_price_event_factor"),
75
- pl.col(split_col).cast(pl.Float64).alias("_volume_event_factor"),
76
- ).with_columns(
83
+ df = _event_adjustment_factors(df, split_col=split_col, dividend_col=dividend_col).with_columns(
77
84
  _future_cumulative_product("_price_event_factor").alias("price_adjustment_factor"),
78
85
  _future_cumulative_product("_volume_event_factor").alias("volume_adjustment_factor"),
79
86
  )