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.
Files changed (157) hide show
  1. {parse_lp-3.0.0 → parse_lp-3.0.3}/Cargo.lock +218 -17
  2. {parse_lp-3.0.0 → parse_lp-3.0.3}/PKG-INFO +1 -1
  3. {parse_lp-3.0.0 → parse_lp-3.0.3}/python/Cargo.toml +1 -1
  4. {parse_lp-3.0.0 → parse_lp-3.0.3}/python/python/CHANGELOG.md +14 -0
  5. {parse_lp-3.0.0 → parse_lp-3.0.3}/python/src/lib.rs +4 -1
  6. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/Cargo.toml +10 -6
  7. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/README.md +141 -12
  8. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/rust/CHANGELOG.md +31 -0
  9. parse_lp-3.0.3/rust/src/bin/lp_parser/cli.rs +214 -0
  10. parse_lp-3.0.3/rust/src/bin/lp_parser/main.rs +625 -0
  11. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/src/builder.rs +23 -7
  12. parse_lp-3.0.3/rust/src/compat/lp_solvers.rs +531 -0
  13. parse_lp-3.0.3/rust/src/compat/mod.rs +2 -0
  14. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/src/context.rs +8 -0
  15. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/src/csv.rs +23 -1
  16. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/src/error.rs +12 -4
  17. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/src/lexer.rs +24 -21
  18. parse_lp-3.0.3/rust/src/lib.rs +61 -0
  19. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/src/model.rs +5 -9
  20. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/src/problem.rs +69 -8
  21. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/src/writer.rs +21 -13
  22. 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
  23. 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
  24. 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
  25. 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
  26. 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
  27. 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
  28. 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
  29. 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
  30. 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
  31. 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
  32. 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
  33. 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
  34. 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
  35. 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
  36. 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
  37. 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
  38. 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
  39. 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
  40. 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
  41. 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
  42. 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
  43. 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
  44. 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
  45. 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
  46. 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
  47. 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
  48. 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
  49. 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
  50. 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
  51. 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
  52. 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
  53. 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
  54. 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
  55. 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
  56. 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
  57. 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
  58. 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
  59. 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
  60. 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
  61. 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
  62. 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
  63. 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
  64. 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
  65. 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
  66. 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
  67. 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
  68. parse_lp-3.0.3/rust/tests/test_lp_solvers_compat.rs +78 -0
  69. parse_lp-3.0.0/rust/src/bin/main.rs +0 -111
  70. parse_lp-3.0.0/rust/src/lib.rs +0 -94
  71. parse_lp-3.0.0/rust/src/perf.rs +0 -376
  72. {parse_lp-3.0.0 → parse_lp-3.0.3}/Cargo.toml +0 -0
  73. {parse_lp-3.0.0 → parse_lp-3.0.3}/LICENSE-APACHE +0 -0
  74. {parse_lp-3.0.0 → parse_lp-3.0.3}/README.md +0 -0
  75. {parse_lp-3.0.0 → parse_lp-3.0.3}/parse_lp/__init__.py +0 -0
  76. {parse_lp-3.0.0 → parse_lp-3.0.3}/parse_lp/parse_lp.pyi +0 -0
  77. {parse_lp-3.0.0 → parse_lp-3.0.3}/parse_lp/py.typed +0 -0
  78. {parse_lp-3.0.0 → parse_lp-3.0.3}/pyproject.toml +0 -0
  79. {parse_lp-3.0.0 → parse_lp-3.0.3}/python/.cargo/config.toml +0 -0
  80. {parse_lp-3.0.0 → parse_lp-3.0.3}/python/.gitignore +0 -0
  81. {parse_lp-3.0.0 → parse_lp-3.0.3}/python/CHANGELOG.md +0 -0
  82. {parse_lp-3.0.0 → parse_lp-3.0.3}/python/LICENSE-APACHE +0 -0
  83. {parse_lp-3.0.0 → parse_lp-3.0.3}/python/MANIFEST.in +0 -0
  84. {parse_lp-3.0.0 → parse_lp-3.0.3}/python/Makefile +0 -0
  85. {parse_lp-3.0.0 → parse_lp-3.0.3}/python/README.md +0 -0
  86. {parse_lp-3.0.0 → parse_lp-3.0.3}/python/parse_lp/__init__.py +0 -0
  87. {parse_lp-3.0.0 → parse_lp-3.0.3}/python/parse_lp/parse_lp.pyi +0 -0
  88. {parse_lp-3.0.0 → parse_lp-3.0.3}/python/parse_lp/py.typed +0 -0
  89. {parse_lp-3.0.0 → parse_lp-3.0.3}/python/resources/afiro.lp +0 -0
  90. {parse_lp-3.0.0 → parse_lp-3.0.3}/python/tests/__init__.py +0 -0
  91. {parse_lp-3.0.0 → parse_lp-3.0.3}/python/tests/conftest.py +0 -0
  92. {parse_lp-3.0.0 → parse_lp-3.0.3}/python/tests/fixtures/afiro.lp +0 -0
  93. {parse_lp-3.0.0 → parse_lp-3.0.3}/python/tests/fixtures/minimize.lp +0 -0
  94. {parse_lp-3.0.0 → parse_lp-3.0.3}/python/tests/fixtures/simple.lp +0 -0
  95. {parse_lp-3.0.0 → parse_lp-3.0.3}/python/tests/test_csv_writer.py +0 -0
  96. {parse_lp-3.0.0 → parse_lp-3.0.3}/python/tests/test_lp_parser.py +0 -0
  97. {parse_lp-3.0.0 → parse_lp-3.0.3}/python/tests/test_lp_writer.py +0 -0
  98. {parse_lp-3.0.0 → parse_lp-3.0.3}/python/uv.lock +0 -0
  99. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/CHANGELOG.md +0 -0
  100. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/build.rs +0 -0
  101. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/1obj_1cons_all_variables_with_bounds.lp +0 -0
  102. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/2obj_2cons_all_variable_types.lp +0 -0
  103. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/2obj_2cons_only_binary_vars.lp +0 -0
  104. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/3obj_2cons.lp +0 -0
  105. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/AmericanSteelProblem.lp +0 -0
  106. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/BeerDistributionProblem.lp +0 -0
  107. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/ComputerPlantProblem.lp +0 -0
  108. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/WhiskasModel2.lp +0 -0
  109. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/afiro.lp +0 -0
  110. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/afiro_ext.lp +0 -0
  111. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/blank_lines.lp +0 -0
  112. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/boeing1.lp +0 -0
  113. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/boeing2.lp +0 -0
  114. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/complex_names.lp +0 -0
  115. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/corrupt.lp +0 -0
  116. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/cplex.lp +0 -0
  117. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/diet.lp +0 -0
  118. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/empty_bounds.lp +0 -0
  119. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/fit1d.lp +0 -0
  120. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/fit2d.lp +0 -0
  121. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/infile_comments.lp +0 -0
  122. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/infile_comments2.lp +0 -0
  123. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/invalid.lp +0 -0
  124. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/kb2.lp +0 -0
  125. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/limbo.lp +0 -0
  126. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/lol.lp +0 -0
  127. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/milo1.lp +0 -0
  128. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/missing_signs.lp +0 -0
  129. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/model.lp +0 -0
  130. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/model2.lp +0 -0
  131. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/mosek.lp +0 -0
  132. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/mosek_bounds.lp +0 -0
  133. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/no_end_section.lp +0 -0
  134. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/optional_labels.lp +0 -0
  135. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/output.lp +0 -0
  136. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/output2_1.lp +0 -0
  137. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/output2_2.lp +0 -0
  138. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/output2_3.lp +0 -0
  139. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/output2_4.lp +0 -0
  140. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/output_cplex_2.lp +0 -0
  141. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/pulp.lp +0 -0
  142. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/pulp2.lp +0 -0
  143. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/sc50a.lp +0 -0
  144. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/scientific_notation.lp +0 -0
  145. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/scientific_notation_2.lp +0 -0
  146. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/semi_continuous.lp +0 -0
  147. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/sos.lp +0 -0
  148. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/sudoku.lp +0 -0
  149. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/test.lp +0 -0
  150. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/test2.lp +0 -0
  151. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/test_copy.lp +0 -0
  152. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/resources/wbm.lp +0 -0
  153. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/src/lp.lalrpop +0 -0
  154. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/src/parser.rs +0 -0
  155. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/src/snapshots/lp_parser_rs__problem__test__complete_input.snap +0 -0
  156. {parse_lp-3.0.0 → parse_lp-3.0.3}/rust/src/snapshots/lp_parser_rs__problem__test__minified_example.snap +0 -0
  157. {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.15.1"
502
+ version = "0.16.0"
385
503
  source = "registry+https://github.com/rust-lang/crates.io-index"
386
- checksum = "ff472f899b4ec2d99161c51f60ff7075eeb3097069a36050d8037a6325eb8154"
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.15.1"
511
+ version = "0.16.0"
394
512
  source = "registry+https://github.com/rust-lang/crates.io-index"
395
- checksum = "192a3a2b90b0c05b27a0b2c43eecdb7c415e29243acc3f89cc8247a5b693045c"
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.15.1"
527
+ version = "0.16.0"
410
528
  source = "registry+https://github.com/rust-lang/crates.io-index"
411
- checksum = "605d9697bcd5ef3a42d38efc51541aa3d6a4a25f7ab6d1ed0da5ac632a26b470"
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.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
- "memchr",
557
+ "lp-solvers",
429
558
  "serde",
430
559
  "serde_json",
431
- "smallvec",
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.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,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: parse_lp
3
- Version: 3.0.0
3
+ Version: 3.0.3
4
4
  Classifier: License :: OSI Approved :: Apache Software License
5
5
  Classifier: Programming Language :: Python :: 3.9
6
6
  Classifier: Programming Language :: Python :: 3.10
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "parse_lp"
3
- version = "3.0.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.74.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.to_owned());
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.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.15.1"
37
- memchr = "2.7.6"
38
+ logos = "0.16.0"
38
39
  serde = { version = "1.0.228", features = ["derive"], optional = true }
39
- smallvec = "1.15.1"
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
- serde = ["dep:serde"]
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 = "2.5.2" # x-release-please-version
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 = "2.5.2", features = ["serde", "diff"] } # x-release-please-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