expr_tracker 0.4.1__tar.gz → 0.5.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- expr_tracker-0.5.0/.github/workflows/ci.yaml +64 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/.github/workflows/docs.yaml +1 -1
- expr_tracker-0.5.0/.github/workflows/release.yaml +141 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/.gitignore +9 -0
- expr_tracker-0.5.0/Cargo.lock +1878 -0
- expr_tracker-0.5.0/Cargo.toml +54 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/PKG-INFO +46 -28
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/README.md +20 -3
- expr_tracker-0.5.0/benchmarks/compare_native.py +272 -0
- expr_tracker-0.5.0/benchmarks/native_workloads.py +568 -0
- expr_tracker-0.5.0/benchmarks/profile_logging.py +181 -0
- expr_tracker-0.5.0/benchmarks/results/architecture-simplification.json +5723 -0
- expr_tracker-0.5.0/benchmarks/results/artifact-atime-isolation.json +266 -0
- expr_tracker-0.5.0/benchmarks/results/artifact-metadata-investigation.json +63 -0
- expr_tracker-0.5.0/benchmarks/results/file-splitting.json +2202 -0
- expr_tracker-0.5.0/benchmarks/results/logging-100-metrics.json +5857 -0
- expr_tracker-0.5.0/benchmarks/results/native-migration.json +8718 -0
- expr_tracker-0.5.0/benchmarks/results/native-optimized.json +10053 -0
- expr_tracker-0.5.0/benchmarks/results/notification-simplification.json +6893 -0
- expr_tracker-0.5.0/benchmarks/results/observer-projection.json +6759 -0
- expr_tracker-0.5.0/benchmarks/results/serializer-cache-probe.json +7212 -0
- expr_tracker-0.5.0/benchmarks/results/series-cache-probe.json +11790 -0
- expr_tracker-0.5.0/benchmarks/results/transport-optimized.json +9871 -0
- expr_tracker-0.5.0/benchmarks/results/validation-reuse.json +8274 -0
- expr_tracker-0.5.0/benchmarks/results/viewer-lock-scope.json +8210 -0
- expr_tracker-0.5.0/benchmarks/viewer.py +201 -0
- expr_tracker-0.5.0/docs/architecture.md +497 -0
- expr_tracker-0.5.0/docs/benchmarks/native-migration.md +1225 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/docs/guide/cli.md +25 -0
- expr_tracker-0.5.0/docs/guide/web-viewer.md +224 -0
- expr_tracker-0.5.0/docs/native-development.md +80 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/mkdocs.yml +3 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/pyproject.toml +35 -6
- expr_tracker-0.5.0/rust/alerts/delivery.rs +516 -0
- expr_tracker-0.5.0/rust/alerts/evaluation.rs +521 -0
- expr_tracker-0.5.0/rust/alerts/rules.rs +574 -0
- expr_tracker-0.5.0/rust/alerts/watchdog.rs +72 -0
- expr_tracker-0.5.0/rust/alerts.rs +315 -0
- expr_tracker-0.5.0/rust/alerts_parser.rs +568 -0
- expr_tracker-0.5.0/rust/alerts_plan.rs +458 -0
- expr_tracker-0.5.0/rust/artifacts.rs +755 -0
- expr_tracker-0.5.0/rust/history/json.rs +525 -0
- expr_tracker-0.5.0/rust/history/notifications.rs +151 -0
- expr_tracker-0.5.0/rust/history/reader/segments.rs +625 -0
- expr_tracker-0.5.0/rust/history/reader.rs +485 -0
- expr_tracker-0.5.0/rust/history/record.rs +442 -0
- expr_tracker-0.5.0/rust/history/series.rs +443 -0
- expr_tracker-0.5.0/rust/history/state/operations.rs +585 -0
- expr_tracker-0.5.0/rust/history/state.rs +435 -0
- expr_tracker-0.5.0/rust/history/tests.rs +238 -0
- expr_tracker-0.5.0/rust/history/writer/persistence.rs +376 -0
- expr_tracker-0.5.0/rust/history/writer/tests.rs +93 -0
- expr_tracker-0.5.0/rust/history/writer.rs +643 -0
- expr_tracker-0.5.0/rust/history.rs +38 -0
- expr_tracker-0.5.0/rust/lib.rs +23 -0
- expr_tracker-0.5.0/rust/spans.rs +164 -0
- expr_tracker-0.5.0/rust/summary.rs +172 -0
- expr_tracker-0.5.0/rust/trace/lanes.rs +159 -0
- expr_tracker-0.5.0/rust/trace.rs +664 -0
- expr_tracker-0.5.0/rust/viewer/auth.rs +112 -0
- expr_tracker-0.5.0/rust/viewer/auth_store.rs +230 -0
- expr_tracker-0.5.0/rust/viewer/directories.rs +130 -0
- expr_tracker-0.5.0/rust/viewer/identity.rs +75 -0
- expr_tracker-0.5.0/rust/viewer/index.rs +253 -0
- expr_tracker-0.5.0/rust/viewer/stream.rs +178 -0
- expr_tracker-0.5.0/rust/viewer/tests.rs +423 -0
- expr_tracker-0.5.0/rust/viewer.rs +748 -0
- expr_tracker-0.5.0/rust/viewer_json.rs +39 -0
- expr_tracker-0.5.0/src/expr_tracker/_web/assets/curve-worker-BkxJLhdR.js +2 -0
- expr_tracker-0.5.0/src/expr_tracker/_web/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
- expr_tracker-0.5.0/src/expr_tracker/_web/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
- expr_tracker-0.5.0/src/expr_tracker/_web/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
- expr_tracker-0.5.0/src/expr_tracker/_web/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
- expr_tracker-0.5.0/src/expr_tracker/_web/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
- expr_tracker-0.5.0/src/expr_tracker/_web/assets/index-Cl3CI7bq.css +1 -0
- expr_tracker-0.5.0/src/expr_tracker/_web/assets/index-Czg8NFJT.js +53 -0
- expr_tracker-0.5.0/src/expr_tracker/_web/index.html +14 -0
- expr_tracker-0.5.0/src/expr_tracker/alerts/dispatch.py +150 -0
- expr_tracker-0.5.0/src/expr_tracker/alerts/engine.py +216 -0
- expr_tracker-0.5.0/src/expr_tracker/alerts/expr/eval.py +61 -0
- expr_tracker-0.5.0/src/expr_tracker/alerts/expr/functions.py +126 -0
- expr_tracker-0.5.0/src/expr_tracker/alerts/expr/lexer.py +81 -0
- expr_tracker-0.5.0/src/expr_tracker/alerts/expr/parser.py +5 -0
- expr_tracker-0.5.0/src/expr_tracker/alerts/expr/rule.py +66 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/src/expr_tracker/alerts/models.py +3 -8
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/src/expr_tracker/artifacts.py +67 -144
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/src/expr_tracker/cli.py +37 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/src/expr_tracker/history/__init__.py +2 -0
- expr_tracker-0.5.0/src/expr_tracker/history/_store_types.py +207 -0
- expr_tracker-0.5.0/src/expr_tracker/history/_store_writes.py +265 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/src/expr_tracker/history/codec.py +2 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/src/expr_tracker/history/frame.py +20 -0
- expr_tracker-0.5.0/src/expr_tracker/history/reader.py +248 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/src/expr_tracker/history/rotation.py +3 -9
- expr_tracker-0.5.0/src/expr_tracker/history/series.py +116 -0
- expr_tracker-0.5.0/src/expr_tracker/history/store.py +739 -0
- expr_tracker-0.5.0/src/expr_tracker/history/writer.py +338 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/src/expr_tracker/run.py +39 -13
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/src/expr_tracker/spans.py +60 -41
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/src/expr_tracker/summary.py +15 -41
- expr_tracker-0.5.0/src/expr_tracker/trace.py +117 -0
- expr_tracker-0.5.0/tests/_artifact_metadata.py +79 -0
- expr_tracker-0.5.0/tests/_callback_helpers.py +65 -0
- expr_tracker-0.5.0/tests/_reader_edge_helpers.py +37 -0
- expr_tracker-0.5.0/tests/_span_helpers.py +60 -0
- expr_tracker-0.5.0/tests/_span_plugin_helpers.py +254 -0
- expr_tracker-0.5.0/tests/_trace_helpers.py +122 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_alert_delivery.py +13 -11
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_alert_dispatch.py +26 -17
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_alert_engine.py +4 -2
- expr_tracker-0.5.0/tests/test_alert_native.py +328 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_alert_routing.py +8 -21
- expr_tracker-0.5.0/tests/test_artifact_metadata.py +135 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_artifacts.py +147 -5
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_cache.py +12 -9
- expr_tracker-0.5.0/tests/test_callback_isolation.py +398 -0
- expr_tracker-0.5.0/tests/test_callback_lifecycle.py +450 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_commit_timestamps.py +4 -4
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_e2e.py +7 -1
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_features.py +5 -6
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_fork_safety.py +1 -1
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_history_admission.py +27 -5
- expr_tracker-0.5.0/tests/test_history_concurrency.py +128 -0
- expr_tracker-0.5.0/tests/test_native_commit_queue.py +121 -0
- expr_tracker-0.5.0/tests/test_native_fast_paths.py +456 -0
- expr_tracker-0.5.0/tests/test_native_metric_projection.py +136 -0
- expr_tracker-0.5.0/tests/test_plugin_cpu_time.py +243 -0
- expr_tracker-0.5.0/tests/test_plugin_gpu_stats.py +549 -0
- expr_tracker-0.5.0/tests/test_plugin_resources.py +159 -0
- expr_tracker-0.5.0/tests/test_plugin_torch_memory.py +382 -0
- expr_tracker-0.5.0/tests/test_reader_edge_cases.py +446 -0
- expr_tracker-0.5.0/tests/test_reader_live_queries.py +403 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_review_regressions.py +1 -1
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_rotation.py +50 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_rule_lifecycle.py +4 -4
- expr_tracker-0.5.0/tests/test_source_size.py +28 -0
- expr_tracker-0.5.0/tests/test_span_coordination.py +381 -0
- expr_tracker-0.5.0/tests/test_span_plugins.py +448 -0
- expr_tracker-0.5.0/tests/test_span_printing.py +402 -0
- expr_tracker-0.5.0/tests/test_spans.py +418 -0
- expr_tracker-0.5.0/tests/test_trace.py +357 -0
- expr_tracker-0.5.0/tests/test_trace_export_failures.py +201 -0
- expr_tracker-0.5.0/tests/test_trace_queries.py +304 -0
- expr_tracker-0.5.0/tests/test_viewer.py +441 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_writer_buffer.py +29 -3
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_writer_bytes.py +37 -13
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_writer_diagnostics.py +84 -33
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/uv.lock +2 -1
- expr_tracker-0.5.0/web/components.json +25 -0
- expr_tracker-0.5.0/web/e2e/viewer.spec.ts +698 -0
- expr_tracker-0.5.0/web/index.html +13 -0
- expr_tracker-0.5.0/web/package-lock.json +6805 -0
- expr_tracker-0.5.0/web/package.json +35 -0
- expr_tracker-0.5.0/web/playwright.config.ts +8 -0
- expr_tracker-0.5.0/web/src/api.test.ts +45 -0
- expr_tracker-0.5.0/web/src/api.ts +95 -0
- expr_tracker-0.5.0/web/src/app.tsx +236 -0
- expr_tracker-0.5.0/web/src/chart-export.ts +54 -0
- expr_tracker-0.5.0/web/src/chart-settings-dialog.tsx +83 -0
- expr_tracker-0.5.0/web/src/chart-settings.test.ts +54 -0
- expr_tracker-0.5.0/web/src/chart-settings.ts +117 -0
- expr_tracker-0.5.0/web/src/chart-ticks.test.ts +24 -0
- expr_tracker-0.5.0/web/src/chart-ticks.ts +33 -0
- expr_tracker-0.5.0/web/src/components/ui/badge.tsx +48 -0
- expr_tracker-0.5.0/web/src/components/ui/button.tsx +66 -0
- expr_tracker-0.5.0/web/src/components/ui/card.tsx +102 -0
- expr_tracker-0.5.0/web/src/components/ui/checkbox.tsx +30 -0
- expr_tracker-0.5.0/web/src/components/ui/dialog.tsx +168 -0
- expr_tracker-0.5.0/web/src/components/ui/input.tsx +18 -0
- expr_tracker-0.5.0/web/src/components/ui/select.tsx +191 -0
- expr_tracker-0.5.0/web/src/components/ui/sheet.tsx +145 -0
- expr_tracker-0.5.0/web/src/components/ui/switch.tsx +32 -0
- expr_tracker-0.5.0/web/src/components/ui/tabs.tsx +87 -0
- expr_tracker-0.5.0/web/src/curve-data.test.ts +93 -0
- expr_tracker-0.5.0/web/src/curve-data.ts +89 -0
- expr_tracker-0.5.0/web/src/curve-groups.tsx +135 -0
- expr_tracker-0.5.0/web/src/curve-stream.ts +93 -0
- expr_tracker-0.5.0/web/src/curve-worker.ts +191 -0
- expr_tracker-0.5.0/web/src/inspector.tsx +103 -0
- expr_tracker-0.5.0/web/src/lib/utils.ts +1 -0
- expr_tracker-0.5.0/web/src/main.tsx +7 -0
- expr_tracker-0.5.0/web/src/metric-chart.tsx +206 -0
- expr_tracker-0.5.0/web/src/plot-scheduler.test.ts +27 -0
- expr_tracker-0.5.0/web/src/plot-scheduler.ts +28 -0
- expr_tracker-0.5.0/web/src/run-picker.tsx +95 -0
- expr_tracker-0.5.0/web/src/session.tsx +78 -0
- expr_tracker-0.5.0/web/src/styles.css +134 -0
- expr_tracker-0.5.0/web/src/theme.tsx +40 -0
- expr_tracker-0.5.0/web/src/workspace-storage.test.ts +47 -0
- expr_tracker-0.5.0/web/src/workspace-storage.ts +54 -0
- expr_tracker-0.5.0/web/tsconfig.json +15 -0
- expr_tracker-0.5.0/web/vite.config.ts +14 -0
- expr_tracker-0.5.0/web/vitest.config.ts +5 -0
- expr_tracker-0.4.1/.github/workflows/ci.yaml +0 -39
- expr_tracker-0.4.1/.github/workflows/release.yaml +0 -57
- expr_tracker-0.4.1/docs/architecture.md +0 -253
- expr_tracker-0.4.1/src/expr_tracker/alerts/dispatch.py +0 -343
- expr_tracker-0.4.1/src/expr_tracker/alerts/engine.py +0 -389
- expr_tracker-0.4.1/src/expr_tracker/alerts/expr/eval.py +0 -362
- expr_tracker-0.4.1/src/expr_tracker/alerts/expr/functions.py +0 -289
- expr_tracker-0.4.1/src/expr_tracker/alerts/expr/lexer.py +0 -155
- expr_tracker-0.4.1/src/expr_tracker/alerts/expr/parser.py +0 -195
- expr_tracker-0.4.1/src/expr_tracker/alerts/expr/rule.py +0 -140
- expr_tracker-0.4.1/src/expr_tracker/history/reader.py +0 -591
- expr_tracker-0.4.1/src/expr_tracker/history/series.py +0 -150
- expr_tracker-0.4.1/src/expr_tracker/history/store.py +0 -1252
- expr_tracker-0.4.1/src/expr_tracker/history/writer.py +0 -832
- expr_tracker-0.4.1/src/expr_tracker/trace.py +0 -534
- expr_tracker-0.4.1/tests/test_callback_isolation.py +0 -863
- expr_tracker-0.4.1/tests/test_reader_edge_cases.py +0 -830
- expr_tracker-0.4.1/tests/test_span_plugins.py +0 -2003
- expr_tracker-0.4.1/tests/test_spans.py +0 -832
- expr_tracker-0.4.1/tests/test_trace.py +0 -853
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/LICENSE +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/docs/design.md +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/docs/examples.md +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/docs/getting-started.md +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/docs/guide/alerts.md +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/docs/guide/artifacts.md +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/docs/guide/backends.md +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/docs/guide/distributed.md +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/docs/guide/history.md +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/docs/guide/logging.md +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/docs/guide/spans.md +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/docs/guide/streams.md +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/docs/index.md +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/docs/reference/api.md +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/docs/reference/configuration.md +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/docs/reference/expressions.md +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/examples/README.md +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/examples/alert_rules.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/examples/checkpoints.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/examples/early_stopping.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/examples/multiprocess_pipeline.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/examples/profile_step.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/examples/quickstart.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/src/expr_tracker/__init__.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/src/expr_tracker/_compat.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/src/expr_tracker/_process.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/src/expr_tracker/alerts/__init__.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/src/expr_tracker/alerts/backends/__init__.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/src/expr_tracker/alerts/backends/base.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/src/expr_tracker/alerts/backends/cards.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/src/expr_tracker/alerts/expr/__init__.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/src/expr_tracker/alerts/expr/nodes.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/src/expr_tracker/encoders.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/src/expr_tracker/history/naming.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/src/expr_tracker/plugins.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/src/expr_tracker/py.typed +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/src/expr_tracker/tracker.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/src/expr_tracker/types.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/conftest.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_alert_backends.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_alert_models.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_benchmark.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_cli.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_correctness.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_distributed.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_examples.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_expr_builder.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_expr_eval.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_expr_functions.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_expr_parser.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_expr_properties.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_failure_modes.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_frame_codec_summary.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_history.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_hot_paths.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_integration.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_lark.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_nonfinite_conditions.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_perf.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_process_compat.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_public_surfaces.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_rule_overrides.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_rule_quoted_names.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_run_backends.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_run_dir.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_scenarios.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_serialization_edge_cases.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_series_edge_cases.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_span_lifecycle.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_span_value_encoding.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_step_commit.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_step_types.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_streams.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_stress.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_trace_perf.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_trackio.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_unicode_records.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_value_encoding.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_wandb.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/tests/test_writer_async.py +0 -0
- {expr_tracker-0.4.1 → expr_tracker-0.5.0}/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
|
|
@@ -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
|