11from pathlib import Path
22from .Problem import ProblemVariant
33from .machine import MachineInstance
4- from . project import ProjectInstance
4+ from functools import partial
55
6- from pyjobshop import ProblemData
6+ from pyjobshop import ProblemData , read as _read
77
88
99def read (loc : Path , problem : ProblemVariant ) -> ProblemData :
1010 """
1111 Reads a problem instance from file and returns a ProblemData instance.
1212 """
13- parse_methods = {
13+ machine_variants = {
1414 ProblemVariant .JSP : MachineInstance .parse_jsp ,
1515 ProblemVariant .FJSP : MachineInstance .parse_fjsp ,
1616 ProblemVariant .HFSP : MachineInstance .parse_hfsp ,
@@ -23,15 +23,21 @@ def read(loc: Path, problem: ProblemVariant) -> ProblemData:
2323 ProblemVariant .TCT_PFSP : MachineInstance .parse_tct_pfsp ,
2424 ProblemVariant .TT_PFSP : MachineInstance .parse_tt_pfsp ,
2525 ProblemVariant .DPFSP : MachineInstance .parse_dpfsp ,
26- # Project scheduling problems have instance-format specific parsers.
27- ProblemVariant .RCPSP : ProjectInstance .parse_patterson ,
28- ProblemVariant .MMRCPSP : ProjectInstance .parse_psplib ,
29- ProblemVariant .RCMPSP : ProjectInstance .parse_mplib ,
3026 }
27+ project_variants = {
28+ # Project scheduling problems have instance-format specific parsers,
29+ # which are already supported directly by PyJobShop's read function.
30+ ProblemVariant .RCPSP : partial (_read , instance_format = "patterson" ),
31+ ProblemVariant .MMRCPSP : partial (_read , instance_format = "psplib" ),
32+ ProblemVariant .RCMPSP : partial (_read , instance_format = "psplib" ),
33+ ProblemVariant .ASLIB : partial (_read , instance_format = "aslib" ),
34+ }
35+
36+ if problem in machine_variants :
37+ instance = machine_variants [problem ](loc )
38+ return instance .data ()
3139
32- parse_method = parse_methods .get (problem )
33- if parse_method is None :
34- raise ValueError (f"Unsupported problem type: { problem } " )
40+ if problem in project_variants :
41+ return project_variants [problem ](loc )
3542
36- instance = parse_method (loc )
37- return instance .data ()
43+ raise ValueError (f"Unsupported problem type: { problem } " )
0 commit comments