vrp-model 0.1.1__py3-none-any.whl

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 (55) hide show
  1. vrp_model/__init__.py +65 -0
  2. vrp_model/core/__init__.py +38 -0
  3. vrp_model/core/errors.py +25 -0
  4. vrp_model/core/kinds.py +12 -0
  5. vrp_model/core/model.py +739 -0
  6. vrp_model/core/records.py +99 -0
  7. vrp_model/core/solution.py +31 -0
  8. vrp_model/core/storage.py +21 -0
  9. vrp_model/core/time_window_flex.py +26 -0
  10. vrp_model/core/travel_edges.py +54 -0
  11. vrp_model/core/views.py +276 -0
  12. vrp_model/io/__init__.py +35 -0
  13. vrp_model/io/vrplib_io.py +29 -0
  14. vrp_model/io/vrplib_keys.py +90 -0
  15. vrp_model/io/vrplib_normalize.py +232 -0
  16. vrp_model/io/vrplib_read.py +154 -0
  17. vrp_model/io/vrplib_types.py +58 -0
  18. vrp_model/io/vrplib_write.py +158 -0
  19. vrp_model/solvers/__init__.py +35 -0
  20. vrp_model/solvers/_helpers.py +52 -0
  21. vrp_model/solvers/base.py +26 -0
  22. vrp_model/solvers/hgs_cvrp/__init__.py +1 -0
  23. vrp_model/solvers/jsprit/__init__.py +1 -0
  24. vrp_model/solvers/nextroute/__init__.py +10 -0
  25. vrp_model/solvers/nextroute/bindings.py +17 -0
  26. vrp_model/solvers/nextroute/options.py +58 -0
  27. vrp_model/solvers/nextroute/solver.py +315 -0
  28. vrp_model/solvers/options.py +102 -0
  29. vrp_model/solvers/ortools/__init__.py +22 -0
  30. vrp_model/solvers/ortools/bindings.py +18 -0
  31. vrp_model/solvers/ortools/options.py +54 -0
  32. vrp_model/solvers/ortools/solver.py +535 -0
  33. vrp_model/solvers/pyvrp/__init__.py +18 -0
  34. vrp_model/solvers/pyvrp/bindings.py +66 -0
  35. vrp_model/solvers/pyvrp/options.py +24 -0
  36. vrp_model/solvers/pyvrp/solver.py +358 -0
  37. vrp_model/solvers/registry.py +21 -0
  38. vrp_model/solvers/status.py +40 -0
  39. vrp_model/solvers/vroom/__init__.py +10 -0
  40. vrp_model/solvers/vroom/bindings.py +17 -0
  41. vrp_model/solvers/vroom/options.py +48 -0
  42. vrp_model/solvers/vroom/solver.py +336 -0
  43. vrp_model/solvers/vrpsolvereasy/__init__.py +1 -0
  44. vrp_model/solvers/vrpy/__init__.py +1 -0
  45. vrp_model/utils/__init__.py +6 -0
  46. vrp_model/utils/distance.py +12 -0
  47. vrp_model/utils/time.py +8 -0
  48. vrp_model/validation/__init__.py +5 -0
  49. vrp_model/validation/consistency.py +58 -0
  50. vrp_model/validation/feasibility.py +230 -0
  51. vrp_model/validation/structure.py +18 -0
  52. vrp_model/validation/tags.py +20 -0
  53. vrp_model-0.1.1.dist-info/METADATA +140 -0
  54. vrp_model-0.1.1.dist-info/RECORD +55 -0
  55. vrp_model-0.1.1.dist-info/WHEEL +4 -0
vrp_model/__init__.py ADDED
@@ -0,0 +1,65 @@
1
+ """vrp_model: canonical VRP modeling API (solver-agnostic core)."""
2
+
3
+ from vrp_model.core.errors import (
4
+ MappingError,
5
+ SolutionUnavailableError,
6
+ SolverCapabilityError,
7
+ SolverNotInstalledError,
8
+ ValidationError,
9
+ VRPModelError,
10
+ )
11
+ from vrp_model.core.kinds import NodeKind
12
+ from vrp_model.core.model import Feature, Model, SolveStatus
13
+ from vrp_model.core.solution import Route, Solution
14
+ from vrp_model.core.time_window_flex import TimeWindowFlex
15
+ from vrp_model.core.travel_edges import TRAVEL_COST_INF, TravelEdgeAttrs, TravelEdgesMap
16
+ from vrp_model.core.views import Depot, Job, Vehicle
17
+ from vrp_model.solvers.base import Solver
18
+ from vrp_model.solvers.options import (
19
+ GAP_ABS,
20
+ GAP_REL,
21
+ LOG_PATH,
22
+ MAX_ITERATIONS,
23
+ MSG,
24
+ SEED,
25
+ TIME_LIMIT,
26
+ SolverOptions,
27
+ default_solver_options,
28
+ merge_solver_options,
29
+ )
30
+ from vrp_model.solvers.status import SolutionStatus, SolverStopReason
31
+
32
+ __all__ = [
33
+ "Depot",
34
+ "Feature",
35
+ "GAP_ABS",
36
+ "GAP_REL",
37
+ "Job",
38
+ "LOG_PATH",
39
+ "MappingError",
40
+ "MSG",
41
+ "Model",
42
+ "NodeKind",
43
+ "Route",
44
+ "Solution",
45
+ "SolveStatus",
46
+ "TIME_LIMIT",
47
+ "TimeWindowFlex",
48
+ "TRAVEL_COST_INF",
49
+ "TravelEdgeAttrs",
50
+ "TravelEdgesMap",
51
+ "MAX_ITERATIONS",
52
+ "SEED",
53
+ "Solver",
54
+ "SolverOptions",
55
+ "SolverCapabilityError",
56
+ "SolutionStatus",
57
+ "SolutionUnavailableError",
58
+ "SolverNotInstalledError",
59
+ "SolverStopReason",
60
+ "ValidationError",
61
+ "VRPModelError",
62
+ "Vehicle",
63
+ "default_solver_options",
64
+ "merge_solver_options",
65
+ ]
@@ -0,0 +1,38 @@
1
+ """Core model, solution, and feature types."""
2
+
3
+ from vrp_model.core.errors import (
4
+ MappingError,
5
+ SolutionUnavailableError,
6
+ SolverCapabilityError,
7
+ SolverNotInstalledError,
8
+ ValidationError,
9
+ VRPModelError,
10
+ )
11
+ from vrp_model.core.kinds import NodeKind
12
+ from vrp_model.core.model import Feature, Model, SolveStatus
13
+ from vrp_model.core.solution import Route, Solution
14
+ from vrp_model.core.time_window_flex import TimeWindowFlex
15
+ from vrp_model.core.travel_edges import TRAVEL_COST_INF, TravelEdgeAttrs, TravelEdgesMap
16
+ from vrp_model.core.views import Depot, Job, Vehicle
17
+
18
+ __all__ = [
19
+ "Depot",
20
+ "Feature",
21
+ "Job",
22
+ "MappingError",
23
+ "Model",
24
+ "NodeKind",
25
+ "Route",
26
+ "Solution",
27
+ "SolveStatus",
28
+ "TRAVEL_COST_INF",
29
+ "TravelEdgeAttrs",
30
+ "TravelEdgesMap",
31
+ "TimeWindowFlex",
32
+ "SolverCapabilityError",
33
+ "SolverNotInstalledError",
34
+ "SolutionUnavailableError",
35
+ "ValidationError",
36
+ "VRPModelError",
37
+ "Vehicle",
38
+ ]
@@ -0,0 +1,25 @@
1
+ """Domain-specific exceptions."""
2
+
3
+
4
+ class VRPModelError(Exception):
5
+ """Base error for vrp_model."""
6
+
7
+
8
+ class ValidationError(VRPModelError):
9
+ """Model failed structure, consistency, or feasibility validation."""
10
+
11
+
12
+ class SolverCapabilityError(VRPModelError):
13
+ """Solver does not support one or more features present on the model."""
14
+
15
+
16
+ class SolverNotInstalledError(VRPModelError):
17
+ """Optional solver dependency is not installed."""
18
+
19
+
20
+ class MappingError(VRPModelError):
21
+ """Canonical model ↔ solver-native conversion failed."""
22
+
23
+
24
+ class SolutionUnavailableError(VRPModelError):
25
+ """Raised when a method requires an attached solution but ``model.solution`` is ``None``."""
@@ -0,0 +1,12 @@
1
+ """Node classification for unified ``Model._nodes`` storage."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from enum import Enum, auto
6
+
7
+
8
+ class NodeKind(Enum):
9
+ """Discriminator for rows in :attr:`~vrp_model.core.model.Model._nodes`."""
10
+
11
+ DEPOT = auto()
12
+ JOB = auto()