job-shop-lib 1.6.0__tar.gz → 1.6.1__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 (79) hide show
  1. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/PKG-INFO +2 -3
  2. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/__init__.py +1 -1
  3. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/_schedule.py +13 -4
  4. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/pyproject.toml +2 -5
  5. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/LICENSE +0 -0
  6. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/README.md +0 -0
  7. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/_base_solver.py +0 -0
  8. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/_job_shop_instance.py +0 -0
  9. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/_operation.py +0 -0
  10. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/_scheduled_operation.py +0 -0
  11. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/benchmarking/__init__.py +0 -0
  12. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/benchmarking/_load_benchmark.py +0 -0
  13. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/benchmarking/benchmark_instances.json +0 -0
  14. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/constraint_programming/__init__.py +0 -0
  15. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/constraint_programming/_ortools_solver.py +0 -0
  16. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/dispatching/__init__.py +0 -0
  17. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/dispatching/_dispatcher.py +0 -0
  18. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/dispatching/_dispatcher_observer_config.py +0 -0
  19. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/dispatching/_factories.py +0 -0
  20. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/dispatching/_history_observer.py +0 -0
  21. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/dispatching/_optimal_operations_observer.py +0 -0
  22. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/dispatching/_ready_operation_filters.py +0 -0
  23. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/dispatching/_start_time_calculators.py +0 -0
  24. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/dispatching/_unscheduled_operations_observer.py +0 -0
  25. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/dispatching/feature_observers/__init__.py +0 -0
  26. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/dispatching/feature_observers/_composite_feature_observer.py +0 -0
  27. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/dispatching/feature_observers/_dates_observer.py +0 -0
  28. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/dispatching/feature_observers/_duration_observer.py +0 -0
  29. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/dispatching/feature_observers/_earliest_start_time_observer.py +0 -0
  30. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/dispatching/feature_observers/_factory.py +0 -0
  31. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/dispatching/feature_observers/_feature_observer.py +0 -0
  32. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/dispatching/feature_observers/_is_completed_observer.py +0 -0
  33. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/dispatching/feature_observers/_is_ready_observer.py +0 -0
  34. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/dispatching/feature_observers/_is_scheduled_observer.py +0 -0
  35. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/dispatching/feature_observers/_position_in_job_observer.py +0 -0
  36. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/dispatching/feature_observers/_remaining_operations_observer.py +0 -0
  37. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/dispatching/rules/__init__.py +0 -0
  38. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/dispatching/rules/_dispatching_rule_factory.py +0 -0
  39. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/dispatching/rules/_dispatching_rule_solver.py +0 -0
  40. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/dispatching/rules/_dispatching_rules_functions.py +0 -0
  41. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/dispatching/rules/_machine_chooser_factory.py +0 -0
  42. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/dispatching/rules/_utils.py +0 -0
  43. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/exceptions.py +0 -0
  44. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/generation/__init__.py +0 -0
  45. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/generation/_general_instance_generator.py +0 -0
  46. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/generation/_instance_generator.py +0 -0
  47. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/generation/_utils.py +0 -0
  48. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/graphs/__init__.py +0 -0
  49. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/graphs/_build_disjunctive_graph.py +0 -0
  50. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/graphs/_build_resource_task_graphs.py +0 -0
  51. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/graphs/_constants.py +0 -0
  52. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/graphs/_job_shop_graph.py +0 -0
  53. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/graphs/_node.py +0 -0
  54. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/graphs/graph_updaters/__init__.py +0 -0
  55. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/graphs/graph_updaters/_disjunctive_graph_updater.py +0 -0
  56. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/graphs/graph_updaters/_graph_updater.py +0 -0
  57. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/graphs/graph_updaters/_residual_graph_updater.py +0 -0
  58. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/graphs/graph_updaters/_utils.py +0 -0
  59. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/metaheuristics/__init__.py +0 -0
  60. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/metaheuristics/_job_shop_annealer.py +0 -0
  61. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/metaheuristics/_neighbor_generators.py +0 -0
  62. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/metaheuristics/_objective_functions.py +0 -0
  63. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/metaheuristics/_simulated_annealing_solver.py +0 -0
  64. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/py.typed +0 -0
  65. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/reinforcement_learning/__init__.py +0 -0
  66. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/reinforcement_learning/_multi_job_shop_graph_env.py +0 -0
  67. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/reinforcement_learning/_resource_task_graph_observation.py +0 -0
  68. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/reinforcement_learning/_reward_observers.py +0 -0
  69. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/reinforcement_learning/_single_job_shop_graph_env.py +0 -0
  70. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/reinforcement_learning/_types_and_constants.py +0 -0
  71. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/reinforcement_learning/_utils.py +0 -0
  72. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/visualization/__init__.py +0 -0
  73. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/visualization/gantt/__init__.py +0 -0
  74. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/visualization/gantt/_gantt_chart_creator.py +0 -0
  75. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/visualization/gantt/_gantt_chart_video_and_gif_creation.py +0 -0
  76. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/visualization/gantt/_plot_gantt_chart.py +0 -0
  77. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/visualization/graphs/__init__.py +0 -0
  78. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/job_shop_lib/visualization/graphs/_plot_disjunctive_graph.py +0 -0
  79. {job_shop_lib-1.6.0 → job_shop_lib-1.6.1}/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.6.0
3
+ Version: 1.6.1
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
@@ -17,8 +17,7 @@ Requires-Dist: imageio[ffmpeg] (>=2.34.1,<3.0.0)
17
17
  Requires-Dist: matplotlib (>=3,<4)
18
18
  Requires-Dist: networkx (>=3,<4)
19
19
  Requires-Dist: numpy (>=1.26.4,<3.0.0)
20
- Requires-Dist: ortools (>=9.9,<10.0) ; sys_platform != "darwin"
21
- Requires-Dist: ortools (>=9.9,<9.13) ; sys_platform == "darwin"
20
+ Requires-Dist: ortools (>=9.9,<9.13)
22
21
  Requires-Dist: pyarrow (>=15,<21)
23
22
  Requires-Dist: pygraphviz (>=1.12,<2.0) ; extra == "pygraphviz"
24
23
  Requires-Dist: simanneal (>=0.5.0,<0.6.0)
@@ -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.6.0"
22
+ __version__ = "1.6.1"
23
23
 
24
24
  __all__ = [
25
25
  "Operation",
@@ -405,10 +405,15 @@ class Schedule:
405
405
  critical_path = deque([last_scheduled_op])
406
406
  current_scheduled_op = last_scheduled_op
407
407
 
408
+ machine_op_index = {}
409
+ for machine_id, schedule_list in enumerate(self.schedule):
410
+ machine_op_index[machine_id] = {op: idx for idx, op in
411
+ enumerate(schedule_list)}
412
+
408
413
  # 2. Trace backwards from the last operation
409
414
  while True:
410
- job_pred = None
411
- machine_pred = None
415
+ job_pred: ScheduledOperation | None = None
416
+ machine_pred: ScheduledOperation | None = None
412
417
 
413
418
  # Find job predecessor (the previous operation in the same job)
414
419
  op_idx_in_job = current_scheduled_op.operation.position_in_job
@@ -423,9 +428,13 @@ class Schedule:
423
428
  # Find machine predecessor (the previous operation on the same
424
429
  # machine)
425
430
  machine_schedule = self.schedule[current_scheduled_op.machine_id]
426
- op_idx_on_machine = machine_schedule.index(current_scheduled_op)
431
+ op_idx_on_machine = (
432
+ machine_op_index
433
+ [current_scheduled_op.machine_id][current_scheduled_op])
427
434
  if op_idx_on_machine > 0:
428
- machine_pred = machine_schedule[op_idx_on_machine - 1]
435
+ machine_pred = machine_schedule[
436
+ op_idx_on_machine - 1
437
+ ]
429
438
 
430
439
  # 3. Determine the critical predecessor
431
440
  # The critical predecessor is the one that finished latest, as it
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "job-shop-lib"
3
- version = "1.6.0"
3
+ version = "1.6.1"
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"
@@ -10,10 +10,7 @@ include = ["job_shop_lib/benchmarking/benchmark_instances.json", "job_shop_lib/p
10
10
 
11
11
  [tool.poetry.dependencies]
12
12
  python = "^3.10"
13
- ortools = [
14
- { version = "^9.9", markers = "sys_platform != 'darwin'" },
15
- { version = ">=9.9,<9.13", markers = "sys_platform == 'darwin'" }
16
- ]
13
+ ortools = ">=9.9,<9.13"
17
14
  matplotlib = "^3"
18
15
  pyarrow = ">=15,<21" # An optional pandas' dependency that will be required in the future
19
16
  networkx = "^3"
File without changes
File without changes