expr_tracker 0.4.1__tar.gz → 0.6.1__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 (309) hide show
  1. expr_tracker-0.6.1/.github/workflows/ci.yaml +64 -0
  2. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/.github/workflows/docs.yaml +1 -1
  3. expr_tracker-0.6.1/.github/workflows/release.yaml +141 -0
  4. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/.gitignore +9 -0
  5. expr_tracker-0.6.1/Cargo.lock +1878 -0
  6. expr_tracker-0.6.1/Cargo.toml +54 -0
  7. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/PKG-INFO +46 -28
  8. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/README.md +20 -3
  9. expr_tracker-0.6.1/benchmarks/compare_native.py +272 -0
  10. expr_tracker-0.6.1/benchmarks/native_workloads.py +568 -0
  11. expr_tracker-0.6.1/benchmarks/profile_logging.py +181 -0
  12. expr_tracker-0.6.1/benchmarks/results/architecture-simplification.json +5723 -0
  13. expr_tracker-0.6.1/benchmarks/results/artifact-atime-isolation.json +266 -0
  14. expr_tracker-0.6.1/benchmarks/results/artifact-metadata-investigation.json +63 -0
  15. expr_tracker-0.6.1/benchmarks/results/file-splitting.json +2202 -0
  16. expr_tracker-0.6.1/benchmarks/results/logging-100-metrics.json +5857 -0
  17. expr_tracker-0.6.1/benchmarks/results/native-migration.json +8718 -0
  18. expr_tracker-0.6.1/benchmarks/results/native-optimized.json +10053 -0
  19. expr_tracker-0.6.1/benchmarks/results/notification-simplification.json +6893 -0
  20. expr_tracker-0.6.1/benchmarks/results/observer-projection.json +6759 -0
  21. expr_tracker-0.6.1/benchmarks/results/serializer-cache-probe.json +7212 -0
  22. expr_tracker-0.6.1/benchmarks/results/series-cache-probe.json +11790 -0
  23. expr_tracker-0.6.1/benchmarks/results/transport-optimized.json +9871 -0
  24. expr_tracker-0.6.1/benchmarks/results/validation-reuse.json +8274 -0
  25. expr_tracker-0.6.1/benchmarks/results/viewer-lock-scope.json +8210 -0
  26. expr_tracker-0.6.1/benchmarks/viewer.py +201 -0
  27. expr_tracker-0.6.1/docs/architecture.md +497 -0
  28. expr_tracker-0.6.1/docs/benchmarks/native-migration.md +1225 -0
  29. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/docs/guide/cli.md +25 -0
  30. expr_tracker-0.6.1/docs/guide/web-viewer.md +329 -0
  31. expr_tracker-0.6.1/docs/native-development.md +80 -0
  32. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/mkdocs.yml +3 -0
  33. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/pyproject.toml +36 -6
  34. expr_tracker-0.6.1/rust/alerts/delivery.rs +516 -0
  35. expr_tracker-0.6.1/rust/alerts/evaluation.rs +521 -0
  36. expr_tracker-0.6.1/rust/alerts/rules.rs +574 -0
  37. expr_tracker-0.6.1/rust/alerts/watchdog.rs +72 -0
  38. expr_tracker-0.6.1/rust/alerts.rs +315 -0
  39. expr_tracker-0.6.1/rust/alerts_parser.rs +568 -0
  40. expr_tracker-0.6.1/rust/alerts_plan.rs +458 -0
  41. expr_tracker-0.6.1/rust/artifacts.rs +755 -0
  42. expr_tracker-0.6.1/rust/history/json.rs +525 -0
  43. expr_tracker-0.6.1/rust/history/notifications.rs +151 -0
  44. expr_tracker-0.6.1/rust/history/reader/segments.rs +625 -0
  45. expr_tracker-0.6.1/rust/history/reader.rs +485 -0
  46. expr_tracker-0.6.1/rust/history/record.rs +442 -0
  47. expr_tracker-0.6.1/rust/history/series.rs +443 -0
  48. expr_tracker-0.6.1/rust/history/state/operations.rs +585 -0
  49. expr_tracker-0.6.1/rust/history/state.rs +435 -0
  50. expr_tracker-0.6.1/rust/history/tests.rs +238 -0
  51. expr_tracker-0.6.1/rust/history/writer/persistence.rs +376 -0
  52. expr_tracker-0.6.1/rust/history/writer/tests.rs +93 -0
  53. expr_tracker-0.6.1/rust/history/writer.rs +643 -0
  54. expr_tracker-0.6.1/rust/history.rs +38 -0
  55. expr_tracker-0.6.1/rust/lib.rs +23 -0
  56. expr_tracker-0.6.1/rust/spans.rs +164 -0
  57. expr_tracker-0.6.1/rust/summary.rs +172 -0
  58. expr_tracker-0.6.1/rust/trace/lanes.rs +159 -0
  59. expr_tracker-0.6.1/rust/trace.rs +664 -0
  60. expr_tracker-0.6.1/rust/viewer/aggregate.rs +217 -0
  61. expr_tracker-0.6.1/rust/viewer/auth.rs +112 -0
  62. expr_tracker-0.6.1/rust/viewer/auth_store.rs +257 -0
  63. expr_tracker-0.6.1/rust/viewer/directories.rs +130 -0
  64. expr_tracker-0.6.1/rust/viewer/identity.rs +75 -0
  65. expr_tracker-0.6.1/rust/viewer/index.rs +255 -0
  66. expr_tracker-0.6.1/rust/viewer/log_files.rs +30 -0
  67. expr_tracker-0.6.1/rust/viewer/stream.rs +188 -0
  68. expr_tracker-0.6.1/rust/viewer/tests.rs +464 -0
  69. expr_tracker-0.6.1/rust/viewer/workspace.rs +157 -0
  70. expr_tracker-0.6.1/rust/viewer.rs +780 -0
  71. expr_tracker-0.6.1/rust/viewer_json.rs +39 -0
  72. expr_tracker-0.6.1/src/expr_tracker/_web/assets/curve-worker-B9xuMx07.js +2 -0
  73. expr_tracker-0.6.1/src/expr_tracker/_web/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
  74. expr_tracker-0.6.1/src/expr_tracker/_web/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
  75. expr_tracker-0.6.1/src/expr_tracker/_web/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
  76. expr_tracker-0.6.1/src/expr_tracker/_web/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
  77. expr_tracker-0.6.1/src/expr_tracker/_web/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
  78. expr_tracker-0.6.1/src/expr_tracker/_web/assets/index-BVS-StHr.js +57 -0
  79. expr_tracker-0.6.1/src/expr_tracker/_web/assets/index-BfrrriPo.css +1 -0
  80. expr_tracker-0.6.1/src/expr_tracker/_web/favicon.svg +3 -0
  81. expr_tracker-0.6.1/src/expr_tracker/_web/index.html +15 -0
  82. expr_tracker-0.6.1/src/expr_tracker/alerts/dispatch.py +150 -0
  83. expr_tracker-0.6.1/src/expr_tracker/alerts/engine.py +216 -0
  84. expr_tracker-0.6.1/src/expr_tracker/alerts/expr/eval.py +61 -0
  85. expr_tracker-0.6.1/src/expr_tracker/alerts/expr/functions.py +126 -0
  86. expr_tracker-0.6.1/src/expr_tracker/alerts/expr/lexer.py +81 -0
  87. expr_tracker-0.6.1/src/expr_tracker/alerts/expr/parser.py +5 -0
  88. expr_tracker-0.6.1/src/expr_tracker/alerts/expr/rule.py +66 -0
  89. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/src/expr_tracker/alerts/models.py +3 -8
  90. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/src/expr_tracker/artifacts.py +67 -144
  91. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/src/expr_tracker/cli.py +37 -0
  92. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/src/expr_tracker/history/__init__.py +2 -0
  93. expr_tracker-0.6.1/src/expr_tracker/history/_store_types.py +207 -0
  94. expr_tracker-0.6.1/src/expr_tracker/history/_store_writes.py +265 -0
  95. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/src/expr_tracker/history/codec.py +2 -0
  96. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/src/expr_tracker/history/frame.py +20 -0
  97. expr_tracker-0.6.1/src/expr_tracker/history/reader.py +248 -0
  98. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/src/expr_tracker/history/rotation.py +3 -9
  99. expr_tracker-0.6.1/src/expr_tracker/history/series.py +116 -0
  100. expr_tracker-0.6.1/src/expr_tracker/history/store.py +739 -0
  101. expr_tracker-0.6.1/src/expr_tracker/history/writer.py +338 -0
  102. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/src/expr_tracker/run.py +39 -13
  103. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/src/expr_tracker/spans.py +60 -41
  104. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/src/expr_tracker/summary.py +15 -41
  105. expr_tracker-0.6.1/src/expr_tracker/trace.py +117 -0
  106. expr_tracker-0.6.1/tests/_artifact_metadata.py +79 -0
  107. expr_tracker-0.6.1/tests/_callback_helpers.py +65 -0
  108. expr_tracker-0.6.1/tests/_reader_edge_helpers.py +37 -0
  109. expr_tracker-0.6.1/tests/_span_helpers.py +60 -0
  110. expr_tracker-0.6.1/tests/_span_plugin_helpers.py +254 -0
  111. expr_tracker-0.6.1/tests/_trace_helpers.py +122 -0
  112. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_alert_delivery.py +13 -11
  113. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_alert_dispatch.py +26 -17
  114. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_alert_engine.py +4 -2
  115. expr_tracker-0.6.1/tests/test_alert_native.py +328 -0
  116. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_alert_routing.py +8 -21
  117. expr_tracker-0.6.1/tests/test_artifact_metadata.py +135 -0
  118. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_artifacts.py +147 -5
  119. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_cache.py +12 -9
  120. expr_tracker-0.6.1/tests/test_callback_isolation.py +398 -0
  121. expr_tracker-0.6.1/tests/test_callback_lifecycle.py +450 -0
  122. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_commit_timestamps.py +4 -4
  123. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_e2e.py +7 -1
  124. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_features.py +5 -6
  125. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_fork_safety.py +1 -1
  126. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_history_admission.py +27 -5
  127. expr_tracker-0.6.1/tests/test_history_concurrency.py +128 -0
  128. expr_tracker-0.6.1/tests/test_native_commit_queue.py +121 -0
  129. expr_tracker-0.6.1/tests/test_native_fast_paths.py +456 -0
  130. expr_tracker-0.6.1/tests/test_native_metric_projection.py +136 -0
  131. expr_tracker-0.6.1/tests/test_plugin_cpu_time.py +243 -0
  132. expr_tracker-0.6.1/tests/test_plugin_gpu_stats.py +549 -0
  133. expr_tracker-0.6.1/tests/test_plugin_resources.py +159 -0
  134. expr_tracker-0.6.1/tests/test_plugin_torch_memory.py +382 -0
  135. expr_tracker-0.6.1/tests/test_reader_edge_cases.py +446 -0
  136. expr_tracker-0.6.1/tests/test_reader_live_queries.py +403 -0
  137. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_review_regressions.py +1 -1
  138. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_rotation.py +50 -0
  139. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_rule_lifecycle.py +4 -4
  140. expr_tracker-0.6.1/tests/test_source_size.py +28 -0
  141. expr_tracker-0.6.1/tests/test_span_coordination.py +381 -0
  142. expr_tracker-0.6.1/tests/test_span_plugins.py +448 -0
  143. expr_tracker-0.6.1/tests/test_span_printing.py +402 -0
  144. expr_tracker-0.6.1/tests/test_spans.py +418 -0
  145. expr_tracker-0.6.1/tests/test_trace.py +357 -0
  146. expr_tracker-0.6.1/tests/test_trace_export_failures.py +201 -0
  147. expr_tracker-0.6.1/tests/test_trace_queries.py +304 -0
  148. expr_tracker-0.6.1/tests/test_viewer.py +590 -0
  149. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_writer_buffer.py +29 -3
  150. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_writer_bytes.py +37 -13
  151. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_writer_diagnostics.py +84 -33
  152. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/uv.lock +8 -7
  153. expr_tracker-0.6.1/web/components.json +25 -0
  154. expr_tracker-0.6.1/web/e2e/viewer-fixtures.ts +194 -0
  155. expr_tracker-0.6.1/web/e2e/viewer-layout.spec.ts +573 -0
  156. expr_tracker-0.6.1/web/e2e/viewer-sources.spec.ts +468 -0
  157. expr_tracker-0.6.1/web/e2e/viewer-streaming.spec.ts +333 -0
  158. expr_tracker-0.6.1/web/e2e/viewer.spec.ts +571 -0
  159. expr_tracker-0.6.1/web/index.html +14 -0
  160. expr_tracker-0.6.1/web/package-lock.json +6805 -0
  161. expr_tracker-0.6.1/web/package.json +35 -0
  162. expr_tracker-0.6.1/web/playwright.config.ts +8 -0
  163. expr_tracker-0.6.1/web/public/favicon.svg +3 -0
  164. expr_tracker-0.6.1/web/src/api.test.ts +49 -0
  165. expr_tracker-0.6.1/web/src/api.ts +109 -0
  166. expr_tracker-0.6.1/web/src/app.tsx +269 -0
  167. expr_tracker-0.6.1/web/src/chart-export.ts +60 -0
  168. expr_tracker-0.6.1/web/src/chart-layout.test.ts +57 -0
  169. expr_tracker-0.6.1/web/src/chart-layout.ts +57 -0
  170. expr_tracker-0.6.1/web/src/chart-settings-dialog.tsx +174 -0
  171. expr_tracker-0.6.1/web/src/chart-settings.test.ts +64 -0
  172. expr_tracker-0.6.1/web/src/chart-settings.ts +129 -0
  173. expr_tracker-0.6.1/web/src/chart-ticks.test.ts +41 -0
  174. expr_tracker-0.6.1/web/src/chart-ticks.ts +47 -0
  175. expr_tracker-0.6.1/web/src/components/ui/badge.tsx +48 -0
  176. expr_tracker-0.6.1/web/src/components/ui/button.tsx +66 -0
  177. expr_tracker-0.6.1/web/src/components/ui/card.tsx +102 -0
  178. expr_tracker-0.6.1/web/src/components/ui/checkbox.tsx +30 -0
  179. expr_tracker-0.6.1/web/src/components/ui/dialog.tsx +175 -0
  180. expr_tracker-0.6.1/web/src/components/ui/input.tsx +18 -0
  181. expr_tracker-0.6.1/web/src/components/ui/select.tsx +191 -0
  182. expr_tracker-0.6.1/web/src/components/ui/sheet.tsx +145 -0
  183. expr_tracker-0.6.1/web/src/components/ui/switch.tsx +32 -0
  184. expr_tracker-0.6.1/web/src/components/ui/tabs.tsx +87 -0
  185. expr_tracker-0.6.1/web/src/curve-data.test.ts +98 -0
  186. expr_tracker-0.6.1/web/src/curve-data.ts +88 -0
  187. expr_tracker-0.6.1/web/src/curve-groups.tsx +265 -0
  188. expr_tracker-0.6.1/web/src/curve-stream.ts +93 -0
  189. expr_tracker-0.6.1/web/src/curve-worker.ts +192 -0
  190. expr_tracker-0.6.1/web/src/inspector.tsx +103 -0
  191. expr_tracker-0.6.1/web/src/lib/utils.ts +1 -0
  192. expr_tracker-0.6.1/web/src/main.tsx +7 -0
  193. expr_tracker-0.6.1/web/src/metric-chart.tsx +363 -0
  194. expr_tracker-0.6.1/web/src/plot-scheduler.test.ts +27 -0
  195. expr_tracker-0.6.1/web/src/plot-scheduler.ts +28 -0
  196. expr_tracker-0.6.1/web/src/run-picker.tsx +95 -0
  197. expr_tracker-0.6.1/web/src/runs-panel.tsx +136 -0
  198. expr_tracker-0.6.1/web/src/session.tsx +78 -0
  199. expr_tracker-0.6.1/web/src/source-aggregation.test.ts +22 -0
  200. expr_tracker-0.6.1/web/src/source-aggregation.ts +49 -0
  201. expr_tracker-0.6.1/web/src/styles.css +240 -0
  202. expr_tracker-0.6.1/web/src/theme.tsx +41 -0
  203. expr_tracker-0.6.1/web/src/use-chart-drag.ts +101 -0
  204. expr_tracker-0.6.1/web/src/workspace.test.ts +46 -0
  205. expr_tracker-0.6.1/web/src/workspace.ts +101 -0
  206. expr_tracker-0.6.1/web/tsconfig.json +15 -0
  207. expr_tracker-0.6.1/web/vite.config.ts +14 -0
  208. expr_tracker-0.6.1/web/vitest.config.ts +5 -0
  209. expr_tracker-0.4.1/.github/workflows/ci.yaml +0 -39
  210. expr_tracker-0.4.1/.github/workflows/release.yaml +0 -57
  211. expr_tracker-0.4.1/docs/architecture.md +0 -253
  212. expr_tracker-0.4.1/src/expr_tracker/alerts/dispatch.py +0 -343
  213. expr_tracker-0.4.1/src/expr_tracker/alerts/engine.py +0 -389
  214. expr_tracker-0.4.1/src/expr_tracker/alerts/expr/eval.py +0 -362
  215. expr_tracker-0.4.1/src/expr_tracker/alerts/expr/functions.py +0 -289
  216. expr_tracker-0.4.1/src/expr_tracker/alerts/expr/lexer.py +0 -155
  217. expr_tracker-0.4.1/src/expr_tracker/alerts/expr/parser.py +0 -195
  218. expr_tracker-0.4.1/src/expr_tracker/alerts/expr/rule.py +0 -140
  219. expr_tracker-0.4.1/src/expr_tracker/history/reader.py +0 -591
  220. expr_tracker-0.4.1/src/expr_tracker/history/series.py +0 -150
  221. expr_tracker-0.4.1/src/expr_tracker/history/store.py +0 -1252
  222. expr_tracker-0.4.1/src/expr_tracker/history/writer.py +0 -832
  223. expr_tracker-0.4.1/src/expr_tracker/trace.py +0 -534
  224. expr_tracker-0.4.1/tests/test_callback_isolation.py +0 -863
  225. expr_tracker-0.4.1/tests/test_reader_edge_cases.py +0 -830
  226. expr_tracker-0.4.1/tests/test_span_plugins.py +0 -2003
  227. expr_tracker-0.4.1/tests/test_spans.py +0 -832
  228. expr_tracker-0.4.1/tests/test_trace.py +0 -853
  229. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/LICENSE +0 -0
  230. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/docs/design.md +0 -0
  231. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/docs/examples.md +0 -0
  232. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/docs/getting-started.md +0 -0
  233. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/docs/guide/alerts.md +0 -0
  234. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/docs/guide/artifacts.md +0 -0
  235. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/docs/guide/backends.md +0 -0
  236. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/docs/guide/distributed.md +0 -0
  237. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/docs/guide/history.md +0 -0
  238. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/docs/guide/logging.md +0 -0
  239. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/docs/guide/spans.md +0 -0
  240. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/docs/guide/streams.md +0 -0
  241. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/docs/index.md +0 -0
  242. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/docs/reference/api.md +0 -0
  243. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/docs/reference/configuration.md +0 -0
  244. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/docs/reference/expressions.md +0 -0
  245. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/examples/README.md +0 -0
  246. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/examples/alert_rules.py +0 -0
  247. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/examples/checkpoints.py +0 -0
  248. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/examples/early_stopping.py +0 -0
  249. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/examples/multiprocess_pipeline.py +0 -0
  250. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/examples/profile_step.py +0 -0
  251. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/examples/quickstart.py +0 -0
  252. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/src/expr_tracker/__init__.py +0 -0
  253. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/src/expr_tracker/_compat.py +0 -0
  254. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/src/expr_tracker/_process.py +0 -0
  255. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/src/expr_tracker/alerts/__init__.py +0 -0
  256. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/src/expr_tracker/alerts/backends/__init__.py +0 -0
  257. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/src/expr_tracker/alerts/backends/base.py +0 -0
  258. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/src/expr_tracker/alerts/backends/cards.py +0 -0
  259. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/src/expr_tracker/alerts/expr/__init__.py +0 -0
  260. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/src/expr_tracker/alerts/expr/nodes.py +0 -0
  261. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/src/expr_tracker/encoders.py +0 -0
  262. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/src/expr_tracker/history/naming.py +0 -0
  263. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/src/expr_tracker/plugins.py +0 -0
  264. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/src/expr_tracker/py.typed +0 -0
  265. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/src/expr_tracker/tracker.py +0 -0
  266. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/src/expr_tracker/types.py +0 -0
  267. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/conftest.py +0 -0
  268. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_alert_backends.py +0 -0
  269. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_alert_models.py +0 -0
  270. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_benchmark.py +0 -0
  271. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_cli.py +0 -0
  272. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_correctness.py +0 -0
  273. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_distributed.py +0 -0
  274. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_examples.py +0 -0
  275. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_expr_builder.py +0 -0
  276. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_expr_eval.py +0 -0
  277. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_expr_functions.py +0 -0
  278. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_expr_parser.py +0 -0
  279. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_expr_properties.py +0 -0
  280. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_failure_modes.py +0 -0
  281. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_frame_codec_summary.py +0 -0
  282. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_history.py +0 -0
  283. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_hot_paths.py +0 -0
  284. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_integration.py +0 -0
  285. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_lark.py +0 -0
  286. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_nonfinite_conditions.py +0 -0
  287. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_perf.py +0 -0
  288. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_process_compat.py +0 -0
  289. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_public_surfaces.py +0 -0
  290. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_rule_overrides.py +0 -0
  291. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_rule_quoted_names.py +0 -0
  292. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_run_backends.py +0 -0
  293. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_run_dir.py +0 -0
  294. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_scenarios.py +0 -0
  295. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_serialization_edge_cases.py +0 -0
  296. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_series_edge_cases.py +0 -0
  297. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_span_lifecycle.py +0 -0
  298. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_span_value_encoding.py +0 -0
  299. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_step_commit.py +0 -0
  300. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_step_types.py +0 -0
  301. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_streams.py +0 -0
  302. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_stress.py +0 -0
  303. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_trace_perf.py +0 -0
  304. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_trackio.py +0 -0
  305. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_unicode_records.py +0 -0
  306. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_value_encoding.py +0 -0
  307. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_wandb.py +0 -0
  308. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_writer_async.py +0 -0
  309. {expr_tracker-0.4.1 → expr_tracker-0.6.1}/tests/test_writer_durability.py +0 -0
@@ -0,0 +1,64 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ workflow_call:
8
+
9
+ permissions:
10
+ contents: read
11
+
12
+ jobs:
13
+ test:
14
+ name: Python ${{ matrix.python }}
15
+ runs-on: ubuntu-latest
16
+ strategy:
17
+ fail-fast: false
18
+ matrix:
19
+ python: ["3.10", "3.11", "3.12", "3.13"]
20
+ steps:
21
+ - name: Checkout
22
+ uses: actions/checkout@v5
23
+ with:
24
+ fetch-depth: 0
25
+
26
+ - name: Install uv
27
+ uses: astral-sh/setup-uv@v6
28
+ with:
29
+ enable-cache: true
30
+ python-version: ${{ matrix.python }}
31
+
32
+ - name: Install Rust
33
+ uses: dtolnay/rust-toolchain@stable
34
+
35
+ - name: Cache native builds
36
+ uses: Swatinem/rust-cache@v2
37
+
38
+ - name: Install Node
39
+ uses: actions/setup-node@v4
40
+ with:
41
+ node-version: "22"
42
+ cache: npm
43
+ cache-dependency-path: web/package-lock.json
44
+
45
+ - name: Build and test viewer
46
+ run: npm --prefix web ci && npm --prefix web run check
47
+
48
+ - name: Install dependencies
49
+ run: uv sync --frozen --all-extras
50
+
51
+ - name: Native tests
52
+ run: cargo test --locked --lib
53
+
54
+ - name: Lint
55
+ run: uv run --frozen ruff check src tests benchmarks
56
+
57
+ - name: Test
58
+ run: uv run --frozen pytest -m "not slow and not benchmark"
59
+
60
+ - name: Browser smoke test
61
+ if: matrix.python == '3.12'
62
+ run: |
63
+ npx --prefix web playwright install --with-deps chromium
64
+ npm --prefix web run test:e2e
@@ -31,7 +31,7 @@ jobs:
31
31
  enable-cache: true
32
32
 
33
33
  - name: Build
34
- run: uv run --group docs mkdocs build --strict
34
+ run: uv run --only-group docs mkdocs build --strict
35
35
 
36
36
  - name: Upload artifact
37
37
  uses: actions/upload-pages-artifact@v3
@@ -0,0 +1,141 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - "v*"
7
+ workflow_dispatch:
8
+
9
+ permissions:
10
+ contents: read
11
+
12
+ jobs:
13
+ checks:
14
+ uses: ./.github/workflows/ci.yaml
15
+
16
+ web:
17
+ name: Build viewer assets
18
+ runs-on: ubuntu-latest
19
+ needs: checks
20
+ steps:
21
+ - uses: actions/checkout@v5
22
+ - uses: actions/setup-node@v4
23
+ with:
24
+ node-version: "22"
25
+ cache: npm
26
+ cache-dependency-path: web/package-lock.json
27
+ - run: npm --prefix web ci && npm --prefix web run build
28
+ - uses: actions/upload-artifact@v4
29
+ with:
30
+ name: viewer-assets
31
+ path: src/expr_tracker/_web
32
+ include-hidden-files: true
33
+
34
+ wheels:
35
+ name: Wheel ${{ matrix.target }}
36
+ needs: web
37
+ strategy:
38
+ fail-fast: false
39
+ matrix:
40
+ include:
41
+ - os: ubuntu-latest
42
+ target: x86_64
43
+ - os: ubuntu-24.04-arm
44
+ target: aarch64
45
+ - os: macos-15-intel
46
+ target: x86_64
47
+ - os: macos-latest
48
+ target: aarch64
49
+ - os: windows-latest
50
+ target: x86_64
51
+ runs-on: ${{ matrix.os }}
52
+ steps:
53
+ - uses: actions/checkout@v5
54
+ - uses: actions/download-artifact@v4
55
+ with:
56
+ name: viewer-assets
57
+ path: src/expr_tracker/_web
58
+ - uses: actions/setup-python@v6
59
+ with:
60
+ python-version: "3.10"
61
+ - name: Build native wheel
62
+ uses: PyO3/maturin-action@v1
63
+ with:
64
+ target: ${{ matrix.target }}
65
+ manylinux: "2_28"
66
+ args: --release --locked --out dist
67
+ - name: Verify installed distribution
68
+ shell: bash
69
+ run: |
70
+ python -m pip install dist/*.whl
71
+ cd "${RUNNER_TEMP}"
72
+ python -c "from expr_tracker import _native; from importlib.resources import files; assert _native.implementation == 'rust'; assert (files('expr_tracker') / '_web' / 'index.html').is_file()"
73
+ python -c "import tempfile; import expr_tracker as et; d=tempfile.mkdtemp(); et.init(project='smoke',run_dir=d,backends=[],max_file_bytes=100); et.log({'loss':1.0}); assert et.history(1)[0]['loss']==1.0; et.finish()"
74
+ - uses: actions/upload-artifact@v4
75
+ with:
76
+ name: wheel-${{ matrix.os }}-${{ matrix.target }}
77
+ path: dist/*.whl
78
+
79
+ sdist:
80
+ name: Source distribution
81
+ needs: web
82
+ runs-on: ubuntu-latest
83
+ steps:
84
+ - uses: actions/checkout@v5
85
+ - uses: actions/download-artifact@v4
86
+ with:
87
+ name: viewer-assets
88
+ path: src/expr_tracker/_web
89
+ - uses: astral-sh/setup-uv@v6
90
+ - name: Verify release version and build source distribution
91
+ run: |
92
+ uv run --no-project python -c "import tomllib; p=tomllib.load(open('pyproject.toml','rb')); c=tomllib.load(open('Cargo.toml','rb')); assert p['project']['version'] == c['package']['version']; import os; ref=os.environ['GITHUB_REF_NAME']; assert not ref.startswith('v') or ref[1:] == p['project']['version']"
93
+ uv build --sdist
94
+ uv run --no-project python -c "import glob,tarfile; names=tarfile.open(glob.glob('dist/*.tar.gz')[0]).getnames(); assert not any('/node_modules/' in p or '/target/' in p or p.endswith('.so') for p in names); assert any(p.endswith('src/expr_tracker/_web/index.html') for p in names)"
95
+ - uses: actions/upload-artifact@v4
96
+ with:
97
+ name: source-distribution
98
+ path: dist/*.tar.gz
99
+
100
+ release:
101
+ name: Build and publish to PyPI
102
+ needs: [wheels, sdist]
103
+ runs-on: ubuntu-latest
104
+ permissions:
105
+ # required for PyPI trusted publishing (OIDC)
106
+ id-token: write
107
+ # required to create the GitHub release
108
+ contents: write
109
+ steps:
110
+ - name: Install uv
111
+ uses: astral-sh/setup-uv@v6
112
+ with:
113
+ enable-cache: true
114
+
115
+ - uses: actions/download-artifact@v4
116
+ with:
117
+ pattern: wheel-*
118
+ path: dist
119
+ merge-multiple: true
120
+
121
+ - uses: actions/download-artifact@v4
122
+ with:
123
+ name: source-distribution
124
+ path: dist
125
+
126
+ - name: Check distribution metadata
127
+ run: uvx twine check dist/*
128
+
129
+ - name: Publish to PyPI
130
+ if: startsWith(github.ref, 'refs/tags/v')
131
+ uses: pypa/gh-action-pypi-publish@release/v1
132
+
133
+ - name: Create GitHub release
134
+ if: startsWith(github.ref, 'refs/tags/v')
135
+ env:
136
+ GH_TOKEN: ${{ github.token }}
137
+ run: |
138
+ gh release create "${GITHUB_REF_NAME}" dist/* \
139
+ --repo "${GITHUB_REPOSITORY}" \
140
+ --title "${GITHUB_REF_NAME}" \
141
+ --generate-notes
@@ -19,3 +19,12 @@ site/
19
19
  tracker/
20
20
  outputs/
21
21
  runs/
22
+
23
+ # Native builds and generated viewer assets
24
+ target/
25
+ *.so
26
+ *.pyd
27
+ web/node_modules/
28
+ web/test-results/
29
+ web/playwright-report/
30
+ src/expr_tracker/_web/