millwright 0.2.1__tar.gz → 2.2.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 (76) hide show
  1. millwright-2.2.0/.cargo/audit.toml +5 -0
  2. {millwright-0.2.1 → millwright-2.2.0}/.github/workflows/ci.yml +45 -18
  3. {millwright-0.2.1 → millwright-2.2.0}/.github/workflows/release-python.yml +20 -1
  4. {millwright-0.2.1 → millwright-2.2.0}/CHANGELOG.md +4 -3
  5. {millwright-0.2.1 → millwright-2.2.0}/Cargo.lock +107 -80
  6. {millwright-0.2.1 → millwright-2.2.0}/Cargo.toml +7 -5
  7. {millwright-0.2.1 → millwright-2.2.0}/GUIDE.md +1 -1
  8. {millwright-0.2.1 → millwright-2.2.0}/PKG-INFO +4 -7
  9. {millwright-0.2.1 → millwright-2.2.0}/README.md +3 -6
  10. {millwright-0.2.1 → millwright-2.2.0}/guide.html +3 -2
  11. {millwright-0.2.1 → millwright-2.2.0}/index.html +3 -3
  12. {millwright-0.2.1 → millwright-2.2.0}/pyproject.toml +1 -1
  13. {millwright-0.2.1 → millwright-2.2.0}/src/automl.rs +48 -2
  14. {millwright-0.2.1 → millwright-2.2.0}/src/backends/smartcore.rs +30 -11
  15. {millwright-0.2.1 → millwright-2.2.0}/src/evaluate.rs +29 -4
  16. {millwright-0.2.1 → millwright-2.2.0}/src/explain.rs +3 -0
  17. {millwright-0.2.1 → millwright-2.2.0}/src/lib.rs +1 -1
  18. {millwright-0.2.1 → millwright-2.2.0}/src/monitor.rs +52 -9
  19. {millwright-0.2.1 → millwright-2.2.0}/src/profile.rs +3 -0
  20. {millwright-0.2.1 → millwright-2.2.0}/src/python.rs +15 -15
  21. {millwright-0.2.1 → millwright-2.2.0}/src/registry.rs +195 -39
  22. {millwright-0.2.1 → millwright-2.2.0}/src/selection/mod.rs +3 -0
  23. {millwright-0.2.1 → millwright-2.2.0}/src/selection/scoring.rs +21 -14
  24. {millwright-0.2.1 → millwright-2.2.0}/src/serve.rs +139 -10
  25. millwright-2.2.0/tests/python_smoke.py +29 -0
  26. {millwright-0.2.1 → millwright-2.2.0}/.github/workflows/release-crate.yml +0 -0
  27. {millwright-0.2.1 → millwright-2.2.0}/.gitignore +0 -0
  28. {millwright-0.2.1 → millwright-2.2.0}/CNAME +0 -0
  29. {millwright-0.2.1 → millwright-2.2.0}/CONTRIBUTING.md +0 -0
  30. {millwright-0.2.1 → millwright-2.2.0}/LICENSE +0 -0
  31. {millwright-0.2.1 → millwright-2.2.0}/RELEASING.md +0 -0
  32. {millwright-0.2.1 → millwright-2.2.0}/benches/throughput.rs +0 -0
  33. {millwright-0.2.1 → millwright-2.2.0}/docs/data.html +0 -0
  34. {millwright-0.2.1 → millwright-2.2.0}/docs/deploy.html +0 -0
  35. {millwright-0.2.1 → millwright-2.2.0}/docs/index.html +0 -0
  36. {millwright-0.2.1 → millwright-2.2.0}/docs/insight.html +0 -0
  37. {millwright-0.2.1 → millwright-2.2.0}/docs/pipelines.html +0 -0
  38. {millwright-0.2.1 → millwright-2.2.0}/docs/python.html +0 -0
  39. {millwright-0.2.1 → millwright-2.2.0}/docs/site.css +0 -0
  40. {millwright-0.2.1 → millwright-2.2.0}/examples/automl.rs +0 -0
  41. {millwright-0.2.1 → millwright-2.2.0}/examples/backends.rs +0 -0
  42. {millwright-0.2.1 → millwright-2.2.0}/examples/explore.rs +0 -0
  43. {millwright-0.2.1 → millwright-2.2.0}/examples/insight.rs +0 -0
  44. {millwright-0.2.1 → millwright-2.2.0}/examples/operations.rs +0 -0
  45. {millwright-0.2.1 → millwright-2.2.0}/examples/portability.rs +0 -0
  46. {millwright-0.2.1 → millwright-2.2.0}/examples/specialized.rs +0 -0
  47. {millwright-0.2.1 → millwright-2.2.0}/examples/spine.rs +0 -0
  48. {millwright-0.2.1 → millwright-2.2.0}/examples/trust.rs +0 -0
  49. {millwright-0.2.1 → millwright-2.2.0}/examples/workflow.rs +0 -0
  50. {millwright-0.2.1 → millwright-2.2.0}/scripts/release.sh +0 -0
  51. {millwright-0.2.1 → millwright-2.2.0}/src/anomaly.rs +0 -0
  52. {millwright-0.2.1 → millwright-2.2.0}/src/backends/chronos.rs +0 -0
  53. {millwright-0.2.1 → millwright-2.2.0}/src/backends/incremental.rs +0 -0
  54. {millwright-0.2.1 → millwright-2.2.0}/src/backends/linfa.rs +0 -0
  55. {millwright-0.2.1 → millwright-2.2.0}/src/backends/mod.rs +0 -0
  56. {millwright-0.2.1 → millwright-2.2.0}/src/balance.rs +0 -0
  57. {millwright-0.2.1 → millwright-2.2.0}/src/calibration.rs +0 -0
  58. {millwright-0.2.1 → millwright-2.2.0}/src/diagnostics.rs +0 -0
  59. {millwright-0.2.1 → millwright-2.2.0}/src/ensemble.rs +0 -0
  60. {millwright-0.2.1 → millwright-2.2.0}/src/error.rs +0 -0
  61. {millwright-0.2.1 → millwright-2.2.0}/src/frame.rs +0 -0
  62. {millwright-0.2.1 → millwright-2.2.0}/src/logistic.rs +0 -0
  63. {millwright-0.2.1 → millwright-2.2.0}/src/onnx.rs +0 -0
  64. {millwright-0.2.1 → millwright-2.2.0}/src/pipeline.rs +0 -0
  65. {millwright-0.2.1 → millwright-2.2.0}/src/rng.rs +0 -0
  66. {millwright-0.2.1 → millwright-2.2.0}/src/selection/cv.rs +0 -0
  67. {millwright-0.2.1 → millwright-2.2.0}/src/selection/search.rs +0 -0
  68. {millwright-0.2.1 → millwright-2.2.0}/src/table.rs +0 -0
  69. {millwright-0.2.1 → millwright-2.2.0}/src/traits.rs +0 -0
  70. {millwright-0.2.1 → millwright-2.2.0}/src/transform.rs +0 -0
  71. {millwright-0.2.1 → millwright-2.2.0}/src/viz.rs +0 -0
  72. {millwright-0.2.1 → millwright-2.2.0}/tests/ensemble_zoo.rs +0 -0
  73. {millwright-0.2.1 → millwright-2.2.0}/tests/golden.rs +0 -0
  74. {millwright-0.2.1 → millwright-2.2.0}/tests/hero_snippet.rs +0 -0
  75. {millwright-0.2.1 → millwright-2.2.0}/tests/onnx_export.rs +0 -0
  76. {millwright-0.2.1 → millwright-2.2.0}/tests/real_data.rs +0 -0
@@ -0,0 +1,5 @@
1
+ [advisories]
2
+ # quick-xml 0.39.4 is retained in Cargo.lock by an inactive optional dependency
3
+ # and does not appear in Cargo's resolved graph for any target or feature set.
4
+ # Keep these explicit until the upstream package drops that stale lock edge.
5
+ ignore = ["RUSTSEC-2026-0194", "RUSTSEC-2026-0195"]
@@ -73,23 +73,23 @@ jobs:
73
73
  - { name: "spine", features: "--no-default-features --features smartcore-backend" }
74
74
  # The default install.
75
75
  - { name: "default", features: "" }
76
- # Each feature added on top of default the realistic install shape,
77
- # and enough to catch a feature that fails to compile in isolation.
78
- - { name: "eda", features: "--features eda" }
79
- - { name: "calibration", features: "--features calibration" }
80
- - { name: "anomaly", features: "--features anomaly" }
81
- - { name: "linfa", features: "--features linfa-backend" }
82
- - { name: "hpo", features: "--features hpo" }
83
- - { name: "diagnostics", features: "--features diagnostics" }
84
- - { name: "explain", features: "--features explain" }
85
- - { name: "viz", features: "--features viz" }
86
- - { name: "onnx", features: "--features onnx" }
87
- - { name: "registry", features: "--features registry" }
88
- - { name: "monitor", features: "--features monitor" }
89
- - { name: "serve", features: "--features serve" }
90
- - { name: "timeseries", features: "--features timeseries" }
91
- - { name: "incremental", features: "--features incremental" }
92
- - { name: "automl", features: "--features automl" }
76
+ # Each feature in isolation. Dependencies declared by that feature are
77
+ # enabled transitively; unrelated defaults cannot hide a bad edge.
78
+ - { name: "eda", features: "--no-default-features --features eda" }
79
+ - { name: "calibration", features: "--no-default-features --features calibration" }
80
+ - { name: "anomaly", features: "--no-default-features --features anomaly" }
81
+ - { name: "linfa", features: "--no-default-features --features linfa-backend" }
82
+ - { name: "hpo", features: "--no-default-features --features hpo" }
83
+ - { name: "diagnostics", features: "--no-default-features --features diagnostics" }
84
+ - { name: "explain", features: "--no-default-features --features explain" }
85
+ - { name: "viz", features: "--no-default-features --features viz" }
86
+ - { name: "onnx", features: "--no-default-features --features onnx" }
87
+ - { name: "registry", features: "--no-default-features --features registry" }
88
+ - { name: "monitor", features: "--no-default-features --features monitor" }
89
+ - { name: "serve", features: "--no-default-features --features serve" }
90
+ - { name: "timeseries", features: "--no-default-features --features timeseries" }
91
+ - { name: "incremental", features: "--no-default-features --features incremental" }
92
+ - { name: "automl", features: "--no-default-features --features automl" }
93
93
  # Everything at once — the superset build, including both ndarray worlds.
94
94
  - { name: "full", features: "--features full" }
95
95
  steps:
@@ -115,6 +115,33 @@ jobs:
115
115
  - uses: Swatinem/rust-cache@v2
116
116
  - run: cargo test --locked
117
117
 
118
+ msrv:
119
+ name: minimum Rust 1.95
120
+ runs-on: ubuntu-latest
121
+ steps:
122
+ - uses: actions/checkout@v5
123
+ - uses: dtolnay/rust-toolchain@1.95
124
+ - uses: Swatinem/rust-cache@v2
125
+ - run: cargo check --locked --all-targets --features full
126
+
127
+ supply-chain:
128
+ name: advisories
129
+ runs-on: ubuntu-latest
130
+ steps:
131
+ - uses: actions/checkout@v5
132
+ - uses: dtolnay/rust-toolchain@stable
133
+ - run: cargo install cargo-audit --locked
134
+ - run: cargo audit
135
+
136
+ semver:
137
+ name: public API compatibility
138
+ runs-on: ubuntu-latest
139
+ steps:
140
+ - uses: actions/checkout@v5
141
+ - uses: dtolnay/rust-toolchain@stable
142
+ - run: cargo install cargo-semver-checks --locked
143
+ - run: cargo semver-checks check-release
144
+
118
145
  # Compile and *run* the examples (the `test` jobs only build the library and
119
146
  # its tests), plus a compile-check of the benchmarks. The declared MSRV
120
147
  # (`rust-version` in Cargo.toml) is enforced by cargo for consumers; we do not
@@ -165,4 +192,4 @@ jobs:
165
192
  - run: pip install maturin
166
193
  - run: maturin build --locked --release
167
194
  - run: pip install --find-links target/wheels millwright
168
- - run: python -c "import millwright; print('millwright', getattr(millwright, '__version__', 'ok'))"
195
+ - run: python tests/python_smoke.py
@@ -12,7 +12,24 @@ permissions:
12
12
  contents: read
13
13
 
14
14
  jobs:
15
+ verify-version:
16
+ runs-on: ubuntu-latest
17
+ steps:
18
+ - uses: actions/checkout@v5
19
+ - uses: dtolnay/rust-toolchain@stable
20
+ - name: check Cargo, Python, and tag versions agree
21
+ shell: bash
22
+ run: |
23
+ cargo_version="$(cargo metadata --no-deps --format-version 1 | jq -r '.packages[0].version')"
24
+ python_version="$(python -c "import tomllib; print(tomllib.load(open('pyproject.toml','rb'))['project']['version'])")"
25
+ test "$cargo_version" = "$python_version" || { echo "::error::Cargo $cargo_version != Python $python_version"; exit 1; }
26
+ if [[ "$GITHUB_REF" == refs/tags/* ]]; then
27
+ tag="${GITHUB_REF_NAME#v}"
28
+ test "$tag" = "$cargo_version" || { echo "::error::tag $tag != package $cargo_version"; exit 1; }
29
+ fi
30
+
15
31
  linux:
32
+ needs: verify-version
16
33
  runs-on: ubuntu-latest
17
34
  strategy:
18
35
  fail-fast: false
@@ -37,6 +54,7 @@ jobs:
37
54
  path: dist
38
55
 
39
56
  windows:
57
+ needs: verify-version
40
58
  runs-on: windows-latest
41
59
  strategy:
42
60
  fail-fast: false
@@ -59,6 +77,7 @@ jobs:
59
77
  path: dist
60
78
 
61
79
  macos:
80
+ needs: verify-version
62
81
  runs-on: macos-latest
63
82
  strategy:
64
83
  fail-fast: false
@@ -80,6 +99,7 @@ jobs:
80
99
  path: dist
81
100
 
82
101
  sdist:
102
+ needs: verify-version
83
103
  runs-on: ubuntu-latest
84
104
  steps:
85
105
  - uses: actions/checkout@v5
@@ -111,4 +131,3 @@ jobs:
111
131
  uses: pypa/gh-action-pypi-publish@release/v1
112
132
  with:
113
133
  packages-dir: dist
114
- skip-existing: true
@@ -6,6 +6,8 @@ All notable changes to Millwright are recorded here. The format follows
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [2.2.0] - 2026-08-24
10
+
9
11
  ## [0.2.1] - 2026-08-23
10
12
 
11
13
  ### Added
@@ -125,9 +127,8 @@ All notable changes to Millwright are recorded here. The format follows
125
127
  feature-matrix CI (fmt, clippy `-D warnings`, docs, matrix, OS, examples,
126
128
  benches, publish dry-run, wheel).
127
129
  - `selection.rs` split into `selection/{scoring,cv,search}`.
128
- - MSRV is **1.95** (dep-dictated — `sysinfo` via tract, and polars); enforced by
129
- cargo via `rust-version` rather than a dedicated CI job (which would break on
130
- every transitive bump). The default install needs 1.85.
130
+ - MSRV is **1.95** (dep-dictated — `sysinfo` via tract, and polars), declared
131
+ through `rust-version` and exercised by a dedicated CI job.
131
132
  - De-staled the crate and module docs (no more "Phase 0 · the spine").
132
133
 
133
134
  ### Fixed
@@ -205,7 +205,7 @@ checksum = "82f6aeea286b8eb4dd3431a1be1b59d290ace00f5bfd8e2a159bc2a05e2c1667"
205
205
  dependencies = [
206
206
  "proc-macro2",
207
207
  "quote",
208
- "syn 3.0.3",
208
+ "syn 3.0.4",
209
209
  ]
210
210
 
211
211
  [[package]]
@@ -346,7 +346,16 @@ dependencies = [
346
346
  "cc",
347
347
  "cfg-if",
348
348
  "constant_time_eq",
349
- "cpufeatures",
349
+ "cpufeatures 0.3.0",
350
+ ]
351
+
352
+ [[package]]
353
+ name = "block-buffer"
354
+ version = "0.10.4"
355
+ source = "registry+https://github.com/rust-lang/crates.io-index"
356
+ checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
357
+ dependencies = [
358
+ "generic-array",
350
359
  ]
351
360
 
352
361
  [[package]]
@@ -432,7 +441,7 @@ checksum = "fc0e56a716f1e132ff6bf4bdac1c944a3fcdc1cae65f70a4a2a1ac3b401d2d1f"
432
441
  dependencies = [
433
442
  "proc-macro2",
434
443
  "quote",
435
- "syn 3.0.3",
444
+ "syn 3.0.4",
436
445
  ]
437
446
 
438
447
  [[package]]
@@ -496,7 +505,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
496
505
  checksum = "d524456ba66e72eb8b115ff89e01e497f8e6d11d78b70b1aa13c0fbd97540a81"
497
506
  dependencies = [
498
507
  "cfg-if",
499
- "cpufeatures",
508
+ "cpufeatures 0.3.0",
500
509
  "rand_core 0.10.1",
501
510
  ]
502
511
 
@@ -647,6 +656,15 @@ version = "0.8.7"
647
656
  source = "registry+https://github.com/rust-lang/crates.io-index"
648
657
  checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
649
658
 
659
+ [[package]]
660
+ name = "cpufeatures"
661
+ version = "0.2.17"
662
+ source = "registry+https://github.com/rust-lang/crates.io-index"
663
+ checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280"
664
+ dependencies = [
665
+ "libc",
666
+ ]
667
+
650
668
  [[package]]
651
669
  name = "cpufeatures"
652
670
  version = "0.3.0"
@@ -658,9 +676,9 @@ dependencies = [
658
676
 
659
677
  [[package]]
660
678
  name = "crc32fast"
661
- version = "1.5.0"
679
+ version = "1.5.1"
662
680
  source = "registry+https://github.com/rust-lang/crates.io-index"
663
- checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511"
681
+ checksum = "8498c871161e1742aaa9d52551b2d6ebdd4c3d45a3be423e3728f33b955be550"
664
682
  dependencies = [
665
683
  "cfg-if",
666
684
  ]
@@ -750,6 +768,16 @@ version = "0.2.4"
750
768
  source = "registry+https://github.com/rust-lang/crates.io-index"
751
769
  checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5"
752
770
 
771
+ [[package]]
772
+ name = "crypto-common"
773
+ version = "0.1.7"
774
+ source = "registry+https://github.com/rust-lang/crates.io-index"
775
+ checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a"
776
+ dependencies = [
777
+ "generic-array",
778
+ "typenum",
779
+ ]
780
+
753
781
  [[package]]
754
782
  name = "crypto-common"
755
783
  version = "0.2.2"
@@ -776,15 +804,25 @@ dependencies = [
776
804
  "syn 2.0.119",
777
805
  ]
778
806
 
807
+ [[package]]
808
+ name = "digest"
809
+ version = "0.10.7"
810
+ source = "registry+https://github.com/rust-lang/crates.io-index"
811
+ checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
812
+ dependencies = [
813
+ "block-buffer 0.10.4",
814
+ "crypto-common 0.1.7",
815
+ ]
816
+
779
817
  [[package]]
780
818
  name = "digest"
781
819
  version = "0.11.3"
782
820
  source = "registry+https://github.com/rust-lang/crates.io-index"
783
821
  checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2"
784
822
  dependencies = [
785
- "block-buffer",
823
+ "block-buffer 0.12.1",
786
824
  "const-oid",
787
- "crypto-common",
825
+ "crypto-common 0.2.2",
788
826
  ]
789
827
 
790
828
  [[package]]
@@ -793,7 +831,7 @@ version = "0.1.0"
793
831
  source = "registry+https://github.com/rust-lang/crates.io-index"
794
832
  checksum = "2de63d600bc7fab91180bc17385f29b342468dc8ef2af09dceba450a293de3da"
795
833
  dependencies = [
796
- "digest",
834
+ "digest 0.11.3",
797
835
  ]
798
836
 
799
837
  [[package]]
@@ -804,7 +842,7 @@ checksum = "c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8"
804
842
  dependencies = [
805
843
  "proc-macro2",
806
844
  "quote",
807
- "syn 3.0.3",
845
+ "syn 3.0.4",
808
846
  ]
809
847
 
810
848
  [[package]]
@@ -991,6 +1029,16 @@ dependencies = [
991
1029
  "percent-encoding",
992
1030
  ]
993
1031
 
1032
+ [[package]]
1033
+ name = "fs2"
1034
+ version = "0.4.3"
1035
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1036
+ checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213"
1037
+ dependencies = [
1038
+ "libc",
1039
+ "winapi",
1040
+ ]
1041
+
994
1042
  [[package]]
995
1043
  name = "fs4"
996
1044
  version = "1.1.0"
@@ -1057,7 +1105,7 @@ checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44"
1057
1105
  dependencies = [
1058
1106
  "proc-macro2",
1059
1107
  "quote",
1060
- "syn 3.0.3",
1108
+ "syn 3.0.4",
1061
1109
  ]
1062
1110
 
1063
1111
  [[package]]
@@ -1089,6 +1137,16 @@ dependencies = [
1089
1137
  "slab",
1090
1138
  ]
1091
1139
 
1140
+ [[package]]
1141
+ name = "generic-array"
1142
+ version = "0.14.7"
1143
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1144
+ checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
1145
+ dependencies = [
1146
+ "typenum",
1147
+ "version_check",
1148
+ ]
1149
+
1092
1150
  [[package]]
1093
1151
  name = "getrandom"
1094
1152
  version = "0.2.17"
@@ -1591,15 +1649,6 @@ dependencies = [
1591
1649
  "serde_core",
1592
1650
  ]
1593
1651
 
1594
- [[package]]
1595
- name = "indoc"
1596
- version = "2.0.7"
1597
- source = "registry+https://github.com/rust-lang/crates.io-index"
1598
- checksum = "79cf5c93f93228cf8efb3ba362535fb11199ac548a09ce117c9b1adc3030d706"
1599
- dependencies = [
1600
- "rustversion",
1601
- ]
1602
-
1603
1652
  [[package]]
1604
1653
  name = "instant"
1605
1654
  version = "0.1.13"
@@ -1852,9 +1901,9 @@ dependencies = [
1852
1901
 
1853
1902
  [[package]]
1854
1903
  name = "log"
1855
- version = "0.4.33"
1904
+ version = "0.4.34"
1856
1905
  source = "registry+https://github.com/rust-lang/crates.io-index"
1857
- checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad"
1906
+ checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6"
1858
1907
 
1859
1908
  [[package]]
1860
1909
  name = "lru-slab"
@@ -1924,23 +1973,15 @@ version = "0.3.3"
1924
1973
  source = "registry+https://github.com/rust-lang/crates.io-index"
1925
1974
  checksum = "38d1115007560874e373613744c6fba374c17688327a71c1476d1a5954cc857b"
1926
1975
 
1927
- [[package]]
1928
- name = "memoffset"
1929
- version = "0.9.1"
1930
- source = "registry+https://github.com/rust-lang/crates.io-index"
1931
- checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a"
1932
- dependencies = [
1933
- "autocfg",
1934
- ]
1935
-
1936
1976
  [[package]]
1937
1977
  name = "millwright"
1938
- version = "0.2.1"
1978
+ version = "2.2.0"
1939
1979
  dependencies = [
1940
1980
  "axum",
1941
1981
  "chronos-ts",
1942
1982
  "criterion",
1943
1983
  "driftwatch",
1984
+ "fs2",
1944
1985
  "http-body-util",
1945
1986
  "hyperopt-rs",
1946
1987
  "imbalance-rs",
@@ -1962,6 +2003,7 @@ dependencies = [
1962
2003
  "regression-diagnostics",
1963
2004
  "serde",
1964
2005
  "serde_json",
2006
+ "sha2 0.10.9",
1965
2007
  "shap-rs",
1966
2008
  "smartcore 0.6.10",
1967
2009
  "tokio",
@@ -2014,7 +2056,6 @@ checksum = "1e224dbc8a12719140b6766def2944fd994c9c60aab3cd20a3717b6993b28e5f"
2014
2056
  dependencies = [
2015
2057
  "ndarray 0.16.1",
2016
2058
  "rand 0.8.7",
2017
- "smartcore 0.3.2",
2018
2059
  "thiserror 1.0.69",
2019
2060
  ]
2020
2061
 
@@ -3038,7 +3079,7 @@ dependencies = [
3038
3079
  "rayon",
3039
3080
  "recursive",
3040
3081
  "regex",
3041
- "sha2",
3082
+ "sha2 0.11.0",
3042
3083
  "slotmap",
3043
3084
  "strum_macros",
3044
3085
  "tokio",
@@ -3318,37 +3359,32 @@ dependencies = [
3318
3359
 
3319
3360
  [[package]]
3320
3361
  name = "pyo3"
3321
- version = "0.24.2"
3362
+ version = "0.29.2"
3322
3363
  source = "registry+https://github.com/rust-lang/crates.io-index"
3323
- checksum = "e5203598f366b11a02b13aa20cab591229ff0a89fd121a308a5df751d5fc9219"
3364
+ checksum = "4688ddedf473e32662b9b067670129a8afb8c18e351482c70d62ba4a88171e8b"
3324
3365
  dependencies = [
3325
- "cfg-if",
3326
- "indoc",
3327
3366
  "libc",
3328
- "memoffset",
3329
3367
  "once_cell",
3330
3368
  "portable-atomic",
3331
3369
  "pyo3-build-config",
3332
3370
  "pyo3-ffi",
3333
3371
  "pyo3-macros",
3334
- "unindent",
3335
3372
  ]
3336
3373
 
3337
3374
  [[package]]
3338
3375
  name = "pyo3-build-config"
3339
- version = "0.24.2"
3376
+ version = "0.29.2"
3340
3377
  source = "registry+https://github.com/rust-lang/crates.io-index"
3341
- checksum = "99636d423fa2ca130fa5acde3059308006d46f98caac629418e53f7ebb1e9999"
3378
+ checksum = "f41027e41b4bd03f6e60f9f417fe24a6341a6bb744edd62b6f709f2a52ea30e9"
3342
3379
  dependencies = [
3343
- "once_cell",
3344
3380
  "target-lexicon",
3345
3381
  ]
3346
3382
 
3347
3383
  [[package]]
3348
3384
  name = "pyo3-ffi"
3349
- version = "0.24.2"
3385
+ version = "0.29.2"
3350
3386
  source = "registry+https://github.com/rust-lang/crates.io-index"
3351
- checksum = "78f9cf92ba9c409279bc3305b5409d90db2d2c22392d443a87df3a1adad59e33"
3387
+ checksum = "e591a95526fead067432c3b3a33fc74770b87b1e04e73671090d9c2055a2b327"
3352
3388
  dependencies = [
3353
3389
  "libc",
3354
3390
  "pyo3-build-config",
@@ -3356,9 +3392,9 @@ dependencies = [
3356
3392
 
3357
3393
  [[package]]
3358
3394
  name = "pyo3-macros"
3359
- version = "0.24.2"
3395
+ version = "0.29.2"
3360
3396
  source = "registry+https://github.com/rust-lang/crates.io-index"
3361
- checksum = "0b999cb1a6ce21f9a6b147dcf1be9ffedf02e0043aec74dc390f3007047cecd9"
3397
+ checksum = "73225868fc1cd84eef2c3c230ddb91273bf1de46aeb8a4248da76d32a0924a1c"
3362
3398
  dependencies = [
3363
3399
  "proc-macro2",
3364
3400
  "pyo3-macros-backend",
@@ -3368,13 +3404,12 @@ dependencies = [
3368
3404
 
3369
3405
  [[package]]
3370
3406
  name = "pyo3-macros-backend"
3371
- version = "0.24.2"
3407
+ version = "0.29.2"
3372
3408
  source = "registry+https://github.com/rust-lang/crates.io-index"
3373
- checksum = "822ece1c7e1012745607d5cf0bcb2874769f0f7cb34c4cde03b9358eb9ef911a"
3409
+ checksum = "571575aa3749fa6216757dd47d2a3e7ef360f329a40f0666a9fbd14889024952"
3374
3410
  dependencies = [
3375
3411
  "heck",
3376
3412
  "proc-macro2",
3377
- "pyo3-build-config",
3378
3413
  "quote",
3379
3414
  "syn 2.0.119",
3380
3415
  ]
@@ -3956,7 +3991,7 @@ checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348"
3956
3991
  dependencies = [
3957
3992
  "proc-macro2",
3958
3993
  "quote",
3959
- "syn 3.0.3",
3994
+ "syn 3.0.4",
3960
3995
  ]
3961
3996
 
3962
3997
  [[package]]
@@ -4006,6 +4041,17 @@ dependencies = [
4006
4041
  "serde",
4007
4042
  ]
4008
4043
 
4044
+ [[package]]
4045
+ name = "sha2"
4046
+ version = "0.10.9"
4047
+ source = "registry+https://github.com/rust-lang/crates.io-index"
4048
+ checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283"
4049
+ dependencies = [
4050
+ "cfg-if",
4051
+ "cpufeatures 0.2.17",
4052
+ "digest 0.10.7",
4053
+ ]
4054
+
4009
4055
  [[package]]
4010
4056
  name = "sha2"
4011
4057
  version = "0.11.0"
@@ -4013,8 +4059,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
4013
4059
  checksum = "446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4"
4014
4060
  dependencies = [
4015
4061
  "cfg-if",
4016
- "cpufeatures",
4017
- "digest",
4062
+ "cpufeatures 0.3.0",
4063
+ "digest 0.11.3",
4018
4064
  ]
4019
4065
 
4020
4066
  [[package]]
@@ -4144,19 +4190,6 @@ version = "1.15.2"
4144
4190
  source = "registry+https://github.com/rust-lang/crates.io-index"
4145
4191
  checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90"
4146
4192
 
4147
- [[package]]
4148
- name = "smartcore"
4149
- version = "0.3.2"
4150
- source = "registry+https://github.com/rust-lang/crates.io-index"
4151
- checksum = "c42ca1fcd851ada8834d3dfcd088850dc8c703bde50c2baccd89181b74dc3ade"
4152
- dependencies = [
4153
- "approx 0.5.1",
4154
- "cfg-if",
4155
- "num",
4156
- "num-traits",
4157
- "rand 0.8.7",
4158
- ]
4159
-
4160
4193
  [[package]]
4161
4194
  name = "smartcore"
4162
4195
  version = "0.5.5"
@@ -4401,9 +4434,9 @@ dependencies = [
4401
4434
 
4402
4435
  [[package]]
4403
4436
  name = "syn"
4404
- version = "3.0.3"
4437
+ version = "3.0.4"
4405
4438
  source = "registry+https://github.com/rust-lang/crates.io-index"
4406
- checksum = "53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3"
4439
+ checksum = "e6275cddf4610d1775e6d1fe9469b2e77d0f39fd98fb7450901b821e0c53649f"
4407
4440
  dependencies = [
4408
4441
  "proc-macro2",
4409
4442
  "quote",
@@ -4511,7 +4544,7 @@ checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af"
4511
4544
  dependencies = [
4512
4545
  "proc-macro2",
4513
4546
  "quote",
4514
- "syn 3.0.3",
4547
+ "syn 3.0.4",
4515
4548
  ]
4516
4549
 
4517
4550
  [[package]]
@@ -4581,7 +4614,7 @@ checksum = "78773a2a397f451582ce068015985c33193cf6dea8b74d2a639fe457b2f07b0e"
4581
4614
  dependencies = [
4582
4615
  "proc-macro2",
4583
4616
  "quote",
4584
- "syn 3.0.3",
4617
+ "syn 3.0.4",
4585
4618
  ]
4586
4619
 
4587
4620
  [[package]]
@@ -4975,7 +5008,7 @@ checksum = "f153acc4e99a5f2a5aefa09fb078be54e26271b2813f6041200b224c098d8328"
4975
5008
  dependencies = [
4976
5009
  "proc-macro2",
4977
5010
  "quote",
4978
- "syn 3.0.3",
5011
+ "syn 3.0.4",
4979
5012
  ]
4980
5013
 
4981
5014
  [[package]]
@@ -5008,12 +5041,6 @@ version = "1.13.3"
5008
5041
  source = "registry+https://github.com/rust-lang/crates.io-index"
5009
5042
  checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8"
5010
5043
 
5011
- [[package]]
5012
- name = "unindent"
5013
- version = "0.2.4"
5014
- source = "registry+https://github.com/rust-lang/crates.io-index"
5015
- checksum = "7264e107f553ccae879d21fbea1d6724ac785e8c3bfc762137959b5802826ef3"
5016
-
5017
5044
  [[package]]
5018
5045
  name = "untrusted"
5019
5046
  version = "0.9.0"
@@ -5046,9 +5073,9 @@ checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
5046
5073
 
5047
5074
  [[package]]
5048
5075
  name = "uuid"
5049
- version = "1.24.1"
5076
+ version = "1.25.0"
5050
5077
  source = "registry+https://github.com/rust-lang/crates.io-index"
5051
- checksum = "2cefc03fd367c0c6d4305de1b312cf00248c4114f4a0418ce6a6af769e3b0bd9"
5078
+ checksum = "f053576934f05a761a402421fbbe3d425d9366f75f978806a037b3ca481abecc"
5052
5079
  dependencies = [
5053
5080
  "getrandom 0.4.3",
5054
5081
  "js-sys",
@@ -5561,7 +5588,7 @@ checksum = "34df6fc39dbd26ddc9c10e6a2984476e13acce22e64e4487636ef494369225da"
5561
5588
  dependencies = [
5562
5589
  "proc-macro2",
5563
5590
  "quote",
5564
- "syn 3.0.3",
5591
+ "syn 3.0.4",
5565
5592
  ]
5566
5593
 
5567
5594
  [[package]]
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "millwright"
3
- version = "0.2.1"
3
+ version = "2.2.0"
4
4
  edition = "2021"
5
5
  rust-version = "1.95"
6
6
  description = "A unified ML framework for Rust — proven Rust crates, assembled into one machine."
@@ -38,7 +38,7 @@ crate-type = ["cdylib", "rlib"]
38
38
  # --- engines: exact pins ---
39
39
  smartcore = { version = "=0.6.10", optional = true }
40
40
  imbalance-rs = { version = "=0.5.0", optional = true }
41
- model-selection-rs = { version = "=0.1.0", optional = true, features = ["smartcore-metrics"] }
41
+ model-selection-rs = { version = "=0.1.0", optional = true }
42
42
  linfa = { version = "=0.8.1", optional = true }
43
43
  linfa-clustering = { version = "=0.8.1", optional = true }
44
44
  linfa-reduction = { version = "=0.8.1", optional = true }
@@ -54,7 +54,7 @@ incremental-rs = { version = "=0.1.2", optional = true }
54
54
  polars = { version = "=0.55.2", default-features = false, features = ["csv", "parquet", "dtype-categorical", "dtype-datetime", "temporal", "is_in"], optional = true }
55
55
 
56
56
  # --- general infrastructure: caret ranges, reproduced via Cargo.lock ---
57
- pyo3 = { version = "0.24", features = ["extension-module", "abi3-py39"], optional = true }
57
+ pyo3 = { version = "0.29", features = ["extension-module", "abi3-py39"], optional = true }
58
58
  ndarray = { version = "0.16", optional = true }
59
59
  rayon = { version = "1", optional = true }
60
60
  # Decode a saved ONNX file back into the proto, to natively evaluate ONNX-ML ops
@@ -64,9 +64,11 @@ prost = { version = "0.13", optional = true }
64
64
  plotters = { version = "0.3.7", default-features = false, features = ["svg_backend", "all_series"], optional = true }
65
65
  tract-onnx = { version = "0.23", optional = true }
66
66
  axum = { version = "0.8", optional = true }
67
- tokio = { version = "1", features = ["rt-multi-thread", "macros", "net"], optional = true }
67
+ tokio = { version = "1", features = ["rt-multi-thread", "macros", "net", "sync", "time"], optional = true }
68
68
  serde = { version = "1", features = ["derive"], optional = true }
69
69
  serde_json = { version = "1", optional = true }
70
+ sha2 = { version = "0.10", optional = true }
71
+ fs2 = { version = "0.4", optional = true }
70
72
  # chronos-ts and incremental-rs pin ndarray 0.15, distinct from the 0.16 the
71
73
  # rest of the stack uses — the "two ndarray worlds" the design settles. Renamed
72
74
  # so both versions coexist; converted only at these adapters' edges.
@@ -164,7 +166,7 @@ python = ["dep:pyo3", "smartcore-backend", "model-selection", "explain", "onnx",
164
166
  # Phase 5 · OPERATIONS — past where scikit-learn stops.
165
167
  # A versioned model registry: content-addressed ONNX artifact + metadata +
166
168
  # reference distribution, with movable tags and rollback.
167
- registry = ["dep:serde", "dep:serde_json", "onnx"]
169
+ registry = ["dep:serde", "dep:serde_json", "dep:sha2", "dep:fs2", "onnx"]
168
170
 
169
171
  # PSI prediction-drift monitoring via driftwatch.
170
172
  monitor = ["dep:driftwatch"]
@@ -1,6 +1,6 @@
1
1
  # The Millwright Guide
2
2
 
3
- *A unified ML framework for Rust — ten crates, one lifecycle.*
3
+ *A unified ML framework for Rust — fit. predict. serve. watch.*
4
4
 
5
5
  The full hands-on tutorial now lives as a browsable, multi-page site:
6
6