Skip to content

Commit b82f70c

Browse files
committed
Implement more compression formats.
1 parent 0c53815 commit b82f70c

File tree

3 files changed

+18
-7
lines changed

3 files changed

+18
-7
lines changed

Project.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ version = "0.20.0"
55

66
[deps]
77
Calculus = "49dc2e85-a5d0-5ad3-a950-438e2897f1b9"
8+
CodecBzip2 = "523fee87-0ab8-5b00-afb7-3ecf72e48cfd"
9+
CodecXz = "ba30903b-d9e8-5048-a5ec-d1f5b0d4b47b"
810
CodecZlib = "944b1d66-785c-5afd-91f1-9de20f533193"
911
DataStructures = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8"
1012
ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210"
@@ -13,7 +15,6 @@ MathOptFormat = "f4570300-c277-12e8-125c-4912f86ce65d"
1315
MathOptInterface = "b8f27783-ece8-5eb3-8dc8-9495eed66fee"
1416
NaNMath = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3"
1517
Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
16-
Revise = "295af30f-e4ad-537b-8983-00126c2a3abe"
1718
SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"
1819
Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2"
1920

src/JuMP.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ import MathOptInterface
1717
const MOI = MathOptInterface
1818
const MOIU = MOI.Utilities
1919
using MathOptFormat
20+
import CodecBzip2
21+
import CodecXz
2022
import CodecZlib
2123

2224
import Calculus

src/file_formats.jl

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,15 @@ end
2222
List of accepted export compression formats. `AUTOMATIC_FILE_COMPRESSION`
2323
corresponds to a detection from the file name.
2424
"""
25-
@enum(FileCompression, NO_FILE_COMPRESSION, GZIP, AUTOMATIC_FILE_COMPRESSION)
25+
@enum(FileCompression, NO_FILE_COMPRESSION, BZIP2, GZIP, XZ, AUTOMATIC_FILE_COMPRESSION)
2626

2727
function _filename_to_compression(filename::String)
28-
return if endswith(filename, ".gz")
28+
return if endswith(filename, ".bz2")
29+
BZIP2
30+
elseif endswith(filename, ".gz")
2931
GZIP
32+
elseif endswith(filename, ".xz")
33+
XZ
3034
else
3135
NO_FILE_COMPRESSION
3236
end
@@ -37,8 +41,14 @@ function _open(f::Function, filename::String, mode::String; compression::FileCom
3741
compression = _filename_to_compression(filename)
3842
end
3943

40-
if compression == GZIP
41-
stream = (mode == "r") ? CodecZlib.GzipDecompressorStream : CodecZlib.GzipCompressorStream
44+
if compression == BZIP2 || compression == GZIP || compression == XZ
45+
stream = if compression == BZIP2
46+
(mode == "r") ? CodecBzip2.Bzip2DecompressorStream : CodecBzip2.Bzip2CompressorStream
47+
elseif compression == GZIP
48+
(mode == "r") ? CodecZlib.GzipDecompressorStream : CodecZlib.GzipCompressorStream
49+
else # compression == XZ
50+
(mode == "r") ? CodecXz.XzDecompressorStream : CodecXz.XzCompressorStream
51+
end
4252
return open(f, stream, filename, mode)
4353
else
4454
return open(f, filename, mode)
@@ -77,8 +87,6 @@ function write_to_file(model::Model, filename::String; format::FileFormat=AUTOMA
7787
format = _filename_to_format(filename)
7888
end
7989

80-
# println((filename, "w", compression))
81-
8290
_open(filename, "w", compression=compression) do io
8391
write_to_file(model, io, format; kwargs...)
8492
end

0 commit comments

Comments
 (0)