job-shop-lib 1.0.0b4__tar.gz → 1.0.0b5__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 (71) hide show
  1. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/PKG-INFO +2 -2
  2. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/README.md +1 -1
  3. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/__init__.py +1 -1
  4. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/reinforcement_learning/_resource_task_graph_observation.py +17 -24
  5. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/pyproject.toml +1 -1
  6. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/LICENSE +0 -0
  7. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/_base_solver.py +0 -0
  8. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/_job_shop_instance.py +0 -0
  9. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/_operation.py +0 -0
  10. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/_schedule.py +0 -0
  11. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/_scheduled_operation.py +0 -0
  12. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/benchmarking/__init__.py +0 -0
  13. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/benchmarking/_load_benchmark.py +0 -0
  14. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/benchmarking/benchmark_instances.json +0 -0
  15. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/constraint_programming/__init__.py +0 -0
  16. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/constraint_programming/_ortools_solver.py +0 -0
  17. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/dispatching/__init__.py +0 -0
  18. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/dispatching/_dispatcher.py +0 -0
  19. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/dispatching/_dispatcher_observer_config.py +0 -0
  20. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/dispatching/_factories.py +0 -0
  21. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/dispatching/_history_observer.py +0 -0
  22. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/dispatching/_optimal_operations_observer.py +0 -0
  23. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/dispatching/_ready_operation_filters.py +0 -0
  24. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/dispatching/_unscheduled_operations_observer.py +0 -0
  25. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/dispatching/feature_observers/__init__.py +0 -0
  26. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/dispatching/feature_observers/_composite_feature_observer.py +0 -0
  27. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/dispatching/feature_observers/_duration_observer.py +0 -0
  28. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/dispatching/feature_observers/_earliest_start_time_observer.py +0 -0
  29. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/dispatching/feature_observers/_factory.py +0 -0
  30. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/dispatching/feature_observers/_feature_observer.py +0 -0
  31. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/dispatching/feature_observers/_is_completed_observer.py +0 -0
  32. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/dispatching/feature_observers/_is_ready_observer.py +0 -0
  33. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/dispatching/feature_observers/_is_scheduled_observer.py +0 -0
  34. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/dispatching/feature_observers/_position_in_job_observer.py +0 -0
  35. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/dispatching/feature_observers/_remaining_operations_observer.py +0 -0
  36. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/dispatching/rules/__init__.py +0 -0
  37. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/dispatching/rules/_dispatching_rule_factory.py +0 -0
  38. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/dispatching/rules/_dispatching_rule_solver.py +0 -0
  39. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/dispatching/rules/_dispatching_rules_functions.py +0 -0
  40. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/dispatching/rules/_machine_chooser_factory.py +0 -0
  41. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/dispatching/rules/_utils.py +0 -0
  42. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/exceptions.py +0 -0
  43. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/generation/__init__.py +0 -0
  44. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/generation/_general_instance_generator.py +0 -0
  45. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/generation/_instance_generator.py +0 -0
  46. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/generation/_transformations.py +0 -0
  47. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/generation/_utils.py +0 -0
  48. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/graphs/__init__.py +0 -0
  49. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/graphs/_build_disjunctive_graph.py +0 -0
  50. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/graphs/_build_resource_task_graphs.py +0 -0
  51. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/graphs/_constants.py +0 -0
  52. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/graphs/_job_shop_graph.py +0 -0
  53. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/graphs/_node.py +0 -0
  54. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/graphs/graph_updaters/__init__.py +0 -0
  55. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/graphs/graph_updaters/_graph_updater.py +0 -0
  56. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/graphs/graph_updaters/_residual_graph_updater.py +0 -0
  57. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/graphs/graph_updaters/_utils.py +0 -0
  58. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/reinforcement_learning/__init__.py +0 -0
  59. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/reinforcement_learning/_multi_job_shop_graph_env.py +0 -0
  60. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/reinforcement_learning/_reward_observers.py +0 -0
  61. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/reinforcement_learning/_single_job_shop_graph_env.py +0 -0
  62. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/reinforcement_learning/_types_and_constants.py +0 -0
  63. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/reinforcement_learning/_utils.py +0 -0
  64. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/visualization/__init__.py +0 -0
  65. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/visualization/gantt/__init__.py +0 -0
  66. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/visualization/gantt/_gantt_chart_creator.py +0 -0
  67. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/visualization/gantt/_gantt_chart_video_and_gif_creation.py +0 -0
  68. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/visualization/gantt/_plot_gantt_chart.py +0 -0
  69. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/visualization/graphs/__init__.py +0 -0
  70. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/visualization/graphs/_plot_disjunctive_graph.py +0 -0
  71. {job_shop_lib-1.0.0b4 → job_shop_lib-1.0.0b5}/job_shop_lib/visualization/graphs/_plot_resource_task_graph.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: job-shop-lib
3
- Version: 1.0.0b4
3
+ Version: 1.0.0b5
4
4
  Summary: An easy-to-use and modular Python library for the Job Shop Scheduling Problem (JSSP)
5
5
  License: MIT
6
6
  Author: Pabloo22
@@ -60,7 +60,7 @@ See [this](https://colab.research.google.com/drive/1XV_Rvq1F2ns6DFG8uNj66q_rcoww
60
60
  Version 1.0.0 is currently in beta stage and can be installed with:
61
61
 
62
62
  ```bash
63
- pip install job-shop-lib==1.0.0b4
63
+ pip install job-shop-lib==1.0.0b5
64
64
  ```
65
65
 
66
66
  Although this version is not stable and may contain breaking changes in subsequent releases, it is recommended to install it to access the new reinforcement learning environments and familiarize yourself with new changes (see the [latest pull requests](https://github.com/Pabloo22/job_shop_lib/pulls?q=is%3Apr+is%3Aclosed)). There is a [documentation page](https://job-shop-lib.readthedocs.io/en/latest/) for versions 1.0.0a3 and onward.
@@ -36,7 +36,7 @@ See [this](https://colab.research.google.com/drive/1XV_Rvq1F2ns6DFG8uNj66q_rcoww
36
36
  Version 1.0.0 is currently in beta stage and can be installed with:
37
37
 
38
38
  ```bash
39
- pip install job-shop-lib==1.0.0b4
39
+ pip install job-shop-lib==1.0.0b5
40
40
  ```
41
41
 
42
42
  Although this version is not stable and may contain breaking changes in subsequent releases, it is recommended to install it to access the new reinforcement learning environments and familiarize yourself with new changes (see the [latest pull requests](https://github.com/Pabloo22/job_shop_lib/pulls?q=is%3Apr+is%3Aclosed)). There is a [documentation page](https://job-shop-lib.readthedocs.io/en/latest/) for versions 1.0.0a3 and onward.
@@ -19,7 +19,7 @@ from job_shop_lib._schedule import Schedule
19
19
  from job_shop_lib._base_solver import BaseSolver, Solver
20
20
 
21
21
 
22
- __version__ = "1.0.0-b.4"
22
+ __version__ = "1.0.0-b.5"
23
23
 
24
24
  __all__ = [
25
25
  "Operation",
@@ -1,6 +1,6 @@
1
1
  """Contains wrappers for the environments."""
2
2
 
3
- from typing import TypeVar, TypedDict
3
+ from typing import TypeVar, TypedDict, Generic
4
4
  from gymnasium import ObservationWrapper
5
5
  import numpy as np
6
6
  from numpy.typing import NDArray
@@ -12,11 +12,13 @@ from job_shop_lib.reinforcement_learning import (
12
12
  create_edge_type_dict,
13
13
  map_values,
14
14
  )
15
- from job_shop_lib.graphs import NodeType, JobShopGraph
16
- from job_shop_lib.exceptions import ValidationError
15
+ from job_shop_lib.graphs import NodeType
17
16
  from job_shop_lib.dispatching.feature_observers import FeatureType
18
17
 
19
18
  T = TypeVar("T", bound=np.number)
19
+ EnvType = TypeVar( # pylint: disable=invalid-name
20
+ "EnvType", bound=SingleJobShopGraphEnv | MultiJobShopGraphEnv
21
+ )
20
22
 
21
23
 
22
24
  class ResourceTaskGraphObservationDict(TypedDict):
@@ -28,7 +30,7 @@ class ResourceTaskGraphObservationDict(TypedDict):
28
30
 
29
31
 
30
32
  # pylint: disable=line-too-long
31
- class ResourceTaskGraphObservation(ObservationWrapper):
33
+ class ResourceTaskGraphObservation(ObservationWrapper, Generic[EnvType]):
32
34
  """Observation wrapper that converts an observation following the
33
35
  :class:`ObservationDict` format to a format suitable to PyG's
34
36
  [`HeteroData`](https://pytorch-geometric.readthedocs.io/en/latest/generated/torch_geometric.data.HeteroData.html).
@@ -48,26 +50,12 @@ class ResourceTaskGraphObservation(ObservationWrapper):
48
50
  env: The environment to wrap.
49
51
  """
50
52
 
51
- def __init__(self, env: SingleJobShopGraphEnv | MultiJobShopGraphEnv):
53
+ def __init__(self, env: EnvType):
52
54
  super().__init__(env)
55
+ self.env = env # Unnecessary, but makes mypy happy
53
56
  self.global_to_local_id = self._compute_id_mappings()
54
57
  self.type_ranges = self._compute_node_type_ranges()
55
58
 
56
- @property
57
- def job_shop_graph(self) -> JobShopGraph:
58
- """Returns the job shop graph from the environment.
59
-
60
- Raises:
61
- ValidationError: If the environment is not an instance of
62
- ``SingleJobShopGraphEnv`` or ``MultiJobShopGraphEnv``.
63
- """
64
- if isinstance(self.env, (SingleJobShopGraphEnv, MultiJobShopGraphEnv)):
65
- return self.env.job_shop_graph
66
- raise ValidationError(
67
- "The environment must be an instance of "
68
- "SingleJobShopGraphEnv or MultiJobShopGraphEnv"
69
- )
70
-
71
59
  def step(self, action: tuple[int, int]):
72
60
  """Takes a step in the environment.
73
61
 
@@ -127,7 +115,7 @@ class ResourceTaskGraphObservation(ObservationWrapper):
127
115
  """
128
116
  mappings = {}
129
117
  for node_type in NodeType:
130
- type_nodes = self.job_shop_graph.nodes_by_type[node_type]
118
+ type_nodes = self.unwrapped.job_shop_graph.nodes_by_type[node_type]
131
119
  if not type_nodes:
132
120
  continue
133
121
  # Create mapping from global ID to local ID
@@ -148,7 +136,7 @@ class ResourceTaskGraphObservation(ObservationWrapper):
148
136
  """
149
137
  type_ranges = {}
150
138
  for node_type in NodeType:
151
- type_nodes = self.job_shop_graph.nodes_by_type[node_type]
139
+ type_nodes = self.unwrapped.job_shop_graph.nodes_by_type[node_type]
152
140
  if not type_nodes:
153
141
  continue
154
142
  start = min(node.node_id for node in type_nodes)
@@ -197,7 +185,7 @@ class ResourceTaskGraphObservation(ObservationWrapper):
197
185
  }
198
186
  node_features_dict = {}
199
187
  for node_type, feature_type in node_type_to_feature_type.items():
200
- if node_type in self.job_shop_graph.nodes_by_type:
188
+ if node_type in self.unwrapped.job_shop_graph.nodes_by_type:
201
189
  node_features_dict[feature_type.value] = observation[
202
190
  feature_type.value
203
191
  ]
@@ -210,7 +198,7 @@ class ResourceTaskGraphObservation(ObservationWrapper):
210
198
  ]
211
199
  job_ids_of_ops = [
212
200
  node.operation.job_id
213
- for node in self.job_shop_graph.nodes_by_type[
201
+ for node in self.unwrapped.job_shop_graph.nodes_by_type[
214
202
  NodeType.OPERATION
215
203
  ]
216
204
  ]
@@ -256,3 +244,8 @@ class ResourceTaskGraphObservation(ObservationWrapper):
256
244
  )[0]
257
245
 
258
246
  return removed_nodes_dict, original_ids_dict
247
+
248
+ @property
249
+ def unwrapped(self) -> EnvType:
250
+ """Returns the unwrapped environment."""
251
+ return self.env # type: ignore[return-value]
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "job-shop-lib"
3
- version = "1.0.0-beta.4"
3
+ version = "1.0.0-beta.5"
4
4
  description = "An easy-to-use and modular Python library for the Job Shop Scheduling Problem (JSSP)"
5
5
  authors = ["Pabloo22 <pablete.arino@gmail.com>"]
6
6
  license = "MIT"
File without changes