parse-lp 3.0.0__tar.gz → 3.0.3__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.
- {parse_lp-3.0.0 → parse_lp-3.0.3}/Cargo.lock +218 -17
- {parse_lp-3.0.0 → parse_lp-3.0.3}/PKG-INFO +1 -1
- {parse_lp-3.0.0 → parse_lp-3.0.3}/python/Cargo.toml +1 -1
- {parse_lp-3.0.0 → parse_lp-3.0.3}/python/python/CHANGELOG.md +14 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/python/src/lib.rs +4 -1
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/Cargo.toml +10 -6
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/README.md +141 -12
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/rust/CHANGELOG.md +31 -0
- parse_lp-3.0.3/rust/src/bin/lp_parser/cli.rs +214 -0
- parse_lp-3.0.3/rust/src/bin/lp_parser/main.rs +625 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/src/builder.rs +23 -7
- parse_lp-3.0.3/rust/src/compat/lp_solvers.rs +531 -0
- parse_lp-3.0.3/rust/src/compat/mod.rs +2 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/src/context.rs +8 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/src/csv.rs +23 -1
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/src/error.rs +12 -4
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/src/lexer.rs +24 -21
- parse_lp-3.0.3/rust/src/lib.rs +61 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/src/model.rs +5 -9
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/src/problem.rs +69 -8
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/src/writer.rs +21 -13
- parse_lp-3.0.0/rust/tests/snapshots/test_nom_from_file__afiro.snap → parse_lp-3.0.3/rust/tests/snapshots/test_from_file__afiro.snap +1 -1
- parse_lp-3.0.0/rust/tests/snapshots/test_nom_from_file__afiro_ext.snap → parse_lp-3.0.3/rust/tests/snapshots/test_from_file__afiro_ext.snap +1 -1
- parse_lp-3.0.0/rust/tests/snapshots/test_nom_from_file__american_steel_problem.snap → parse_lp-3.0.3/rust/tests/snapshots/test_from_file__american_steel_problem.snap +1 -1
- parse_lp-3.0.0/rust/tests/snapshots/test_nom_from_file__beer_distribution_problem.snap → parse_lp-3.0.3/rust/tests/snapshots/test_from_file__beer_distribution_problem.snap +1 -1
- parse_lp-3.0.0/rust/tests/snapshots/test_nom_from_file__blank_lines.snap → parse_lp-3.0.3/rust/tests/snapshots/test_from_file__blank_lines.snap +1 -1
- parse_lp-3.0.0/rust/tests/snapshots/test_nom_from_file__boeing1.snap → parse_lp-3.0.3/rust/tests/snapshots/test_from_file__boeing1.snap +1 -1
- parse_lp-3.0.0/rust/tests/snapshots/test_nom_from_file__boeing2.snap → parse_lp-3.0.3/rust/tests/snapshots/test_from_file__boeing2.snap +1 -1
- parse_lp-3.0.0/rust/tests/snapshots/test_nom_from_file__complex_names.snap → parse_lp-3.0.3/rust/tests/snapshots/test_from_file__complex_names.snap +1 -1
- parse_lp-3.0.0/rust/tests/snapshots/test_nom_from_file__computer_plant_problem.snap → parse_lp-3.0.3/rust/tests/snapshots/test_from_file__computer_plant_problem.snap +1 -1
- parse_lp-3.0.0/rust/tests/snapshots/test_nom_from_file__cplex.snap → parse_lp-3.0.3/rust/tests/snapshots/test_from_file__cplex.snap +1 -1
- parse_lp-3.0.0/rust/tests/snapshots/test_nom_from_file__diet.snap → parse_lp-3.0.3/rust/tests/snapshots/test_from_file__diet.snap +1 -1
- parse_lp-3.0.0/rust/tests/snapshots/test_nom_from_file__empty_bounds.snap → parse_lp-3.0.3/rust/tests/snapshots/test_from_file__empty_bounds.snap +1 -1
- parse_lp-3.0.0/rust/tests/snapshots/test_nom_from_file__fit1d.snap → parse_lp-3.0.3/rust/tests/snapshots/test_from_file__fit1d.snap +1 -1
- parse_lp-3.0.0/rust/tests/snapshots/test_nom_from_file__infile_comments.snap → parse_lp-3.0.3/rust/tests/snapshots/test_from_file__infile_comments.snap +1 -1
- parse_lp-3.0.0/rust/tests/snapshots/test_nom_from_file__infile_comments2.snap → parse_lp-3.0.3/rust/tests/snapshots/test_from_file__infile_comments2.snap +1 -1
- parse_lp-3.0.0/rust/tests/snapshots/test_nom_from_file__kb2.snap → parse_lp-3.0.3/rust/tests/snapshots/test_from_file__kb2.snap +1 -1
- parse_lp-3.0.0/rust/tests/snapshots/test_nom_from_file__limbo.snap → parse_lp-3.0.3/rust/tests/snapshots/test_from_file__limbo.snap +1 -1
- parse_lp-3.0.0/rust/tests/snapshots/test_nom_from_file__lol.snap → parse_lp-3.0.3/rust/tests/snapshots/test_from_file__lol.snap +1 -1
- parse_lp-3.0.0/rust/tests/snapshots/test_nom_from_file__milo1.snap → parse_lp-3.0.3/rust/tests/snapshots/test_from_file__milo1.snap +1 -1
- parse_lp-3.0.0/rust/tests/snapshots/test_nom_from_file__missing_signs.snap → parse_lp-3.0.3/rust/tests/snapshots/test_from_file__missing_signs.snap +1 -1
- parse_lp-3.0.0/rust/tests/snapshots/test_nom_from_file__model.snap → parse_lp-3.0.3/rust/tests/snapshots/test_from_file__model.snap +1 -1
- parse_lp-3.0.0/rust/tests/snapshots/test_nom_from_file__model2.snap → parse_lp-3.0.3/rust/tests/snapshots/test_from_file__model2.snap +1 -1
- parse_lp-3.0.0/rust/tests/snapshots/test_nom_from_file__mosek.snap → parse_lp-3.0.3/rust/tests/snapshots/test_from_file__mosek.snap +1 -1
- parse_lp-3.0.0/rust/tests/snapshots/test_nom_from_file__mosek_bounds.snap → parse_lp-3.0.3/rust/tests/snapshots/test_from_file__mosek_bounds.snap +1 -1
- parse_lp-3.0.0/rust/tests/snapshots/test_nom_from_file__nom_fit2d.snap → parse_lp-3.0.3/rust/tests/snapshots/test_from_file__nom_fit2d.snap +1 -1
- parse_lp-3.0.0/rust/tests/snapshots/test_nom_from_file__obj3_2cons.snap → parse_lp-3.0.3/rust/tests/snapshots/test_from_file__obj3_2cons.snap +1 -1
- parse_lp-3.0.0/rust/tests/snapshots/test_nom_from_file__obj_1cons_all_variables_with_bounds.snap → parse_lp-3.0.3/rust/tests/snapshots/test_from_file__obj_1cons_all_variables_with_bounds.snap +1 -1
- parse_lp-3.0.0/rust/tests/snapshots/test_nom_from_file__obj_2cons_all_variable_types.snap → parse_lp-3.0.3/rust/tests/snapshots/test_from_file__obj_2cons_all_variable_types.snap +1 -1
- parse_lp-3.0.0/rust/tests/snapshots/test_nom_from_file__obj_2cons_only_binary_vars.snap → parse_lp-3.0.3/rust/tests/snapshots/test_from_file__obj_2cons_only_binary_vars.snap +1 -1
- parse_lp-3.0.0/rust/tests/snapshots/test_nom_from_file__output.snap → parse_lp-3.0.3/rust/tests/snapshots/test_from_file__output.snap +1 -1
- parse_lp-3.0.0/rust/tests/snapshots/test_nom_from_file__output2_1.snap → parse_lp-3.0.3/rust/tests/snapshots/test_from_file__output2_1.snap +1 -1
- parse_lp-3.0.0/rust/tests/snapshots/test_nom_from_file__output2_2.snap → parse_lp-3.0.3/rust/tests/snapshots/test_from_file__output2_2.snap +1 -1
- parse_lp-3.0.0/rust/tests/snapshots/test_nom_from_file__output2_3.snap → parse_lp-3.0.3/rust/tests/snapshots/test_from_file__output2_3.snap +1 -1
- parse_lp-3.0.0/rust/tests/snapshots/test_nom_from_file__output2_4.snap → parse_lp-3.0.3/rust/tests/snapshots/test_from_file__output2_4.snap +1 -1
- parse_lp-3.0.0/rust/tests/snapshots/test_nom_from_file__pulp.snap → parse_lp-3.0.3/rust/tests/snapshots/test_from_file__pulp.snap +1 -1
- parse_lp-3.0.0/rust/tests/snapshots/test_nom_from_file__test2.snap → parse_lp-3.0.3/rust/tests/snapshots/test_from_file__pulp2.snap +1 -1
- parse_lp-3.0.0/rust/tests/snapshots/test_nom_from_file__sc50a.snap → parse_lp-3.0.3/rust/tests/snapshots/test_from_file__sc50a.snap +1 -1
- parse_lp-3.0.0/rust/tests/snapshots/test_nom_from_file__scientific_notation.snap → parse_lp-3.0.3/rust/tests/snapshots/test_from_file__scientific_notation.snap +1 -1
- parse_lp-3.0.0/rust/tests/snapshots/test_nom_from_file__scientific_notation_2.snap → parse_lp-3.0.3/rust/tests/snapshots/test_from_file__scientific_notation_2.snap +1 -1
- parse_lp-3.0.0/rust/tests/snapshots/test_nom_from_file__sos.snap → parse_lp-3.0.3/rust/tests/snapshots/test_from_file__sos.snap +1 -1
- parse_lp-3.0.0/rust/tests/snapshots/test_nom_from_file__sudoku.snap → parse_lp-3.0.3/rust/tests/snapshots/test_from_file__sudoku.snap +1 -1
- parse_lp-3.0.0/rust/tests/snapshots/test_nom_from_file__test.snap → parse_lp-3.0.3/rust/tests/snapshots/test_from_file__test.snap +1 -1
- parse_lp-3.0.0/rust/tests/snapshots/test_nom_from_file__pulp2.snap → parse_lp-3.0.3/rust/tests/snapshots/test_from_file__test2.snap +1 -1
- parse_lp-3.0.0/rust/tests/snapshots/test_nom_from_file__wbm.snap → parse_lp-3.0.3/rust/tests/snapshots/test_from_file__wbm.snap +1 -1
- parse_lp-3.0.0/rust/tests/snapshots/test_nom_from_file__whiskas_model_2.snap → parse_lp-3.0.3/rust/tests/snapshots/test_from_file__whiskas_model_2.snap +1 -1
- parse_lp-3.0.0/rust/tests/test_nom_from_file.rs → parse_lp-3.0.3/rust/tests/test_from_file.rs +0 -2
- parse_lp-3.0.3/rust/tests/test_lp_solvers_compat.rs +78 -0
- parse_lp-3.0.0/rust/src/bin/main.rs +0 -111
- parse_lp-3.0.0/rust/src/lib.rs +0 -94
- parse_lp-3.0.0/rust/src/perf.rs +0 -376
- {parse_lp-3.0.0 → parse_lp-3.0.3}/Cargo.toml +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/LICENSE-APACHE +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/README.md +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/parse_lp/__init__.py +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/parse_lp/parse_lp.pyi +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/parse_lp/py.typed +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/pyproject.toml +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/python/.cargo/config.toml +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/python/.gitignore +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/python/CHANGELOG.md +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/python/LICENSE-APACHE +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/python/MANIFEST.in +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/python/Makefile +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/python/README.md +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/python/parse_lp/__init__.py +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/python/parse_lp/parse_lp.pyi +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/python/parse_lp/py.typed +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/python/resources/afiro.lp +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/python/tests/__init__.py +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/python/tests/conftest.py +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/python/tests/fixtures/afiro.lp +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/python/tests/fixtures/minimize.lp +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/python/tests/fixtures/simple.lp +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/python/tests/test_csv_writer.py +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/python/tests/test_lp_parser.py +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/python/tests/test_lp_writer.py +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/python/uv.lock +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/CHANGELOG.md +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/build.rs +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/1obj_1cons_all_variables_with_bounds.lp +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/2obj_2cons_all_variable_types.lp +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/2obj_2cons_only_binary_vars.lp +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/3obj_2cons.lp +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/AmericanSteelProblem.lp +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/BeerDistributionProblem.lp +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/ComputerPlantProblem.lp +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/WhiskasModel2.lp +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/afiro.lp +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/afiro_ext.lp +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/blank_lines.lp +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/boeing1.lp +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/boeing2.lp +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/complex_names.lp +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/corrupt.lp +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/cplex.lp +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/diet.lp +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/empty_bounds.lp +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/fit1d.lp +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/fit2d.lp +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/infile_comments.lp +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/infile_comments2.lp +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/invalid.lp +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/kb2.lp +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/limbo.lp +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/lol.lp +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/milo1.lp +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/missing_signs.lp +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/model.lp +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/model2.lp +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/mosek.lp +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/mosek_bounds.lp +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/no_end_section.lp +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/optional_labels.lp +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/output.lp +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/output2_1.lp +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/output2_2.lp +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/output2_3.lp +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/output2_4.lp +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/output_cplex_2.lp +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/pulp.lp +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/pulp2.lp +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/sc50a.lp +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/scientific_notation.lp +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/scientific_notation_2.lp +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/semi_continuous.lp +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/sos.lp +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/sudoku.lp +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/test.lp +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/test2.lp +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/test_copy.lp +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/wbm.lp +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/src/lp.lalrpop +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/src/parser.rs +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/src/snapshots/lp_parser_rs__problem__test__complete_input.snap +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/src/snapshots/lp_parser_rs__problem__test__minified_example.snap +0 -0
- {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/src/snapshots/lp_parser_rs__problem__test__small_input.snap +0 -0
|
@@ -11,6 +11,56 @@ dependencies = [
|
|
|
11
11
|
"memchr",
|
|
12
12
|
]
|
|
13
13
|
|
|
14
|
+
[[package]]
|
|
15
|
+
name = "anstream"
|
|
16
|
+
version = "0.6.21"
|
|
17
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
18
|
+
checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a"
|
|
19
|
+
dependencies = [
|
|
20
|
+
"anstyle",
|
|
21
|
+
"anstyle-parse",
|
|
22
|
+
"anstyle-query",
|
|
23
|
+
"anstyle-wincon",
|
|
24
|
+
"colorchoice",
|
|
25
|
+
"is_terminal_polyfill",
|
|
26
|
+
"utf8parse",
|
|
27
|
+
]
|
|
28
|
+
|
|
29
|
+
[[package]]
|
|
30
|
+
name = "anstyle"
|
|
31
|
+
version = "1.0.13"
|
|
32
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
33
|
+
checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78"
|
|
34
|
+
|
|
35
|
+
[[package]]
|
|
36
|
+
name = "anstyle-parse"
|
|
37
|
+
version = "0.2.7"
|
|
38
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
39
|
+
checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2"
|
|
40
|
+
dependencies = [
|
|
41
|
+
"utf8parse",
|
|
42
|
+
]
|
|
43
|
+
|
|
44
|
+
[[package]]
|
|
45
|
+
name = "anstyle-query"
|
|
46
|
+
version = "1.1.5"
|
|
47
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
48
|
+
checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc"
|
|
49
|
+
dependencies = [
|
|
50
|
+
"windows-sys 0.61.2",
|
|
51
|
+
]
|
|
52
|
+
|
|
53
|
+
[[package]]
|
|
54
|
+
name = "anstyle-wincon"
|
|
55
|
+
version = "3.0.11"
|
|
56
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
57
|
+
checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d"
|
|
58
|
+
dependencies = [
|
|
59
|
+
"anstyle",
|
|
60
|
+
"once_cell_polyfill",
|
|
61
|
+
"windows-sys 0.61.2",
|
|
62
|
+
]
|
|
63
|
+
|
|
14
64
|
[[package]]
|
|
15
65
|
name = "ascii-canvas"
|
|
16
66
|
version = "4.0.0"
|
|
@@ -90,6 +140,52 @@ version = "1.0.4"
|
|
|
90
140
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
91
141
|
checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
|
|
92
142
|
|
|
143
|
+
[[package]]
|
|
144
|
+
name = "clap"
|
|
145
|
+
version = "4.5.53"
|
|
146
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
147
|
+
checksum = "c9e340e012a1bf4935f5282ed1436d1489548e8f72308207ea5df0e23d2d03f8"
|
|
148
|
+
dependencies = [
|
|
149
|
+
"clap_builder",
|
|
150
|
+
"clap_derive",
|
|
151
|
+
]
|
|
152
|
+
|
|
153
|
+
[[package]]
|
|
154
|
+
name = "clap_builder"
|
|
155
|
+
version = "4.5.53"
|
|
156
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
157
|
+
checksum = "d76b5d13eaa18c901fd2f7fca939fefe3a0727a953561fefdf3b2922b8569d00"
|
|
158
|
+
dependencies = [
|
|
159
|
+
"anstream",
|
|
160
|
+
"anstyle",
|
|
161
|
+
"clap_lex",
|
|
162
|
+
"strsim",
|
|
163
|
+
]
|
|
164
|
+
|
|
165
|
+
[[package]]
|
|
166
|
+
name = "clap_derive"
|
|
167
|
+
version = "4.5.49"
|
|
168
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
169
|
+
checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671"
|
|
170
|
+
dependencies = [
|
|
171
|
+
"heck",
|
|
172
|
+
"proc-macro2",
|
|
173
|
+
"quote",
|
|
174
|
+
"syn 2.0.111",
|
|
175
|
+
]
|
|
176
|
+
|
|
177
|
+
[[package]]
|
|
178
|
+
name = "clap_lex"
|
|
179
|
+
version = "0.7.6"
|
|
180
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
181
|
+
checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d"
|
|
182
|
+
|
|
183
|
+
[[package]]
|
|
184
|
+
name = "colorchoice"
|
|
185
|
+
version = "1.0.4"
|
|
186
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
187
|
+
checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75"
|
|
188
|
+
|
|
93
189
|
[[package]]
|
|
94
190
|
name = "console"
|
|
95
191
|
version = "0.15.11"
|
|
@@ -201,6 +297,22 @@ version = "1.0.2"
|
|
|
201
297
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
202
298
|
checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
|
|
203
299
|
|
|
300
|
+
[[package]]
|
|
301
|
+
name = "errno"
|
|
302
|
+
version = "0.3.14"
|
|
303
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
304
|
+
checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
|
|
305
|
+
dependencies = [
|
|
306
|
+
"libc",
|
|
307
|
+
"windows-sys 0.61.2",
|
|
308
|
+
]
|
|
309
|
+
|
|
310
|
+
[[package]]
|
|
311
|
+
name = "fastrand"
|
|
312
|
+
version = "2.3.0"
|
|
313
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
314
|
+
checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
|
|
315
|
+
|
|
204
316
|
[[package]]
|
|
205
317
|
name = "fixedbitset"
|
|
206
318
|
version = "0.5.7"
|
|
@@ -286,6 +398,12 @@ dependencies = [
|
|
|
286
398
|
"similar",
|
|
287
399
|
]
|
|
288
400
|
|
|
401
|
+
[[package]]
|
|
402
|
+
name = "is_terminal_polyfill"
|
|
403
|
+
version = "1.70.2"
|
|
404
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
405
|
+
checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695"
|
|
406
|
+
|
|
289
407
|
[[package]]
|
|
290
408
|
name = "itertools"
|
|
291
409
|
version = "0.14.0"
|
|
@@ -352,18 +470,18 @@ dependencies = [
|
|
|
352
470
|
"rustversion",
|
|
353
471
|
]
|
|
354
472
|
|
|
355
|
-
[[package]]
|
|
356
|
-
name = "lazy_static"
|
|
357
|
-
version = "1.5.0"
|
|
358
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
359
|
-
checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
|
|
360
|
-
|
|
361
473
|
[[package]]
|
|
362
474
|
name = "libc"
|
|
363
475
|
version = "0.2.178"
|
|
364
476
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
365
477
|
checksum = "37c93d8daa9d8a012fd8ab92f088405fb202ea0b6ab73ee2482ae66af4f42091"
|
|
366
478
|
|
|
479
|
+
[[package]]
|
|
480
|
+
name = "linux-raw-sys"
|
|
481
|
+
version = "0.11.0"
|
|
482
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
483
|
+
checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039"
|
|
484
|
+
|
|
367
485
|
[[package]]
|
|
368
486
|
name = "lock_api"
|
|
369
487
|
version = "0.4.14"
|
|
@@ -381,24 +499,24 @@ checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897"
|
|
|
381
499
|
|
|
382
500
|
[[package]]
|
|
383
501
|
name = "logos"
|
|
384
|
-
version = "0.
|
|
502
|
+
version = "0.16.0"
|
|
385
503
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
386
|
-
checksum = "
|
|
504
|
+
checksum = "a790d11254054e5dc83902dba85d253ff06ceb0cfafb12be8773435cb9dfb4f4"
|
|
387
505
|
dependencies = [
|
|
388
506
|
"logos-derive",
|
|
389
507
|
]
|
|
390
508
|
|
|
391
509
|
[[package]]
|
|
392
510
|
name = "logos-codegen"
|
|
393
|
-
version = "0.
|
|
511
|
+
version = "0.16.0"
|
|
394
512
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
395
|
-
checksum = "
|
|
513
|
+
checksum = "f60337c43a38313b58871f8d5d76872b8e17aa9d51fad494b5e76092c0ce05f5"
|
|
396
514
|
dependencies = [
|
|
397
515
|
"beef",
|
|
398
516
|
"fnv",
|
|
399
|
-
"lazy_static",
|
|
400
517
|
"proc-macro2",
|
|
401
518
|
"quote",
|
|
519
|
+
"regex-automata",
|
|
402
520
|
"regex-syntax",
|
|
403
521
|
"rustc_version",
|
|
404
522
|
"syn 2.0.111",
|
|
@@ -406,17 +524,28 @@ dependencies = [
|
|
|
406
524
|
|
|
407
525
|
[[package]]
|
|
408
526
|
name = "logos-derive"
|
|
409
|
-
version = "0.
|
|
527
|
+
version = "0.16.0"
|
|
410
528
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
411
|
-
checksum = "
|
|
529
|
+
checksum = "d151b2ae667f69e10b8738f5cac0c746faa22b2e15ea7e83b55476afec3767dc"
|
|
412
530
|
dependencies = [
|
|
413
531
|
"logos-codegen",
|
|
414
532
|
]
|
|
415
533
|
|
|
534
|
+
[[package]]
|
|
535
|
+
name = "lp-solvers"
|
|
536
|
+
version = "1.1.0"
|
|
537
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
538
|
+
checksum = "66359e50c955cfdb8a21a45289cfd2599ec4aaae1aa812a2dbebabdd8d9c185f"
|
|
539
|
+
dependencies = [
|
|
540
|
+
"quick-xml",
|
|
541
|
+
"tempfile",
|
|
542
|
+
]
|
|
543
|
+
|
|
416
544
|
[[package]]
|
|
417
545
|
name = "lp_parser_rs"
|
|
418
|
-
version = "3.0.
|
|
546
|
+
version = "3.0.3"
|
|
419
547
|
dependencies = [
|
|
548
|
+
"clap",
|
|
420
549
|
"csv",
|
|
421
550
|
"diff-struct",
|
|
422
551
|
"float_eq",
|
|
@@ -425,10 +554,10 @@ dependencies = [
|
|
|
425
554
|
"lalrpop-util",
|
|
426
555
|
"log",
|
|
427
556
|
"logos",
|
|
428
|
-
"
|
|
557
|
+
"lp-solvers",
|
|
429
558
|
"serde",
|
|
430
559
|
"serde_json",
|
|
431
|
-
"
|
|
560
|
+
"serde_yaml",
|
|
432
561
|
"thiserror",
|
|
433
562
|
"unique_id",
|
|
434
563
|
]
|
|
@@ -533,6 +662,12 @@ version = "1.21.3"
|
|
|
533
662
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
534
663
|
checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
|
|
535
664
|
|
|
665
|
+
[[package]]
|
|
666
|
+
name = "once_cell_polyfill"
|
|
667
|
+
version = "1.70.2"
|
|
668
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
669
|
+
checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe"
|
|
670
|
+
|
|
536
671
|
[[package]]
|
|
537
672
|
name = "parking_lot"
|
|
538
673
|
version = "0.12.5"
|
|
@@ -558,7 +693,7 @@ dependencies = [
|
|
|
558
693
|
|
|
559
694
|
[[package]]
|
|
560
695
|
name = "parse_lp"
|
|
561
|
-
version = "3.0.
|
|
696
|
+
version = "3.0.3"
|
|
562
697
|
dependencies = [
|
|
563
698
|
"lp_parser_rs",
|
|
564
699
|
"pyo3",
|
|
@@ -714,6 +849,15 @@ dependencies = [
|
|
|
714
849
|
"syn 2.0.111",
|
|
715
850
|
]
|
|
716
851
|
|
|
852
|
+
[[package]]
|
|
853
|
+
name = "quick-xml"
|
|
854
|
+
version = "0.38.4"
|
|
855
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
856
|
+
checksum = "b66c2058c55a409d601666cffe35f04333cf1013010882cec174a7467cd4e21c"
|
|
857
|
+
dependencies = [
|
|
858
|
+
"memchr",
|
|
859
|
+
]
|
|
860
|
+
|
|
717
861
|
[[package]]
|
|
718
862
|
name = "quote"
|
|
719
863
|
version = "1.0.42"
|
|
@@ -776,6 +920,19 @@ dependencies = [
|
|
|
776
920
|
"semver",
|
|
777
921
|
]
|
|
778
922
|
|
|
923
|
+
[[package]]
|
|
924
|
+
name = "rustix"
|
|
925
|
+
version = "1.1.2"
|
|
926
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
927
|
+
checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e"
|
|
928
|
+
dependencies = [
|
|
929
|
+
"bitflags",
|
|
930
|
+
"errno",
|
|
931
|
+
"libc",
|
|
932
|
+
"linux-raw-sys",
|
|
933
|
+
"windows-sys 0.61.2",
|
|
934
|
+
]
|
|
935
|
+
|
|
779
936
|
[[package]]
|
|
780
937
|
name = "rustversion"
|
|
781
938
|
version = "1.0.22"
|
|
@@ -852,6 +1009,19 @@ dependencies = [
|
|
|
852
1009
|
"serde_core",
|
|
853
1010
|
]
|
|
854
1011
|
|
|
1012
|
+
[[package]]
|
|
1013
|
+
name = "serde_yaml"
|
|
1014
|
+
version = "0.9.34+deprecated"
|
|
1015
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1016
|
+
checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47"
|
|
1017
|
+
dependencies = [
|
|
1018
|
+
"indexmap",
|
|
1019
|
+
"itoa",
|
|
1020
|
+
"ryu",
|
|
1021
|
+
"serde",
|
|
1022
|
+
"unsafe-libyaml",
|
|
1023
|
+
]
|
|
1024
|
+
|
|
855
1025
|
[[package]]
|
|
856
1026
|
name = "sha2"
|
|
857
1027
|
version = "0.10.9"
|
|
@@ -903,6 +1073,12 @@ dependencies = [
|
|
|
903
1073
|
"precomputed-hash",
|
|
904
1074
|
]
|
|
905
1075
|
|
|
1076
|
+
[[package]]
|
|
1077
|
+
name = "strsim"
|
|
1078
|
+
version = "0.11.1"
|
|
1079
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1080
|
+
checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
|
|
1081
|
+
|
|
906
1082
|
[[package]]
|
|
907
1083
|
name = "syn"
|
|
908
1084
|
version = "1.0.109"
|
|
@@ -931,6 +1107,19 @@ version = "0.13.3"
|
|
|
931
1107
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
932
1108
|
checksum = "df7f62577c25e07834649fc3b39fafdc597c0a3527dc1c60129201ccfcbaa50c"
|
|
933
1109
|
|
|
1110
|
+
[[package]]
|
|
1111
|
+
name = "tempfile"
|
|
1112
|
+
version = "3.23.0"
|
|
1113
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1114
|
+
checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16"
|
|
1115
|
+
dependencies = [
|
|
1116
|
+
"fastrand",
|
|
1117
|
+
"getrandom",
|
|
1118
|
+
"once_cell",
|
|
1119
|
+
"rustix",
|
|
1120
|
+
"windows-sys 0.61.2",
|
|
1121
|
+
]
|
|
1122
|
+
|
|
934
1123
|
[[package]]
|
|
935
1124
|
name = "term"
|
|
936
1125
|
version = "1.2.1"
|
|
@@ -1000,6 +1189,18 @@ dependencies = [
|
|
|
1000
1189
|
"uuid",
|
|
1001
1190
|
]
|
|
1002
1191
|
|
|
1192
|
+
[[package]]
|
|
1193
|
+
name = "unsafe-libyaml"
|
|
1194
|
+
version = "0.2.11"
|
|
1195
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1196
|
+
checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861"
|
|
1197
|
+
|
|
1198
|
+
[[package]]
|
|
1199
|
+
name = "utf8parse"
|
|
1200
|
+
version = "0.2.2"
|
|
1201
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1202
|
+
checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
|
|
1203
|
+
|
|
1003
1204
|
[[package]]
|
|
1004
1205
|
name = "uuid"
|
|
1005
1206
|
version = "1.19.0"
|
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [3.0.3](https://github.com/dandxy89/lp_parser_rs/compare/parse_lp-v3.0.2...parse_lp-v3.0.3) (2025-12-11)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Code Refactoring
|
|
7
|
+
|
|
8
|
+
* Clippy ([#150](https://github.com/dandxy89/lp_parser_rs/issues/150)) ([0ec6a51](https://github.com/dandxy89/lp_parser_rs/commit/0ec6a510fe3bd3a9f6f52194de381a110ad19589))
|
|
9
|
+
|
|
10
|
+
## [3.0.2](https://github.com/dandxy89/lp_parser_rs/compare/parse_lp-v3.0.0...parse_lp-v3.0.2) (2025-12-07)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Miscellaneous Chores
|
|
14
|
+
|
|
15
|
+
* release 3.0.2 ([e6771bd](https://github.com/dandxy89/lp_parser_rs/commit/e6771bd29fda5fdb7fa4c424b7892b8fbd9678ea))
|
|
16
|
+
|
|
3
17
|
## [3.0.0](https://github.com/dandxy89/lp_parser_rs/compare/parse_lp-v2.6.2...parse_lp-v3.0.0) (2025-12-06)
|
|
4
18
|
|
|
5
19
|
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
// Allow pedantic lints that are unavoidable due to PyO3 macro requirements
|
|
2
|
+
#![allow(clippy::unnecessary_wraps, clippy::needless_pass_by_value, clippy::cast_possible_truncation, clippy::cast_possible_wrap)]
|
|
3
|
+
|
|
1
4
|
use std::borrow::Cow;
|
|
2
5
|
use std::path::{Path, PathBuf};
|
|
3
6
|
|
|
@@ -36,7 +39,7 @@ impl LpParser {
|
|
|
36
39
|
#[pyo3(text_signature = "($self)")]
|
|
37
40
|
fn parse(&mut self) -> PyResult<()> {
|
|
38
41
|
let input = parse_file(&PathBuf::from(&self.lp_file)).map_err(|_| PyRuntimeError::new_err("Unable to read LpFile."))?;
|
|
39
|
-
self.parsed_content = Some(input.
|
|
42
|
+
self.parsed_content = Some(input.clone());
|
|
40
43
|
Ok(())
|
|
41
44
|
}
|
|
42
45
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[package]
|
|
2
2
|
name = "lp_parser_rs"
|
|
3
|
-
version = "3.0.
|
|
3
|
+
version = "3.0.3"
|
|
4
4
|
edition = "2021"
|
|
5
5
|
authors = ["Dan Dixey", "Dan Dixey <dan@functorml.co.uk>"]
|
|
6
6
|
rust-version = "1.70.0"
|
|
@@ -26,17 +26,19 @@ doctest = false
|
|
|
26
26
|
|
|
27
27
|
[[bin]]
|
|
28
28
|
name = "lp_parser"
|
|
29
|
-
path = "src/bin/main.rs"
|
|
29
|
+
path = "src/bin/lp_parser/main.rs"
|
|
30
30
|
|
|
31
31
|
[dependencies]
|
|
32
|
+
clap = { version = "4.5", features = ["derive"] }
|
|
32
33
|
csv = { version = "1.4.0", optional = true }
|
|
33
34
|
diff-struct = { version = "0.5.3", optional = true }
|
|
34
35
|
lalrpop-util = "0.22.2"
|
|
36
|
+
lp-solvers = { version = "1.1", optional = true }
|
|
35
37
|
log = "0.4.29"
|
|
36
|
-
logos = "0.
|
|
37
|
-
memchr = "2.7.6"
|
|
38
|
+
logos = "0.16.0"
|
|
38
39
|
serde = { version = "1.0.228", features = ["derive"], optional = true }
|
|
39
|
-
|
|
40
|
+
serde_json = { version = "1.0", optional = true }
|
|
41
|
+
serde_yaml = { version = "0.9", optional = true }
|
|
40
42
|
thiserror = "2.0.17"
|
|
41
43
|
unique_id = { version = "0.1.7", features = ["sequence"] }
|
|
42
44
|
|
|
@@ -52,7 +54,9 @@ serde_json = "1.0.145"
|
|
|
52
54
|
csv = ["dep:csv"]
|
|
53
55
|
default = []
|
|
54
56
|
diff = ["dep:diff-struct", "serde"]
|
|
55
|
-
|
|
57
|
+
lp-solvers = ["dep:lp-solvers"]
|
|
58
|
+
serde = ["dep:serde", "dep:serde_json", "dep:serde_yaml"]
|
|
59
|
+
test-cbc = ["lp-solvers"]
|
|
56
60
|
|
|
57
61
|
[package.metadata.cargo-machete]
|
|
58
62
|
ignored = ["diff-struct"]
|
|
@@ -10,6 +10,8 @@
|
|
|
10
10
|
|
|
11
11
|
A robust Rust library for parsing, modifying, and writing Linear Programming (LP) files. Built on the [LALRPOP](https://github.com/lalrpop/lalrpop) parser generator, this crate provides comprehensive support for the LP file format with the ability to parse, programmatically modify, and regenerate LP files according to major industry specifications.
|
|
12
12
|
|
|
13
|
+
The Grammar is defined with the [lp.lalrpop](/rust/src/lp.lalrpop) file - should you be curious...
|
|
14
|
+
|
|
13
15
|
### Supported Specifications
|
|
14
16
|
|
|
15
17
|
- [IBM CPLEX v22.1.1](https://www.ibm.com/docs/en/icos/22.1.1?topic=cplex-lp-file-format-algebraic-representation)
|
|
@@ -54,21 +56,11 @@ Add to your `Cargo.toml`:
|
|
|
54
56
|
|
|
55
57
|
```toml
|
|
56
58
|
[dependencies]
|
|
57
|
-
lp_parser_rs = "
|
|
59
|
+
lp_parser_rs = "3.0.0" # x-release-please-version
|
|
58
60
|
```
|
|
59
61
|
|
|
60
62
|
### Basic Usage
|
|
61
63
|
|
|
62
|
-
Clone and run with a sample file:
|
|
63
|
-
|
|
64
|
-
```bash
|
|
65
|
-
git clone https://github.com/dandxy89/lp_parser_rs.git
|
|
66
|
-
# Parse a single LP file
|
|
67
|
-
cargo run --bin lp_parser --release -- {{ /path/to/your/file.lp }}
|
|
68
|
-
# Compare two LP files (enabling the 'diff' feature)
|
|
69
|
-
cargo run --bin lp_parser --release --features diff -- {{ /path/to/your/file.lp }} {{ /path/to/your/other/file.lp }}
|
|
70
|
-
```
|
|
71
|
-
|
|
72
64
|
Using the library directly:
|
|
73
65
|
|
|
74
66
|
```rust
|
|
@@ -127,9 +119,146 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|
|
127
119
|
|
|
128
120
|
```toml
|
|
129
121
|
[dependencies]
|
|
130
|
-
lp_parser_rs = { version = "
|
|
122
|
+
lp_parser_rs = { version = "3.0.0", features = ["serde", "diff"] } # x-release-please-version
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
## Command-Line Interface
|
|
126
|
+
|
|
127
|
+
The `lp_parser` binary provides a comprehensive CLI for working with LP files.
|
|
128
|
+
|
|
129
|
+
### Installation
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
# Install with all features
|
|
133
|
+
cargo install lp_parser_rs --all-features
|
|
134
|
+
|
|
135
|
+
# Or build from source
|
|
136
|
+
git clone https://github.com/dandxy89/lp_parser_rs.git
|
|
137
|
+
cd lp_parser_rs/rust
|
|
138
|
+
cargo build --release --all-features
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### Commands
|
|
142
|
+
|
|
143
|
+
```
|
|
144
|
+
lp_parser <COMMAND>
|
|
145
|
+
|
|
146
|
+
Commands:
|
|
147
|
+
parse Parse an LP file and display its structure
|
|
148
|
+
info Show detailed statistics about an LP problem
|
|
149
|
+
diff Compare two LP files (requires 'diff' feature)
|
|
150
|
+
convert Convert LP file to another format
|
|
151
|
+
solve Solve an LP problem using external solvers (requires 'lp-solvers' feature)
|
|
152
|
+
|
|
153
|
+
Global Options:
|
|
154
|
+
-v, --verbose Increase output verbosity
|
|
155
|
+
-q, --quiet Suppress non-essential output
|
|
156
|
+
-h, --help Print help
|
|
157
|
+
-V, --version Print version
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
### Examples
|
|
161
|
+
|
|
162
|
+
**Parse and display an LP file:**
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
lp_parser parse problem.lp
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
**Get problem statistics:**
|
|
169
|
+
|
|
170
|
+
```bash
|
|
171
|
+
lp_parser info problem.lp
|
|
172
|
+
# With detailed listings
|
|
173
|
+
lp_parser info problem.lp --variables --constraints --objectives
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
**Output as JSON or YAML:**
|
|
177
|
+
|
|
178
|
+
```bash
|
|
179
|
+
lp_parser info problem.lp --format json --pretty
|
|
180
|
+
lp_parser parse problem.lp --format yaml -o problem.yaml
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
**Compare two LP files:**
|
|
184
|
+
|
|
185
|
+
```bash
|
|
186
|
+
lp_parser diff old_model.lp new_model.lp
|
|
187
|
+
lp_parser diff old.lp new.lp --format json --pretty
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
**Convert between formats:**
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
# To LP (with formatting options)
|
|
194
|
+
lp_parser convert problem.lp --format lp --precision 4 --compact
|
|
195
|
+
|
|
196
|
+
# To CSV (creates constraints.csv, objectives.csv, variables.csv)
|
|
197
|
+
lp_parser convert problem.lp --format csv --output ./output_dir
|
|
198
|
+
|
|
199
|
+
# To JSON/YAML
|
|
200
|
+
lp_parser convert problem.lp --format json --pretty -o problem.json
|
|
201
|
+
lp_parser convert problem.lp --format yaml -o problem.yaml
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
**Solve with external solvers:**
|
|
205
|
+
```bash
|
|
206
|
+
# Using CBC (default)
|
|
207
|
+
lp_parser solve problem.lp
|
|
208
|
+
|
|
209
|
+
# Using GLPK
|
|
210
|
+
lp_parser solve problem.lp --solver glpk
|
|
211
|
+
|
|
212
|
+
# Output solution as JSON
|
|
213
|
+
lp_parser solve problem.lp --format json --pretty
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
## Solving with External Solvers (`lp-solvers` feature)
|
|
217
|
+
|
|
218
|
+
Enable the `lp-solvers` feature to solve parsed LP problems using external solvers like CBC, Gurobi, CPLEX, or GLPK via the [lp-solvers](https://crates.io/crates/lp-solvers) crate:
|
|
219
|
+
|
|
220
|
+
```toml
|
|
221
|
+
[dependencies]
|
|
222
|
+
lp_parser_rs = { version = "3.0.0", features = ["lp-solvers"] } # x-release-please-version
|
|
223
|
+
lp-solvers = "1.1"
|
|
131
224
|
```
|
|
132
225
|
|
|
226
|
+
```rust
|
|
227
|
+
use lp_parser_rs::{problem::LpProblem, ToLpSolvers};
|
|
228
|
+
use lp_solvers::solvers::{CbcSolver, SolverTrait};
|
|
229
|
+
|
|
230
|
+
fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|
231
|
+
let lp_content = r"
|
|
232
|
+
Minimize
|
|
233
|
+
obj: 2 x + 3 y
|
|
234
|
+
Subject To
|
|
235
|
+
c1: x + y <= 10
|
|
236
|
+
c2: x >= 2
|
|
237
|
+
Bounds
|
|
238
|
+
x >= 0
|
|
239
|
+
y >= 0
|
|
240
|
+
End
|
|
241
|
+
";
|
|
242
|
+
|
|
243
|
+
let problem = LpProblem::parse(lp_content)?;
|
|
244
|
+
let compat = problem.to_lp_solvers()?;
|
|
245
|
+
|
|
246
|
+
// Check for any compatibility warnings
|
|
247
|
+
for warning in compat.warnings() {
|
|
248
|
+
eprintln!("Warning: {}", warning);
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
// Solve using CBC solver (must be installed on your system)
|
|
252
|
+
let solver = CbcSolver::new();
|
|
253
|
+
let solution = solver.run(&compat)?;
|
|
254
|
+
println!("Solution status: {:?}", solution.status);
|
|
255
|
+
|
|
256
|
+
Ok(())
|
|
257
|
+
}
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
**Limitations:** The lp-solvers compatibility layer does not support multiple objectives (returns an error), strict inequalities (`<`, `>`), or SOS constraints (ignored with a warning).
|
|
261
|
+
|
|
133
262
|
## API Reference
|
|
134
263
|
|
|
135
264
|
### Problem Modification Methods
|
|
@@ -1,5 +1,36 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [3.0.3](https://github.com/dandxy89/lp_parser_rs/compare/lp_parser_rs-v3.0.2...lp_parser_rs-v3.0.3) (2025-12-11)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Build System
|
|
7
|
+
|
|
8
|
+
* Bump logos crate to 0.16.0 ([690e83c](https://github.com/dandxy89/lp_parser_rs/commit/690e83c69277a9de49bc8579c86db3a433766389))
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* Improvements to the binary / main ([#151](https://github.com/dandxy89/lp_parser_rs/issues/151)) ([0ca04b8](https://github.com/dandxy89/lp_parser_rs/commit/0ca04b81cce55c7fac0b04211a493997ec0892b2))
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
### Code Refactoring
|
|
17
|
+
|
|
18
|
+
* Clippy ([#150](https://github.com/dandxy89/lp_parser_rs/issues/150)) ([0ec6a51](https://github.com/dandxy89/lp_parser_rs/commit/0ec6a510fe3bd3a9f6f52194de381a110ad19589))
|
|
19
|
+
|
|
20
|
+
## [3.0.2](https://github.com/dandxy89/lp_parser_rs/compare/lp_parser_rs-v3.0.1...lp_parser_rs-v3.0.2) (2025-12-07)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
### Miscellaneous Chores
|
|
24
|
+
|
|
25
|
+
* release 3.0.2 ([e6771bd](https://github.com/dandxy89/lp_parser_rs/commit/e6771bd29fda5fdb7fa4c424b7892b8fbd9678ea))
|
|
26
|
+
|
|
27
|
+
## [3.0.1](https://github.com/dandxy89/lp_parser_rs/compare/lp_parser_rs-v3.0.0...lp_parser_rs-v3.0.1) (2025-12-07)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
### Miscellaneous Chores
|
|
31
|
+
|
|
32
|
+
* Remove unused consts ([74a363e](https://github.com/dandxy89/lp_parser_rs/commit/74a363eb2eb96eee2e516e0ce0dfff6cd69d76d8))
|
|
33
|
+
|
|
3
34
|
## [3.0.0](https://github.com/dandxy89/lp_parser_rs/compare/lp_parser_rs-v2.5.2...lp_parser_rs-v3.0.0) (2025-12-06)
|
|
4
35
|
|
|
5
36
|
|