solverforge 0.6.1__tar.gz → 0.6.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {solverforge-0.6.1 → solverforge-0.6.3}/Cargo.lock +13 -85
- {solverforge-0.6.1 → solverforge-0.6.3}/Cargo.toml +8 -8
- {solverforge-0.6.1 → solverforge-0.6.3}/PKG-INFO +21 -14
- {solverforge-0.6.1 → solverforge-0.6.3}/README.md +20 -13
- {solverforge-0.6.1 → solverforge-0.6.3}/pyproject.toml +1 -1
- {solverforge-0.6.1 → solverforge-0.6.3}/python/solverforge/__init__.py +1 -1
- {solverforge-0.6.1 → solverforge-0.6.3}/LICENSE +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/python/solverforge/_native.pyi +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/python/solverforge/config.py +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/python/solverforge/console.py +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/python/solverforge/constraints.py +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/python/solverforge/decorators.py +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/python/solverforge/errors.py +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/python/solverforge/events.py +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/python/solverforge/fields.py +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/python/solverforge/groups.py +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/python/solverforge/joiner.py +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/python/solverforge/manager.py +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/python/solverforge/model.py +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/python/solverforge/py.typed +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/python/solverforge/score.py +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/python/solverforge/solver.py +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/python/solverforge/typing.py +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/python/solverforge/ui.py +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/rust-toolchain.toml +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/bindings.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/callbacks/call.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/callbacks/mod.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/callbacks/registry.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/callbacks/threading.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/config.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/constraints/compiled.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/constraints/evaluate.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/constraints/incremental.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/constraints/list_precedence.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/constraints/matches.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/constraints/mod.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/constraints/state.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/constraints/stream_plan.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/descriptor/extractor.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/descriptor/mod.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/descriptor/variable.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/error.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/intern.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/lib.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/manager/candidate_trace.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/manager/events.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/manager/jobs.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/manager/mod.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/manager/provenance.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/proxy/entity.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/proxy/list.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/proxy/mod.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/proxy/solution.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/runtime/candidate_metric.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/runtime/dynamic_assignment_group.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/runtime/dynamic_provider.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/runtime/list_slots.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/runtime/mod.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/runtime/scalar_slots.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/schema/build.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/schema/compiled.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/schema/mod.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/schema/parse.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/schema/python.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/schema/runtime_plan.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/schema/types.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/schema/validate.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/score.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/solver/api.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/solver/console.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/solver/mod.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/solver/progress.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/solver/result.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/solver/solvable.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/state/callback_view.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/state/clone.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/state/entity_table.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/state/marshal.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/state/mod.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/state/solution.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/state/variables.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/ui.rs +0 -0
- {solverforge-0.6.1 → solverforge-0.6.3}/src/value.rs +0 -0
|
@@ -29,12 +29,6 @@ version = "2.13.0"
|
|
|
29
29
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
30
30
|
checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8"
|
|
31
31
|
|
|
32
|
-
[[package]]
|
|
33
|
-
name = "bytes"
|
|
34
|
-
version = "1.12.0"
|
|
35
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
36
|
-
checksum = "8ae3f5d315924270530207e2a68396c3cc547f6dca3fbdca317cfb1a51edb593"
|
|
37
|
-
|
|
38
32
|
[[package]]
|
|
39
33
|
name = "cfg-if"
|
|
40
34
|
version = "1.0.4"
|
|
@@ -104,16 +98,6 @@ version = "1.0.2"
|
|
|
104
98
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
105
99
|
checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
|
|
106
100
|
|
|
107
|
-
[[package]]
|
|
108
|
-
name = "errno"
|
|
109
|
-
version = "0.3.14"
|
|
110
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
111
|
-
checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
|
|
112
|
-
dependencies = [
|
|
113
|
-
"libc",
|
|
114
|
-
"windows-sys",
|
|
115
|
-
]
|
|
116
|
-
|
|
117
101
|
[[package]]
|
|
118
102
|
name = "getrandom"
|
|
119
103
|
version = "0.4.3"
|
|
@@ -233,17 +217,6 @@ dependencies = [
|
|
|
233
217
|
"autocfg",
|
|
234
218
|
]
|
|
235
219
|
|
|
236
|
-
[[package]]
|
|
237
|
-
name = "mio"
|
|
238
|
-
version = "1.2.1"
|
|
239
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
240
|
-
checksum = "02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda"
|
|
241
|
-
dependencies = [
|
|
242
|
-
"libc",
|
|
243
|
-
"wasi",
|
|
244
|
-
"windows-sys",
|
|
245
|
-
]
|
|
246
|
-
|
|
247
220
|
[[package]]
|
|
248
221
|
name = "nu-ansi-term"
|
|
249
222
|
version = "0.50.3"
|
|
@@ -579,37 +552,17 @@ dependencies = [
|
|
|
579
552
|
"lazy_static",
|
|
580
553
|
]
|
|
581
554
|
|
|
582
|
-
[[package]]
|
|
583
|
-
name = "signal-hook-registry"
|
|
584
|
-
version = "1.4.8"
|
|
585
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
586
|
-
checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b"
|
|
587
|
-
dependencies = [
|
|
588
|
-
"errno",
|
|
589
|
-
"libc",
|
|
590
|
-
]
|
|
591
|
-
|
|
592
555
|
[[package]]
|
|
593
556
|
name = "smallvec"
|
|
594
557
|
version = "1.15.2"
|
|
595
558
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
596
559
|
checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90"
|
|
597
560
|
|
|
598
|
-
[[package]]
|
|
599
|
-
name = "socket2"
|
|
600
|
-
version = "0.6.4"
|
|
601
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
602
|
-
checksum = "52d1cfed4120b4d927bf7c0f86d2087a4a7d6027c906d9f9d525a80573b9be51"
|
|
603
|
-
dependencies = [
|
|
604
|
-
"libc",
|
|
605
|
-
"windows-sys",
|
|
606
|
-
]
|
|
607
|
-
|
|
608
561
|
[[package]]
|
|
609
562
|
name = "solverforge-bridge"
|
|
610
|
-
version = "0.
|
|
563
|
+
version = "0.19.1"
|
|
611
564
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
612
|
-
checksum = "
|
|
565
|
+
checksum = "6bc1bbd14aa7b23a845359b408747b6b783ed31529f1b2cfa12512d425e305f5"
|
|
613
566
|
dependencies = [
|
|
614
567
|
"solverforge-config",
|
|
615
568
|
"solverforge-core",
|
|
@@ -619,9 +572,9 @@ dependencies = [
|
|
|
619
572
|
|
|
620
573
|
[[package]]
|
|
621
574
|
name = "solverforge-config"
|
|
622
|
-
version = "0.
|
|
575
|
+
version = "0.19.1"
|
|
623
576
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
624
|
-
checksum = "
|
|
577
|
+
checksum = "3251fc0471e05f2c05f9148f648618aa8d021fa4dff9af626ac7f05843f114f8"
|
|
625
578
|
dependencies = [
|
|
626
579
|
"serde",
|
|
627
580
|
"serde_yaml",
|
|
@@ -632,9 +585,9 @@ dependencies = [
|
|
|
632
585
|
|
|
633
586
|
[[package]]
|
|
634
587
|
name = "solverforge-console"
|
|
635
|
-
version = "0.
|
|
588
|
+
version = "0.19.1"
|
|
636
589
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
637
|
-
checksum = "
|
|
590
|
+
checksum = "42794d46f6685a00e9387a67b0037d49321f7e34796cd5a97b8fd99a72e20377"
|
|
638
591
|
dependencies = [
|
|
639
592
|
"num-format",
|
|
640
593
|
"owo-colors",
|
|
@@ -644,18 +597,18 @@ dependencies = [
|
|
|
644
597
|
|
|
645
598
|
[[package]]
|
|
646
599
|
name = "solverforge-core"
|
|
647
|
-
version = "0.
|
|
600
|
+
version = "0.19.1"
|
|
648
601
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
649
|
-
checksum = "
|
|
602
|
+
checksum = "32858c2be2505640f60a0bcee902a29e7b9dd136aec49928601ca8764920cb79"
|
|
650
603
|
dependencies = [
|
|
651
604
|
"thiserror",
|
|
652
605
|
]
|
|
653
606
|
|
|
654
607
|
[[package]]
|
|
655
608
|
name = "solverforge-scoring"
|
|
656
|
-
version = "0.
|
|
609
|
+
version = "0.19.1"
|
|
657
610
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
658
|
-
checksum = "
|
|
611
|
+
checksum = "50bd20153f578099fe768873f8d5c07f8e4a56e79bb3da4611776ca5f65941e4"
|
|
659
612
|
dependencies = [
|
|
660
613
|
"solverforge-core",
|
|
661
614
|
"thiserror",
|
|
@@ -663,9 +616,9 @@ dependencies = [
|
|
|
663
616
|
|
|
664
617
|
[[package]]
|
|
665
618
|
name = "solverforge-solver"
|
|
666
|
-
version = "0.
|
|
619
|
+
version = "0.19.1"
|
|
667
620
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
668
|
-
checksum = "
|
|
621
|
+
checksum = "ae2870ba2c94f03150870d84224fc009936071f9e9313161979473735e059988"
|
|
669
622
|
dependencies = [
|
|
670
623
|
"rand",
|
|
671
624
|
"rand_chacha",
|
|
@@ -691,7 +644,7 @@ dependencies = [
|
|
|
691
644
|
|
|
692
645
|
[[package]]
|
|
693
646
|
name = "solverforge_py"
|
|
694
|
-
version = "0.6.
|
|
647
|
+
version = "0.6.3"
|
|
695
648
|
dependencies = [
|
|
696
649
|
"indexmap",
|
|
697
650
|
"once_cell",
|
|
@@ -767,26 +720,7 @@ version = "1.52.3"
|
|
|
767
720
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
768
721
|
checksum = "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe"
|
|
769
722
|
dependencies = [
|
|
770
|
-
"bytes",
|
|
771
|
-
"libc",
|
|
772
|
-
"mio",
|
|
773
|
-
"parking_lot",
|
|
774
723
|
"pin-project-lite",
|
|
775
|
-
"signal-hook-registry",
|
|
776
|
-
"socket2",
|
|
777
|
-
"tokio-macros",
|
|
778
|
-
"windows-sys",
|
|
779
|
-
]
|
|
780
|
-
|
|
781
|
-
[[package]]
|
|
782
|
-
name = "tokio-macros"
|
|
783
|
-
version = "2.7.0"
|
|
784
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
785
|
-
checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496"
|
|
786
|
-
dependencies = [
|
|
787
|
-
"proc-macro2",
|
|
788
|
-
"quote",
|
|
789
|
-
"syn",
|
|
790
724
|
]
|
|
791
725
|
|
|
792
726
|
[[package]]
|
|
@@ -937,12 +871,6 @@ version = "0.1.1"
|
|
|
937
871
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
938
872
|
checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65"
|
|
939
873
|
|
|
940
|
-
[[package]]
|
|
941
|
-
name = "wasi"
|
|
942
|
-
version = "0.11.1+wasi-snapshot-preview1"
|
|
943
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
944
|
-
checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
|
|
945
|
-
|
|
946
874
|
[[package]]
|
|
947
875
|
name = "windows-link"
|
|
948
876
|
version = "0.2.1"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[package]
|
|
2
2
|
name = "solverforge_py"
|
|
3
|
-
version = "0.6.
|
|
3
|
+
version = "0.6.3"
|
|
4
4
|
edition = "2021"
|
|
5
5
|
license = "Apache-2.0"
|
|
6
6
|
rust-version = "1.95"
|
|
@@ -26,7 +26,7 @@ name = "solverforge_py"
|
|
|
26
26
|
crate-type = ["cdylib", "rlib"]
|
|
27
27
|
|
|
28
28
|
[package.metadata.solverforge]
|
|
29
|
-
version = "0.
|
|
29
|
+
version = "0.19.1"
|
|
30
30
|
|
|
31
31
|
[dependencies]
|
|
32
32
|
indexmap = "2.12.1"
|
|
@@ -42,12 +42,12 @@ toml = "0.9.8"
|
|
|
42
42
|
tracing = "0.1.44"
|
|
43
43
|
tracing-subscriber = { version = "0.3.23", features = ["env-filter"] }
|
|
44
44
|
|
|
45
|
-
solverforge-config = { version = "=0.
|
|
46
|
-
solverforge-bridge = { version = "=0.
|
|
47
|
-
solverforge-console = { version = "=0.
|
|
48
|
-
solverforge-core = { version = "=0.
|
|
49
|
-
solverforge-scoring = { version = "=0.
|
|
50
|
-
solverforge-solver = { version = "=0.
|
|
45
|
+
solverforge-config = { version = "=0.19.1" }
|
|
46
|
+
solverforge-bridge = { version = "=0.19.1" }
|
|
47
|
+
solverforge-console = { version = "=0.19.1", features = ["verbose-logging"] }
|
|
48
|
+
solverforge-core = { version = "=0.19.1" }
|
|
49
|
+
solverforge-scoring = { version = "=0.19.1" }
|
|
50
|
+
solverforge-solver = { version = "=0.19.1" }
|
|
51
51
|
solverforge-ui = { version = "=0.7.0", default-features = false }
|
|
52
52
|
|
|
53
53
|
[dev-dependencies]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: solverforge
|
|
3
|
-
Version: 0.6.
|
|
3
|
+
Version: 0.6.3
|
|
4
4
|
Classifier: Development Status :: 3 - Alpha
|
|
5
5
|
Classifier: Intended Audience :: Developers
|
|
6
6
|
Classifier: Intended Audience :: Science/Research
|
|
@@ -39,10 +39,10 @@ The native extension owns the working solution state in Rust so SolverForge can
|
|
|
39
39
|
clone, mutate, and snapshot solutions safely. Python callbacks are the single
|
|
40
40
|
constraint authoring surface.
|
|
41
41
|
|
|
42
|
-
The package targets CPython 3.14 and Rust 1.95.0. This checkout
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
42
|
+
The package targets CPython 3.14 and Rust 1.95.0. This checkout targets the
|
|
43
|
+
SolverForge Rust crates `0.19.1` and pins `solverforge-ui` to `0.7.0` through
|
|
44
|
+
exact crates.io versions in `Cargo.toml` and registry checksums in `Cargo.lock`.
|
|
45
|
+
There is no local path or Git dependency override. The `solverforge`
|
|
46
46
|
`0.6.x` line is the current dynamic binding architecture and intentionally
|
|
47
47
|
supersedes the older incompatible `0.2.x` and `0.3.0` artifacts in the same PyPI
|
|
48
48
|
namespace. Those older artifacts exposed `SolverFactory`, `PlanningVariable`,
|
|
@@ -50,11 +50,12 @@ Java service requirements, and other APIs that are not part of this package.
|
|
|
50
50
|
|
|
51
51
|
## Installation
|
|
52
52
|
|
|
53
|
-
|
|
54
|
-
locked SolverForge Rust `0.
|
|
53
|
+
The package version prepared by this checkout is `solverforge` `0.6.3`, targeting
|
|
54
|
+
the published and locked SolverForge Rust `0.19.1` registry dependency base.
|
|
55
|
+
Install the matching package after its Python release with:
|
|
55
56
|
|
|
56
57
|
```sh
|
|
57
|
-
python3.14 -m pip install "solverforge==0.6.
|
|
58
|
+
python3.14 -m pip install "solverforge==0.6.3"
|
|
58
59
|
```
|
|
59
60
|
|
|
60
61
|
The installable wheel contains the core `solverforge` package, native extension,
|
|
@@ -73,13 +74,13 @@ make hospital-run
|
|
|
73
74
|
make deliveries-run PORT=7861
|
|
74
75
|
```
|
|
75
76
|
|
|
76
|
-
|
|
77
|
-
without `PYTHONPATH` or an editable checkout:
|
|
77
|
+
After publication, the same source-checkout examples can be run against the
|
|
78
|
+
installed package without `PYTHONPATH` or an editable checkout:
|
|
78
79
|
|
|
79
80
|
```sh
|
|
80
81
|
python3.14 -m venv .venv-examples
|
|
81
82
|
. .venv-examples/bin/activate
|
|
82
|
-
python -m pip install "solverforge[examples]==0.6.
|
|
83
|
+
python -m pip install "solverforge[examples]==0.6.3"
|
|
83
84
|
python examples/nqueens.py
|
|
84
85
|
python -m examples.solverforge_hospital
|
|
85
86
|
python -m examples.solverforge_deliveries
|
|
@@ -186,9 +187,13 @@ Run `make help` for focused targets such as `make test-hospital`,
|
|
|
186
187
|
`list_cheapest_insertion`, `list_regret_insertion`, `list_clarke_wright`, and
|
|
187
188
|
`list_k_opt`, with the final two requiring their respective savings and route
|
|
188
189
|
metadata bundles. These are core graph nodes over the immutable runtime
|
|
189
|
-
model.
|
|
190
|
-
|
|
191
|
-
|
|
190
|
+
model. All configured limits remain binding during construction. A solve
|
|
191
|
+
publishes a best or completed solution only after every list element,
|
|
192
|
+
required assignment row, and non-optional scalar variable is assigned; if a
|
|
193
|
+
limit is reached first, a direct solve raises and a retained job enters
|
|
194
|
+
`FAILED` without exposing a partial snapshot. Omitted construction still
|
|
195
|
+
resolves required and optional stages in core, but required work never
|
|
196
|
+
bypasses a configured limit. Default local search is assembled only when the top-level
|
|
192
197
|
termination has an effective finite limit, so an empty or invalid termination
|
|
193
198
|
cannot accidentally create an unbounded solve. There is no wrapper assignment
|
|
194
199
|
placer, required stream, phase tree, TLS slot state, synthetic metric, or
|
|
@@ -196,6 +201,8 @@ Run `make help` for focused targets such as `make test-hospital`,
|
|
|
196
201
|
- `SolverManager` is backed by upstream retained jobs, statuses, events, and
|
|
197
202
|
snapshots. `SolverManager.solve(...)` returns `JobHandle(job_id=...)`; the
|
|
198
203
|
manager supports pause, resume, cancel, delete, and exact snapshot reads.
|
|
204
|
+
A pause before mandatory construction completes remains resumable internal
|
|
205
|
+
state and does not expose an incomplete solution snapshot.
|
|
199
206
|
Retained event payloads read current score from the attached solution snapshot
|
|
200
207
|
when present. Long-running phases publish progress at the shared upstream
|
|
201
208
|
cadence, and telemetry includes the current phase type, index, counters, and
|
|
@@ -8,10 +8,10 @@ The native extension owns the working solution state in Rust so SolverForge can
|
|
|
8
8
|
clone, mutate, and snapshot solutions safely. Python callbacks are the single
|
|
9
9
|
constraint authoring surface.
|
|
10
10
|
|
|
11
|
-
The package targets CPython 3.14 and Rust 1.95.0. This checkout
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
The package targets CPython 3.14 and Rust 1.95.0. This checkout targets the
|
|
12
|
+
SolverForge Rust crates `0.19.1` and pins `solverforge-ui` to `0.7.0` through
|
|
13
|
+
exact crates.io versions in `Cargo.toml` and registry checksums in `Cargo.lock`.
|
|
14
|
+
There is no local path or Git dependency override. The `solverforge`
|
|
15
15
|
`0.6.x` line is the current dynamic binding architecture and intentionally
|
|
16
16
|
supersedes the older incompatible `0.2.x` and `0.3.0` artifacts in the same PyPI
|
|
17
17
|
namespace. Those older artifacts exposed `SolverFactory`, `PlanningVariable`,
|
|
@@ -19,11 +19,12 @@ Java service requirements, and other APIs that are not part of this package.
|
|
|
19
19
|
|
|
20
20
|
## Installation
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
locked SolverForge Rust `0.
|
|
22
|
+
The package version prepared by this checkout is `solverforge` `0.6.3`, targeting
|
|
23
|
+
the published and locked SolverForge Rust `0.19.1` registry dependency base.
|
|
24
|
+
Install the matching package after its Python release with:
|
|
24
25
|
|
|
25
26
|
```sh
|
|
26
|
-
python3.14 -m pip install "solverforge==0.6.
|
|
27
|
+
python3.14 -m pip install "solverforge==0.6.3"
|
|
27
28
|
```
|
|
28
29
|
|
|
29
30
|
The installable wheel contains the core `solverforge` package, native extension,
|
|
@@ -42,13 +43,13 @@ make hospital-run
|
|
|
42
43
|
make deliveries-run PORT=7861
|
|
43
44
|
```
|
|
44
45
|
|
|
45
|
-
|
|
46
|
-
without `PYTHONPATH` or an editable checkout:
|
|
46
|
+
After publication, the same source-checkout examples can be run against the
|
|
47
|
+
installed package without `PYTHONPATH` or an editable checkout:
|
|
47
48
|
|
|
48
49
|
```sh
|
|
49
50
|
python3.14 -m venv .venv-examples
|
|
50
51
|
. .venv-examples/bin/activate
|
|
51
|
-
python -m pip install "solverforge[examples]==0.6.
|
|
52
|
+
python -m pip install "solverforge[examples]==0.6.3"
|
|
52
53
|
python examples/nqueens.py
|
|
53
54
|
python -m examples.solverforge_hospital
|
|
54
55
|
python -m examples.solverforge_deliveries
|
|
@@ -155,9 +156,13 @@ Run `make help` for focused targets such as `make test-hospital`,
|
|
|
155
156
|
`list_cheapest_insertion`, `list_regret_insertion`, `list_clarke_wright`, and
|
|
156
157
|
`list_k_opt`, with the final two requiring their respective savings and route
|
|
157
158
|
metadata bundles. These are core graph nodes over the immutable runtime
|
|
158
|
-
model.
|
|
159
|
-
|
|
160
|
-
|
|
159
|
+
model. All configured limits remain binding during construction. A solve
|
|
160
|
+
publishes a best or completed solution only after every list element,
|
|
161
|
+
required assignment row, and non-optional scalar variable is assigned; if a
|
|
162
|
+
limit is reached first, a direct solve raises and a retained job enters
|
|
163
|
+
`FAILED` without exposing a partial snapshot. Omitted construction still
|
|
164
|
+
resolves required and optional stages in core, but required work never
|
|
165
|
+
bypasses a configured limit. Default local search is assembled only when the top-level
|
|
161
166
|
termination has an effective finite limit, so an empty or invalid termination
|
|
162
167
|
cannot accidentally create an unbounded solve. There is no wrapper assignment
|
|
163
168
|
placer, required stream, phase tree, TLS slot state, synthetic metric, or
|
|
@@ -165,6 +170,8 @@ Run `make help` for focused targets such as `make test-hospital`,
|
|
|
165
170
|
- `SolverManager` is backed by upstream retained jobs, statuses, events, and
|
|
166
171
|
snapshots. `SolverManager.solve(...)` returns `JobHandle(job_id=...)`; the
|
|
167
172
|
manager supports pause, resume, cancel, delete, and exact snapshot reads.
|
|
173
|
+
A pause before mandatory construction completes remains resumable internal
|
|
174
|
+
state and does not expose an incomplete solution snapshot.
|
|
168
175
|
Retained event payloads read current score from the attached solution snapshot
|
|
169
176
|
when present. Long-running phases publish progress at the shared upstream
|
|
170
177
|
cadence, and telemetry includes the current phase type, index, counters, and
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|