solverforge 0.2.2__tar.gz → 0.2.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.
Files changed (63) hide show
  1. {solverforge-0.2.2 → solverforge-0.2.3}/Cargo.lock +5 -5
  2. {solverforge-0.2.2 → solverforge-0.2.3}/Cargo.toml +1 -1
  3. {solverforge-0.2.2 → solverforge-0.2.3}/PKG-INFO +1 -1
  4. {solverforge-0.2.2 → solverforge-0.2.3}/pyproject.toml +1 -1
  5. {solverforge-0.2.2 → solverforge-0.2.3}/python/solverforge/__init__.py +60 -0
  6. {solverforge-0.2.2 → solverforge-0.2.3}/solverforge-python/python/solverforge/__init__.py +60 -0
  7. solverforge-0.2.3/solverforge-python/src/lib.rs +148 -0
  8. solverforge-0.2.2/solverforge-python/src/lib.rs +0 -72
  9. {solverforge-0.2.2 → solverforge-0.2.3}/README.md +0 -0
  10. {solverforge-0.2.2 → solverforge-0.2.3}/solverforge-core/Cargo.toml +0 -0
  11. {solverforge-0.2.2 → solverforge-0.2.3}/solverforge-core/README.md +0 -0
  12. {solverforge-0.2.2 → solverforge-0.2.3}/solverforge-core/src/analysis/explanation.rs +0 -0
  13. {solverforge-0.2.2 → solverforge-0.2.3}/solverforge-core/src/analysis/manager.rs +0 -0
  14. {solverforge-0.2.2 → solverforge-0.2.3}/solverforge-core/src/analysis/mod.rs +0 -0
  15. {solverforge-0.2.2 → solverforge-0.2.3}/solverforge-core/src/bridge.rs +0 -0
  16. {solverforge-0.2.2 → solverforge-0.2.3}/solverforge-core/src/constraints/collectors.rs +0 -0
  17. {solverforge-0.2.2 → solverforge-0.2.3}/solverforge-core/src/constraints/constraint.rs +0 -0
  18. {solverforge-0.2.2 → solverforge-0.2.3}/solverforge-core/src/constraints/joiners.rs +0 -0
  19. {solverforge-0.2.2 → solverforge-0.2.3}/solverforge-core/src/constraints/mod.rs +0 -0
  20. {solverforge-0.2.2 → solverforge-0.2.3}/solverforge-core/src/constraints/stream.rs +0 -0
  21. {solverforge-0.2.2 → solverforge-0.2.3}/solverforge-core/src/domain/annotations.rs +0 -0
  22. {solverforge-0.2.2 → solverforge-0.2.3}/solverforge-core/src/domain/class.rs +0 -0
  23. {solverforge-0.2.2 → solverforge-0.2.3}/solverforge-core/src/domain/constraint_config.rs +0 -0
  24. {solverforge-0.2.2 → solverforge-0.2.3}/solverforge-core/src/domain/mod.rs +0 -0
  25. {solverforge-0.2.2 → solverforge-0.2.3}/solverforge-core/src/domain/model.rs +0 -0
  26. {solverforge-0.2.2 → solverforge-0.2.3}/solverforge-core/src/domain/shadow.rs +0 -0
  27. {solverforge-0.2.2 → solverforge-0.2.3}/solverforge-core/src/error.rs +0 -0
  28. {solverforge-0.2.2 → solverforge-0.2.3}/solverforge-core/src/handles.rs +0 -0
  29. {solverforge-0.2.2 → solverforge-0.2.3}/solverforge-core/src/lib.rs +0 -0
  30. {solverforge-0.2.2 → solverforge-0.2.3}/solverforge-core/src/score/bendable.rs +0 -0
  31. {solverforge-0.2.2 → solverforge-0.2.3}/solverforge-core/src/score/hard_soft.rs +0 -0
  32. {solverforge-0.2.2 → solverforge-0.2.3}/solverforge-core/src/score/hard_soft_decimal.rs +0 -0
  33. {solverforge-0.2.2 → solverforge-0.2.3}/solverforge-core/src/score/mod.rs +0 -0
  34. {solverforge-0.2.2 → solverforge-0.2.3}/solverforge-core/src/score/simple.rs +0 -0
  35. {solverforge-0.2.2 → solverforge-0.2.3}/solverforge-core/src/score/simple_decimal.rs +0 -0
  36. {solverforge-0.2.2 → solverforge-0.2.3}/solverforge-core/src/solver/builder.rs +0 -0
  37. {solverforge-0.2.2 → solverforge-0.2.3}/solverforge-core/src/solver/client.rs +0 -0
  38. {solverforge-0.2.2 → solverforge-0.2.3}/solverforge-core/src/solver/config.rs +0 -0
  39. {solverforge-0.2.2 → solverforge-0.2.3}/solverforge-core/src/solver/environment.rs +0 -0
  40. {solverforge-0.2.2 → solverforge-0.2.3}/solverforge-core/src/solver/factory.rs +0 -0
  41. {solverforge-0.2.2 → solverforge-0.2.3}/solverforge-core/src/solver/mod.rs +0 -0
  42. {solverforge-0.2.2 → solverforge-0.2.3}/solverforge-core/src/solver/request.rs +0 -0
  43. {solverforge-0.2.2 → solverforge-0.2.3}/solverforge-core/src/solver/response.rs +0 -0
  44. {solverforge-0.2.2 → solverforge-0.2.3}/solverforge-core/src/solver/termination.rs +0 -0
  45. {solverforge-0.2.2 → solverforge-0.2.3}/solverforge-core/src/traits.rs +0 -0
  46. {solverforge-0.2.2 → solverforge-0.2.3}/solverforge-core/src/value.rs +0 -0
  47. {solverforge-0.2.2 → solverforge-0.2.3}/solverforge-core/src/wasm/expr_builder.rs +0 -0
  48. {solverforge-0.2.2 → solverforge-0.2.3}/solverforge-core/src/wasm/expression.rs +0 -0
  49. {solverforge-0.2.2 → solverforge-0.2.3}/solverforge-core/src/wasm/generator.rs +0 -0
  50. {solverforge-0.2.2 → solverforge-0.2.3}/solverforge-core/src/wasm/host_functions.rs +0 -0
  51. {solverforge-0.2.2 → solverforge-0.2.3}/solverforge-core/src/wasm/memory.rs +0 -0
  52. {solverforge-0.2.2 → solverforge-0.2.3}/solverforge-core/src/wasm/mod.rs +0 -0
  53. {solverforge-0.2.2 → solverforge-0.2.3}/solverforge-python/Cargo.toml +0 -0
  54. {solverforge-0.2.2 → solverforge-0.2.3}/solverforge-python/README.md +0 -0
  55. {solverforge-0.2.2 → solverforge-0.2.3}/solverforge-python/src/annotations.rs +0 -0
  56. {solverforge-0.2.2 → solverforge-0.2.3}/solverforge-python/src/bridge.rs +0 -0
  57. {solverforge-0.2.2 → solverforge-0.2.3}/solverforge-python/src/collectors.rs +0 -0
  58. {solverforge-0.2.2 → solverforge-0.2.3}/solverforge-python/src/decorators.rs +0 -0
  59. {solverforge-0.2.2 → solverforge-0.2.3}/solverforge-python/src/joiners.rs +0 -0
  60. {solverforge-0.2.2 → solverforge-0.2.3}/solverforge-python/src/lambda_analyzer.rs +0 -0
  61. {solverforge-0.2.2 → solverforge-0.2.3}/solverforge-python/src/score.rs +0 -0
  62. {solverforge-0.2.2 → solverforge-0.2.3}/solverforge-python/src/solver.rs +0 -0
  63. {solverforge-0.2.2 → solverforge-0.2.3}/solverforge-python/src/stream.rs +0 -0
@@ -1507,7 +1507,7 @@ dependencies = [
1507
1507
 
1508
1508
  [[package]]
1509
1509
  name = "solverforge"
1510
- version = "0.2.2"
1510
+ version = "0.2.3"
1511
1511
  dependencies = [
1512
1512
  "solverforge-core",
1513
1513
  "solverforge-derive",
@@ -1516,7 +1516,7 @@ dependencies = [
1516
1516
 
1517
1517
  [[package]]
1518
1518
  name = "solverforge-core"
1519
- version = "0.2.2"
1519
+ version = "0.2.3"
1520
1520
  dependencies = [
1521
1521
  "base64",
1522
1522
  "indexmap",
@@ -1532,7 +1532,7 @@ dependencies = [
1532
1532
 
1533
1533
  [[package]]
1534
1534
  name = "solverforge-derive"
1535
- version = "0.2.2"
1535
+ version = "0.2.3"
1536
1536
  dependencies = [
1537
1537
  "proc-macro2",
1538
1538
  "quote",
@@ -1544,7 +1544,7 @@ dependencies = [
1544
1544
 
1545
1545
  [[package]]
1546
1546
  name = "solverforge-python"
1547
- version = "0.2.2"
1547
+ version = "0.2.3"
1548
1548
  dependencies = [
1549
1549
  "log",
1550
1550
  "pyo3",
@@ -1557,7 +1557,7 @@ dependencies = [
1557
1557
 
1558
1558
  [[package]]
1559
1559
  name = "solverforge-service"
1560
- version = "0.2.2"
1560
+ version = "0.2.3"
1561
1561
  dependencies = [
1562
1562
  "base64",
1563
1563
  "chrono",
@@ -3,7 +3,7 @@ members = ["solverforge-core", "solverforge-python"]
3
3
  resolver = "2"
4
4
 
5
5
  [workspace.package]
6
- version = "0.2.2"
6
+ version = "0.2.3"
7
7
  edition = "2021"
8
8
  license = "Apache-2.0"
9
9
  repository = "https://github.com/solverforge/solverforge"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: solverforge
3
- Version: 0.2.2
3
+ Version: 0.2.3
4
4
  Classifier: Programming Language :: Rust
5
5
  Classifier: Programming Language :: Python :: Implementation :: CPython
6
6
  Classifier: Programming Language :: Python :: 3
@@ -4,7 +4,7 @@ build-backend = "maturin"
4
4
 
5
5
  [project]
6
6
  name = "solverforge"
7
- version = "0.2.2"
7
+ version = "0.2.3"
8
8
  description = "Python bindings for SolverForge constraint solver"
9
9
  readme = "README.md"
10
10
  license = { text = "Apache-2.0" }
@@ -35,6 +35,36 @@ from solverforge._solverforge import (
35
35
  build_domain_model,
36
36
  DomainClass,
37
37
  DomainModel,
38
+ constraint_provider,
39
+ ConstraintProvider,
40
+ # Solver runtime
41
+ TerminationConfig,
42
+ DiminishedReturnsConfig,
43
+ EnvironmentMode,
44
+ MoveThreadCount,
45
+ SolverConfig,
46
+ SolveHandle,
47
+ SolveState,
48
+ ScoreDto,
49
+ SolveStatus,
50
+ SolveResponse,
51
+ SolverFactory,
52
+ Solver,
53
+ # Constraint streams
54
+ ConstraintFactory,
55
+ UniConstraintStream,
56
+ BiConstraintStream,
57
+ TriConstraintStream,
58
+ UniConstraintBuilder,
59
+ BiConstraintBuilder,
60
+ TriConstraintBuilder,
61
+ Constraint,
62
+ # Joiners
63
+ Joiner,
64
+ Joiners,
65
+ # Collectors
66
+ Collector,
67
+ ConstraintCollectors,
38
68
  )
39
69
 
40
70
  __all__ = [
@@ -62,4 +92,34 @@ __all__ = [
62
92
  "build_domain_model",
63
93
  "DomainClass",
64
94
  "DomainModel",
95
+ "constraint_provider",
96
+ "ConstraintProvider",
97
+ # Solver runtime
98
+ "TerminationConfig",
99
+ "DiminishedReturnsConfig",
100
+ "EnvironmentMode",
101
+ "MoveThreadCount",
102
+ "SolverConfig",
103
+ "SolveHandle",
104
+ "SolveState",
105
+ "ScoreDto",
106
+ "SolveStatus",
107
+ "SolveResponse",
108
+ "SolverFactory",
109
+ "Solver",
110
+ # Constraint streams
111
+ "ConstraintFactory",
112
+ "UniConstraintStream",
113
+ "BiConstraintStream",
114
+ "TriConstraintStream",
115
+ "UniConstraintBuilder",
116
+ "BiConstraintBuilder",
117
+ "TriConstraintBuilder",
118
+ "Constraint",
119
+ # Joiners
120
+ "Joiner",
121
+ "Joiners",
122
+ # Collectors
123
+ "Collector",
124
+ "ConstraintCollectors",
65
125
  ]
@@ -35,6 +35,36 @@ from solverforge._solverforge import (
35
35
  build_domain_model,
36
36
  DomainClass,
37
37
  DomainModel,
38
+ constraint_provider,
39
+ ConstraintProvider,
40
+ # Solver runtime
41
+ TerminationConfig,
42
+ DiminishedReturnsConfig,
43
+ EnvironmentMode,
44
+ MoveThreadCount,
45
+ SolverConfig,
46
+ SolveHandle,
47
+ SolveState,
48
+ ScoreDto,
49
+ SolveStatus,
50
+ SolveResponse,
51
+ SolverFactory,
52
+ Solver,
53
+ # Constraint streams
54
+ ConstraintFactory,
55
+ UniConstraintStream,
56
+ BiConstraintStream,
57
+ TriConstraintStream,
58
+ UniConstraintBuilder,
59
+ BiConstraintBuilder,
60
+ TriConstraintBuilder,
61
+ Constraint,
62
+ # Joiners
63
+ Joiner,
64
+ Joiners,
65
+ # Collectors
66
+ Collector,
67
+ ConstraintCollectors,
38
68
  )
39
69
 
40
70
  __all__ = [
@@ -62,4 +92,34 @@ __all__ = [
62
92
  "build_domain_model",
63
93
  "DomainClass",
64
94
  "DomainModel",
95
+ "constraint_provider",
96
+ "ConstraintProvider",
97
+ # Solver runtime
98
+ "TerminationConfig",
99
+ "DiminishedReturnsConfig",
100
+ "EnvironmentMode",
101
+ "MoveThreadCount",
102
+ "SolverConfig",
103
+ "SolveHandle",
104
+ "SolveState",
105
+ "ScoreDto",
106
+ "SolveStatus",
107
+ "SolveResponse",
108
+ "SolverFactory",
109
+ "Solver",
110
+ # Constraint streams
111
+ "ConstraintFactory",
112
+ "UniConstraintStream",
113
+ "BiConstraintStream",
114
+ "TriConstraintStream",
115
+ "UniConstraintBuilder",
116
+ "BiConstraintBuilder",
117
+ "TriConstraintBuilder",
118
+ "Constraint",
119
+ # Joiners
120
+ "Joiner",
121
+ "Joiners",
122
+ # Collectors
123
+ "Collector",
124
+ "ConstraintCollectors",
65
125
  ]
@@ -0,0 +1,148 @@
1
+ //! Python bindings for SolverForge constraint solver
2
+ //!
3
+ //! This crate provides Python bindings using PyO3, offering a 1:1 compatible API
4
+ //! with Timefold's Python bindings.
5
+
6
+ use pyo3::prelude::*;
7
+
8
+ mod annotations;
9
+ mod bridge;
10
+ mod collectors;
11
+ mod decorators;
12
+ mod joiners;
13
+ mod lambda_analyzer;
14
+ mod score;
15
+ mod solver;
16
+ mod stream;
17
+
18
+ pub use annotations::{
19
+ PyDeepPlanningClone, PyInverseRelationShadowVariable, PyPlanningEntityCollectionProperty,
20
+ PyPlanningEntityProperty, PyPlanningId, PyPlanningListVariable, PyPlanningPin, PyPlanningScore,
21
+ PyPlanningVariable, PyProblemFactCollectionProperty, PyProblemFactProperty,
22
+ PyValueRangeProvider,
23
+ };
24
+ pub use bridge::{PyBridge, PythonBridge};
25
+ pub use collectors::{PyCollector, PyConstraintCollectors};
26
+ pub use decorators::{PyConstraintProvider, PyDomainClass, PyDomainModel};
27
+ pub use joiners::{PyJoiner, PyJoiners};
28
+ pub use lambda_analyzer::{analyze_lambda, generate_lambda_name, LambdaInfo};
29
+ pub use score::{PyHardMediumSoftScore, PyHardSoftScore, PySimpleScore};
30
+ pub use solver::{
31
+ PyDiminishedReturnsConfig, PyEnvironmentMode, PyMoveThreadCount, PySolveHandle,
32
+ PySolveResponse, PySolveStatus, PySolver, PySolverConfig, PySolverFactory, PyTerminationConfig,
33
+ };
34
+ pub use stream::{
35
+ PyBiConstraintBuilder, PyBiConstraintStream, PyConstraint, PyConstraintFactory,
36
+ PyTriConstraintBuilder, PyTriConstraintStream, PyUniConstraintBuilder, PyUniConstraintStream,
37
+ };
38
+
39
+ /// SolverForge Python module
40
+ ///
41
+ /// Provides constraint solving capabilities with an API compatible with Timefold.
42
+ #[pymodule]
43
+ fn _solverforge(m: &Bound<'_, PyModule>) -> PyResult<()> {
44
+ // Version info
45
+ m.add("__version__", env!("CARGO_PKG_VERSION"))?;
46
+
47
+ // Bridge for Python-Rust object interop
48
+ m.add_class::<PyBridge>()?;
49
+
50
+ // Annotation marker classes
51
+ annotations::register_annotations(m)?;
52
+
53
+ // Score types
54
+ score::register_scores(m)?;
55
+
56
+ // Decorators
57
+ decorators::register_decorators(m)?;
58
+
59
+ // Constraint streams
60
+ stream::register_streams(m)?;
61
+
62
+ // Joiners
63
+ joiners::register_joiners(m)?;
64
+
65
+ // Collectors
66
+ collectors::register_collectors(m)?;
67
+
68
+ // Solver
69
+ solver::register_solver(m)?;
70
+
71
+ Ok(())
72
+ }
73
+
74
+ #[cfg(test)]
75
+ mod tests {
76
+ use super::*;
77
+
78
+ /// Verify that all solver runtime types are accessible from lib.rs exports
79
+ #[test]
80
+ fn test_solver_runtime_types_exported() {
81
+ // These type assertions verify the types are publicly re-exported
82
+ fn assert_type<T>() {}
83
+
84
+ assert_type::<PySolverConfig>();
85
+ assert_type::<PyTerminationConfig>();
86
+ assert_type::<PySolverFactory>();
87
+ assert_type::<PySolver>();
88
+ assert_type::<PySolveHandle>();
89
+ assert_type::<PySolveResponse>();
90
+ assert_type::<PySolveStatus>();
91
+ assert_type::<PyEnvironmentMode>();
92
+ assert_type::<PyMoveThreadCount>();
93
+ assert_type::<PyDiminishedReturnsConfig>();
94
+ }
95
+
96
+ /// Verify that all constraint stream types are accessible
97
+ #[test]
98
+ fn test_constraint_stream_types_exported() {
99
+ fn assert_type<T>() {}
100
+
101
+ assert_type::<PyConstraintFactory>();
102
+ assert_type::<PyUniConstraintStream>();
103
+ assert_type::<PyBiConstraintStream>();
104
+ assert_type::<PyTriConstraintStream>();
105
+ assert_type::<PyUniConstraintBuilder>();
106
+ assert_type::<PyBiConstraintBuilder>();
107
+ assert_type::<PyTriConstraintBuilder>();
108
+ assert_type::<PyConstraint>();
109
+ }
110
+
111
+ /// Verify that joiner types are accessible
112
+ #[test]
113
+ fn test_joiner_types_exported() {
114
+ fn assert_type<T>() {}
115
+
116
+ assert_type::<PyJoiner>();
117
+ assert_type::<PyJoiners>();
118
+ }
119
+
120
+ /// Verify that collector types are accessible
121
+ #[test]
122
+ fn test_collector_types_exported() {
123
+ fn assert_type<T>() {}
124
+
125
+ assert_type::<PyCollector>();
126
+ assert_type::<PyConstraintCollectors>();
127
+ }
128
+
129
+ /// Verify that decorator types are accessible
130
+ #[test]
131
+ fn test_decorator_types_exported() {
132
+ fn assert_type<T>() {}
133
+
134
+ assert_type::<PyConstraintProvider>();
135
+ assert_type::<PyDomainClass>();
136
+ assert_type::<PyDomainModel>();
137
+ }
138
+
139
+ /// Verify that score types are accessible
140
+ #[test]
141
+ fn test_score_types_exported() {
142
+ fn assert_type<T>() {}
143
+
144
+ assert_type::<PySimpleScore>();
145
+ assert_type::<PyHardSoftScore>();
146
+ assert_type::<PyHardMediumSoftScore>();
147
+ }
148
+ }
@@ -1,72 +0,0 @@
1
- //! Python bindings for SolverForge constraint solver
2
- //!
3
- //! This crate provides Python bindings using PyO3, offering a 1:1 compatible API
4
- //! with Timefold's Python bindings.
5
-
6
- use pyo3::prelude::*;
7
-
8
- mod annotations;
9
- mod bridge;
10
- mod collectors;
11
- mod decorators;
12
- mod joiners;
13
- mod lambda_analyzer;
14
- mod score;
15
- mod solver;
16
- mod stream;
17
-
18
- pub use annotations::{
19
- PyDeepPlanningClone, PyInverseRelationShadowVariable, PyPlanningEntityCollectionProperty,
20
- PyPlanningEntityProperty, PyPlanningId, PyPlanningListVariable, PyPlanningPin, PyPlanningScore,
21
- PyPlanningVariable, PyProblemFactCollectionProperty, PyProblemFactProperty,
22
- PyValueRangeProvider,
23
- };
24
- pub use bridge::{PyBridge, PythonBridge};
25
- pub use collectors::{PyCollector, PyConstraintCollectors};
26
- pub use decorators::{PyConstraintProvider, PyDomainClass, PyDomainModel};
27
- pub use joiners::{PyJoiner, PyJoiners};
28
- pub use lambda_analyzer::{analyze_lambda, generate_lambda_name, LambdaInfo};
29
- pub use score::{PyHardMediumSoftScore, PyHardSoftScore, PySimpleScore};
30
- pub use solver::{
31
- PyDiminishedReturnsConfig, PyEnvironmentMode, PyMoveThreadCount, PySolveHandle,
32
- PySolveResponse, PySolveStatus, PySolver, PySolverConfig, PySolverFactory, PyTerminationConfig,
33
- };
34
- pub use stream::{
35
- PyBiConstraintBuilder, PyBiConstraintStream, PyConstraint, PyConstraintFactory,
36
- PyTriConstraintBuilder, PyTriConstraintStream, PyUniConstraintBuilder, PyUniConstraintStream,
37
- };
38
-
39
- /// SolverForge Python module
40
- ///
41
- /// Provides constraint solving capabilities with an API compatible with Timefold.
42
- #[pymodule]
43
- fn _solverforge(m: &Bound<'_, PyModule>) -> PyResult<()> {
44
- // Version info
45
- m.add("__version__", env!("CARGO_PKG_VERSION"))?;
46
-
47
- // Bridge for Python-Rust object interop
48
- m.add_class::<PyBridge>()?;
49
-
50
- // Annotation marker classes
51
- annotations::register_annotations(m)?;
52
-
53
- // Score types
54
- score::register_scores(m)?;
55
-
56
- // Decorators
57
- decorators::register_decorators(m)?;
58
-
59
- // Constraint streams
60
- stream::register_streams(m)?;
61
-
62
- // Joiners
63
- joiners::register_joiners(m)?;
64
-
65
- // Collectors
66
- collectors::register_collectors(m)?;
67
-
68
- // Solver
69
- solver::register_solver(m)?;
70
-
71
- Ok(())
72
- }
File without changes