11"""
22 read_instance(dataset::Dataset, name::String)
33
4- Read the instance identified by `name` from a given `dataset` and return a `QPSReader.QPSData` object.
4+ Read the instance identified by `name` from a given `dataset`.
5+
6+ Return a tuple `(data, path)` where `data isa QPSReader.QPSData` is an object created by [QPSReader.jl](https://github.com/JuliaSmoothOptimizers/QPSReader.jl) and `path` is the path to the MPS file.
57
68# See also
79
@@ -25,7 +27,7 @@ function read_miplib2017_instance(name::String)
2527 end
2628 name = lowercase (name)
2729 mps_gz_path = joinpath (folder, " $name .mps.gz" )
28- return read_mps (mps_gz_path)
30+ return read_mps (mps_gz_path; scratch_subfolder = " miplib2017 " )
2931end
3032
3133function read_netlib_instance (name:: String )
@@ -38,35 +40,41 @@ function read_netlib_instance(name::String)
3840 end
3941 netlib_path = fetch_netlib ()
4042 sif_path = joinpath (netlib_path, " $name .SIF" )
41- return read_mps (sif_path; mpsformat)
43+ return read_mps (sif_path; scratch_subfolder = " netlib " , mpsformat)
4244end
4345
4446function read_mittelmann_lp_instance (name:: String )
45- folder_path = @datadep_str (" mittelmann-lp- $name " )
46- path1 = joinpath (folder_path, " $name .mps.bz2" )
47- path2 = joinpath (folder_path, " $name .bz2" )
48- if ispath (path1 )
49- return read_mps (path1 )
47+ folder_path = @datadep_str (" mittelmann-lp" )
48+ mps_bz2_path1 = joinpath (folder_path, " $name .mps.bz2" )
49+ mps_bz2_path2 = joinpath (folder_path, " $name .bz2" )
50+ if ispath (mps_bz2_path1 )
51+ return read_mps (mps_bz2_path1; scratch_subfolder = " mittelman-lp " )
5052 else
51- return read_mps (path2 )
53+ return read_mps (mps_bz2_path2; scratch_subfolder = " mittelman-lp " )
5254 end
5355end
5456
55- function read_mps (path:: String ; mpsformat:: Symbol = :free )
56- if endswith (path, " .mps.gz" )
57- contents = GZip. open (path, " r" ) do f
58- read (f, String)
59- end
60- mps_path = string (tempname (), " .mps" )
61- open (mps_path, " w" ) do f
62- write (f, contents)
63- end
64- elseif endswith (path, " .bz2" ) || endswith (path, " .mps.bz2" )
65- compressed = CodecBzip2. read (path)
66- contents = String (CodecBzip2. transcode (CodecBzip2. Bzip2Decompressor, compressed))
67- mps_path = string (tempname (), " .mps" )
68- open (mps_path, " w" ) do f
69- write (f, contents)
57+ function read_mps (path:: String ; scratch_subfolder:: String , mpsformat:: Symbol = :free )
58+ name = splitext (splitext (splitpath (path)[end ])[1 ])[1 ]
59+ if ! isdir (joinpath (MPS_SCRATCH, scratch_subfolder))
60+ mkdir (joinpath (MPS_SCRATCH, scratch_subfolder))
61+ end
62+ if endswith (path, " .gz" ) || endswith (path, " .bz2" )
63+ mps_path = joinpath (MPS_SCRATCH, scratch_subfolder, " $name .mps" )
64+ if ! ispath (mps_path)
65+ if endswith (path, " .mps.gz" )
66+ contents = GZip. open (path, " r" ) do f
67+ read (f, String)
68+ end
69+ elseif endswith (path, " .mps.bz2" )
70+ compressed = CodecBzip2. read (path)
71+ contents = String (CodecBzip2. transcode (CodecBzip2. Bzip2Decompressor, compressed))
72+ elseif endswith (path, " .bz2" )
73+ throw (ArgumentError (" File at $path not supported" ))
74+ end
75+ open (mps_path, " w" ) do f
76+ write (f, contents)
77+ end
7078 end
7179 else
7280 @assert endswith (path, " .mps" ) || endswith (path, " .SIF" )
@@ -76,5 +84,5 @@ function read_mps(path::String; mpsformat::Symbol = :free)
7684 qps_data = with_logger (NullLogger ()) do
7785 readqps (mps_path; mpsformat)
7886 end
79- return qps_data
87+ return qps_data, mps_path
8088end
0 commit comments