solverforge 0.6.6__tar.gz → 0.6.7__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.6 → solverforge-0.6.7}/Cargo.lock +15 -15
- {solverforge-0.6.6 → solverforge-0.6.7}/Cargo.toml +9 -9
- {solverforge-0.6.6 → solverforge-0.6.7}/PKG-INFO +18 -15
- {solverforge-0.6.6 → solverforge-0.6.7}/README.md +17 -14
- {solverforge-0.6.6 → solverforge-0.6.7}/pyproject.toml +1 -1
- {solverforge-0.6.6 → solverforge-0.6.7}/python/solverforge/__init__.py +1 -1
- {solverforge-0.6.6 → solverforge-0.6.7}/python/solverforge/decorators.py +0 -1
- {solverforge-0.6.6 → solverforge-0.6.7}/python/solverforge/fields.py +10 -2
- {solverforge-0.6.6 → solverforge-0.6.7}/LICENSE +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/python/solverforge/_native.pyi +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/python/solverforge/config.py +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/python/solverforge/console.py +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/python/solverforge/constraints.py +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/python/solverforge/errors.py +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/python/solverforge/events.py +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/python/solverforge/groups.py +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/python/solverforge/joiner.py +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/python/solverforge/manager.py +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/python/solverforge/model.py +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/python/solverforge/py.typed +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/python/solverforge/score.py +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/python/solverforge/solver.py +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/python/solverforge/typing.py +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/python/solverforge/ui.py +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/rust-toolchain.toml +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/bindings.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/callbacks/call.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/callbacks/mod.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/callbacks/registry.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/callbacks/threading.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/config.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/constraints/compiled.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/constraints/evaluate.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/constraints/incremental.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/constraints/list_precedence.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/constraints/matches.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/constraints/mod.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/constraints/state.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/constraints/stream_plan.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/descriptor/extractor.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/descriptor/mod.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/descriptor/variable.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/error.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/intern.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/lib.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/manager/candidate_trace.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/manager/events.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/manager/jobs.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/manager/mod.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/manager/provenance.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/proxy/entity.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/proxy/list.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/proxy/mod.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/proxy/solution.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/runtime/candidate_metric.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/runtime/dynamic_assignment_group.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/runtime/dynamic_provider.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/runtime/list_slots.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/runtime/mod.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/runtime/scalar_slots.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/schema/build.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/schema/compiled.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/schema/mod.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/schema/parse.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/schema/python.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/schema/runtime_plan.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/schema/types.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/schema/validate.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/score.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/solver/api.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/solver/console.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/solver/mod.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/solver/progress.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/solver/result.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/solver/solvable.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/state/callback_view.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/state/clone.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/state/entity_table.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/state/marshal.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/state/mod.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/state/solution.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/state/variables.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/ui.rs +0 -0
- {solverforge-0.6.6 → solverforge-0.6.7}/src/value.rs +0 -0
|
@@ -560,9 +560,9 @@ checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90"
|
|
|
560
560
|
|
|
561
561
|
[[package]]
|
|
562
562
|
name = "solverforge-bridge"
|
|
563
|
-
version = "0.19.
|
|
563
|
+
version = "0.19.7"
|
|
564
564
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
565
|
-
checksum = "
|
|
565
|
+
checksum = "6257a13961202890dad23729ccceae45afd14c156e046c60b74e739bf0a26f36"
|
|
566
566
|
dependencies = [
|
|
567
567
|
"solverforge-config",
|
|
568
568
|
"solverforge-core",
|
|
@@ -572,9 +572,9 @@ dependencies = [
|
|
|
572
572
|
|
|
573
573
|
[[package]]
|
|
574
574
|
name = "solverforge-config"
|
|
575
|
-
version = "0.19.
|
|
575
|
+
version = "0.19.7"
|
|
576
576
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
577
|
-
checksum = "
|
|
577
|
+
checksum = "0801115100979d1c4558918277d6a2f2992f843f90f67b9fc0cf78699a5bde06"
|
|
578
578
|
dependencies = [
|
|
579
579
|
"serde",
|
|
580
580
|
"serde_yaml",
|
|
@@ -585,9 +585,9 @@ dependencies = [
|
|
|
585
585
|
|
|
586
586
|
[[package]]
|
|
587
587
|
name = "solverforge-console"
|
|
588
|
-
version = "0.19.
|
|
588
|
+
version = "0.19.7"
|
|
589
589
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
590
|
-
checksum = "
|
|
590
|
+
checksum = "2728833bbaf987be4058e60d77a013408b8c577570a552adecddd0461ac56f40"
|
|
591
591
|
dependencies = [
|
|
592
592
|
"num-format",
|
|
593
593
|
"owo-colors",
|
|
@@ -597,18 +597,18 @@ dependencies = [
|
|
|
597
597
|
|
|
598
598
|
[[package]]
|
|
599
599
|
name = "solverforge-core"
|
|
600
|
-
version = "0.19.
|
|
600
|
+
version = "0.19.7"
|
|
601
601
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
602
|
-
checksum = "
|
|
602
|
+
checksum = "897a977c2b4af1ceb8bb01707bd23783ffa1363d7c70950767718b3daf767e48"
|
|
603
603
|
dependencies = [
|
|
604
604
|
"thiserror",
|
|
605
605
|
]
|
|
606
606
|
|
|
607
607
|
[[package]]
|
|
608
608
|
name = "solverforge-scoring"
|
|
609
|
-
version = "0.19.
|
|
609
|
+
version = "0.19.7"
|
|
610
610
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
611
|
-
checksum = "
|
|
611
|
+
checksum = "18f932ada3a948f09e3234197dc4696626264c73e89f2cf520fe3e87ad61f445"
|
|
612
612
|
dependencies = [
|
|
613
613
|
"solverforge-core",
|
|
614
614
|
"thiserror",
|
|
@@ -616,9 +616,9 @@ dependencies = [
|
|
|
616
616
|
|
|
617
617
|
[[package]]
|
|
618
618
|
name = "solverforge-solver"
|
|
619
|
-
version = "0.19.
|
|
619
|
+
version = "0.19.7"
|
|
620
620
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
621
|
-
checksum = "
|
|
621
|
+
checksum = "e2f21595deb21733528ffbb95c076dceee638aa93bafad812676aa53ca7af4b1"
|
|
622
622
|
dependencies = [
|
|
623
623
|
"rand",
|
|
624
624
|
"rand_chacha",
|
|
@@ -635,16 +635,16 @@ dependencies = [
|
|
|
635
635
|
|
|
636
636
|
[[package]]
|
|
637
637
|
name = "solverforge-ui"
|
|
638
|
-
version = "0.
|
|
638
|
+
version = "0.9.0"
|
|
639
639
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
640
|
-
checksum = "
|
|
640
|
+
checksum = "87dc89ca92af46ff7c55eb29d4072d98b2414047fd84cd8c77458e60468d53f6"
|
|
641
641
|
dependencies = [
|
|
642
642
|
"include_dir",
|
|
643
643
|
]
|
|
644
644
|
|
|
645
645
|
[[package]]
|
|
646
646
|
name = "solverforge_py"
|
|
647
|
-
version = "0.6.
|
|
647
|
+
version = "0.6.7"
|
|
648
648
|
dependencies = [
|
|
649
649
|
"indexmap",
|
|
650
650
|
"once_cell",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[package]
|
|
2
2
|
name = "solverforge_py"
|
|
3
|
-
version = "0.6.
|
|
3
|
+
version = "0.6.7"
|
|
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.19.
|
|
29
|
+
version = "0.19.7"
|
|
30
30
|
|
|
31
31
|
[dependencies]
|
|
32
32
|
indexmap = "2.12.1"
|
|
@@ -42,13 +42,13 @@ 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.19.
|
|
46
|
-
solverforge-bridge = { version = "=0.19.
|
|
47
|
-
solverforge-console = { version = "=0.19.
|
|
48
|
-
solverforge-core = { version = "=0.19.
|
|
49
|
-
solverforge-scoring = { version = "=0.19.
|
|
50
|
-
solverforge-solver = { version = "=0.19.
|
|
51
|
-
solverforge-ui = { version = "=0.
|
|
45
|
+
solverforge-config = { version = "=0.19.7" }
|
|
46
|
+
solverforge-bridge = { version = "=0.19.7" }
|
|
47
|
+
solverforge-console = { version = "=0.19.7", features = ["verbose-logging"] }
|
|
48
|
+
solverforge-core = { version = "=0.19.7" }
|
|
49
|
+
solverforge-scoring = { version = "=0.19.7" }
|
|
50
|
+
solverforge-solver = { version = "=0.19.7" }
|
|
51
|
+
solverforge-ui = { version = "=0.9.0", default-features = false }
|
|
52
52
|
|
|
53
53
|
[dev-dependencies]
|
|
54
54
|
pretty_assertions = "1.4.1"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: solverforge
|
|
3
|
-
Version: 0.6.
|
|
3
|
+
Version: 0.6.7
|
|
4
4
|
Classifier: Development Status :: 3 - Alpha
|
|
5
5
|
Classifier: Intended Audience :: Developers
|
|
6
6
|
Classifier: Intended Audience :: Science/Research
|
|
@@ -40,24 +40,23 @@ clone, mutate, and snapshot solutions safely. Python callbacks are the single
|
|
|
40
40
|
constraint authoring surface.
|
|
41
41
|
|
|
42
42
|
The package targets CPython 3.14 and Rust 1.95.0. This release-preparation
|
|
43
|
-
checkout pins the six published SolverForge Rust dependencies to `0.19.
|
|
44
|
-
`solverforge-ui` to `0.
|
|
43
|
+
checkout pins the six published SolverForge Rust dependencies to `0.19.7` and
|
|
44
|
+
`solverforge-ui` to `0.9.0` through exact crates.io requirements in
|
|
45
45
|
`Cargo.toml` and registry checksums in `Cargo.lock`. There is no local path or
|
|
46
46
|
Git dependency override. The `solverforge` `0.6.x` line is the current dynamic
|
|
47
47
|
binding architecture and intentionally supersedes the older incompatible
|
|
48
|
-
`0.2.x` and `0.3.0` artifacts in the same PyPI namespace.
|
|
49
|
-
exposed `SolverFactory`, `PlanningVariable`, Java service
|
|
50
|
-
other APIs that are not part of this package.
|
|
48
|
+
`0.2.x` and `0.3.0` artifacts in the same PyPI namespace.
|
|
49
|
+
Those older artifacts exposed `SolverFactory`, `PlanningVariable`, Java service
|
|
50
|
+
requirements, and other APIs that are not part of this package.
|
|
51
51
|
|
|
52
52
|
## Installation
|
|
53
53
|
|
|
54
|
-
The package version prepared by this checkout is `solverforge` `0.6.
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
release with:
|
|
54
|
+
The package version prepared by this checkout is `solverforge` `0.6.7`, targeting
|
|
55
|
+
the published and registry-locked SolverForge Rust `0.19.7` dependency base.
|
|
56
|
+
Install the matching package after its Python release with:
|
|
58
57
|
|
|
59
58
|
```sh
|
|
60
|
-
python3.14 -m pip install "solverforge==0.6.
|
|
59
|
+
python3.14 -m pip install "solverforge==0.6.7"
|
|
61
60
|
```
|
|
62
61
|
|
|
63
62
|
The installable wheel contains the core `solverforge` package, native extension,
|
|
@@ -76,13 +75,13 @@ make hospital-run
|
|
|
76
75
|
make deliveries-run PORT=7861
|
|
77
76
|
```
|
|
78
77
|
|
|
79
|
-
The same source-checkout examples can be run against the published
|
|
80
|
-
without `PYTHONPATH` or an editable checkout:
|
|
78
|
+
The same source-checkout examples can be run against the matching published
|
|
79
|
+
package once `0.6.7` is released, without `PYTHONPATH` or an editable checkout:
|
|
81
80
|
|
|
82
81
|
```sh
|
|
83
82
|
python3.14 -m venv .venv-examples
|
|
84
83
|
. .venv-examples/bin/activate
|
|
85
|
-
python -m pip install "solverforge[examples]==0.6.
|
|
84
|
+
python -m pip install "solverforge[examples]==0.6.7"
|
|
86
85
|
python examples/nqueens.py
|
|
87
86
|
python -m examples.solverforge_hospital
|
|
88
87
|
python -m examples.solverforge_deliveries
|
|
@@ -244,7 +243,11 @@ Run `make help` for focused targets such as `make test-hospital`,
|
|
|
244
243
|
per-query Python callbacks. Provider-backed value ranges are imported once per
|
|
245
244
|
variable and shared across rows in Rust-owned state. Row candidate callbacks
|
|
246
245
|
remain row-specific and define move legality throughout construction and local
|
|
247
|
-
search, including assignment-group swaps and rematches.
|
|
246
|
+
search, including assignment-group swaps and rematches. `pinning=True` is
|
|
247
|
+
rejected with `ModelValidationError` rather than ignored: SolverForge pins a
|
|
248
|
+
whole planning entity through an entity-level descriptor predicate, and no
|
|
249
|
+
public bridge seam exposes entity pinning to the Python binding yet. Pin an
|
|
250
|
+
input value by restricting `candidate_values` instead.
|
|
248
251
|
- `scalar_assignment_group(...)` declares assignment-aware scalar groups for
|
|
249
252
|
grouped scalar local search and assignment-group construction. Group metadata
|
|
250
253
|
covers required entities, capacity keys, assignment rules, ordering callbacks,
|
|
@@ -9,24 +9,23 @@ clone, mutate, and snapshot solutions safely. Python callbacks are the single
|
|
|
9
9
|
constraint authoring surface.
|
|
10
10
|
|
|
11
11
|
The package targets CPython 3.14 and Rust 1.95.0. This release-preparation
|
|
12
|
-
checkout pins the six published SolverForge Rust dependencies to `0.19.
|
|
13
|
-
`solverforge-ui` to `0.
|
|
12
|
+
checkout pins the six published SolverForge Rust dependencies to `0.19.7` and
|
|
13
|
+
`solverforge-ui` to `0.9.0` through exact crates.io requirements in
|
|
14
14
|
`Cargo.toml` and registry checksums in `Cargo.lock`. There is no local path or
|
|
15
15
|
Git dependency override. The `solverforge` `0.6.x` line is the current dynamic
|
|
16
16
|
binding architecture and intentionally supersedes the older incompatible
|
|
17
|
-
`0.2.x` and `0.3.0` artifacts in the same PyPI namespace.
|
|
18
|
-
exposed `SolverFactory`, `PlanningVariable`, Java service
|
|
19
|
-
other APIs that are not part of this package.
|
|
17
|
+
`0.2.x` and `0.3.0` artifacts in the same PyPI namespace.
|
|
18
|
+
Those older artifacts exposed `SolverFactory`, `PlanningVariable`, Java service
|
|
19
|
+
requirements, and other APIs that are not part of this package.
|
|
20
20
|
|
|
21
21
|
## Installation
|
|
22
22
|
|
|
23
|
-
The package version prepared by this checkout is `solverforge` `0.6.
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
release with:
|
|
23
|
+
The package version prepared by this checkout is `solverforge` `0.6.7`, targeting
|
|
24
|
+
the published and registry-locked SolverForge Rust `0.19.7` dependency base.
|
|
25
|
+
Install the matching package after its Python release with:
|
|
27
26
|
|
|
28
27
|
```sh
|
|
29
|
-
python3.14 -m pip install "solverforge==0.6.
|
|
28
|
+
python3.14 -m pip install "solverforge==0.6.7"
|
|
30
29
|
```
|
|
31
30
|
|
|
32
31
|
The installable wheel contains the core `solverforge` package, native extension,
|
|
@@ -45,13 +44,13 @@ make hospital-run
|
|
|
45
44
|
make deliveries-run PORT=7861
|
|
46
45
|
```
|
|
47
46
|
|
|
48
|
-
The same source-checkout examples can be run against the published
|
|
49
|
-
without `PYTHONPATH` or an editable checkout:
|
|
47
|
+
The same source-checkout examples can be run against the matching published
|
|
48
|
+
package once `0.6.7` is released, without `PYTHONPATH` or an editable checkout:
|
|
50
49
|
|
|
51
50
|
```sh
|
|
52
51
|
python3.14 -m venv .venv-examples
|
|
53
52
|
. .venv-examples/bin/activate
|
|
54
|
-
python -m pip install "solverforge[examples]==0.6.
|
|
53
|
+
python -m pip install "solverforge[examples]==0.6.7"
|
|
55
54
|
python examples/nqueens.py
|
|
56
55
|
python -m examples.solverforge_hospital
|
|
57
56
|
python -m examples.solverforge_deliveries
|
|
@@ -213,7 +212,11 @@ Run `make help` for focused targets such as `make test-hospital`,
|
|
|
213
212
|
per-query Python callbacks. Provider-backed value ranges are imported once per
|
|
214
213
|
variable and shared across rows in Rust-owned state. Row candidate callbacks
|
|
215
214
|
remain row-specific and define move legality throughout construction and local
|
|
216
|
-
search, including assignment-group swaps and rematches.
|
|
215
|
+
search, including assignment-group swaps and rematches. `pinning=True` is
|
|
216
|
+
rejected with `ModelValidationError` rather than ignored: SolverForge pins a
|
|
217
|
+
whole planning entity through an entity-level descriptor predicate, and no
|
|
218
|
+
public bridge seam exposes entity pinning to the Python binding yet. Pin an
|
|
219
|
+
input value by restricting `candidate_values` instead.
|
|
217
220
|
- `scalar_assignment_group(...)` declares assignment-aware scalar groups for
|
|
218
221
|
grouped scalar local search and assignment-group construction. Group metadata
|
|
219
222
|
covers required entities, capacity keys, assignment rules, ordering callbacks,
|
|
@@ -40,7 +40,6 @@ def _collect_fields(cls: type[object]) -> list[dict[str, object]]:
|
|
|
40
40
|
"nearby_entity_distance_field": value.metadata.nearby_entity_distance_field,
|
|
41
41
|
"allows_unassigned": value.metadata.allows_unassigned,
|
|
42
42
|
"element_collection": value.metadata.element_collection,
|
|
43
|
-
"pinning": value.metadata.pinning,
|
|
44
43
|
"element_owner": value.metadata.element_owner,
|
|
45
44
|
"element_owner_field": value.metadata.element_owner_field,
|
|
46
45
|
"construction_element_order_key": value.metadata.construction_element_order_key,
|
|
@@ -5,6 +5,8 @@ from dataclasses import dataclass
|
|
|
5
5
|
from inspect import Parameter, signature
|
|
6
6
|
from typing import Any, NamedTuple, TypeAlias
|
|
7
7
|
|
|
8
|
+
from .errors import ModelValidationError
|
|
9
|
+
|
|
8
10
|
MetadataSource = Callable[..., object] | str
|
|
9
11
|
|
|
10
12
|
|
|
@@ -143,7 +145,6 @@ class FieldMetadata:
|
|
|
143
145
|
nearby_entity_distance_field: str | None = None
|
|
144
146
|
allows_unassigned: bool = False
|
|
145
147
|
element_collection: str | None = None
|
|
146
|
-
pinning: bool = False
|
|
147
148
|
element_owner: Callable[..., object] | None = None
|
|
148
149
|
element_owner_field: str | None = None
|
|
149
150
|
construction_element_order_key: Callable[..., object] | None = None
|
|
@@ -191,6 +192,14 @@ def planning_variable(
|
|
|
191
192
|
allows_unassigned: bool = False,
|
|
192
193
|
pinning: bool = False,
|
|
193
194
|
) -> PlanningField:
|
|
195
|
+
if pinning:
|
|
196
|
+
msg = (
|
|
197
|
+
"planning_variable(pinning=True) is not supported: SolverForge pins a whole "
|
|
198
|
+
"planning entity through an entity-level descriptor predicate, and no public "
|
|
199
|
+
"bridge seam exposes entity pinning to the Python binding yet. Pin an input "
|
|
200
|
+
"value by restricting candidate_values instead."
|
|
201
|
+
)
|
|
202
|
+
raise ModelValidationError(msg)
|
|
194
203
|
value_candidates = _resolve_metadata_source(
|
|
195
204
|
nearby_value_candidates, name="nearby_value_candidates"
|
|
196
205
|
)
|
|
@@ -217,7 +226,6 @@ def planning_variable(
|
|
|
217
226
|
nearby_entity_distance_meter=entity_distance.callback,
|
|
218
227
|
nearby_entity_distance_field=entity_distance.field_name,
|
|
219
228
|
allows_unassigned=allows_unassigned,
|
|
220
|
-
pinning=pinning,
|
|
221
229
|
)
|
|
222
230
|
)
|
|
223
231
|
|
|
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
|