
Research
/Security News
Malicious npm Packages Target WhatsApp Developers with Remote Kill Switch
Two npm packages masquerading as WhatsApp developer libraries include a kill switch that deletes all files if the phone number isn’t whitelisted.
A LP file format parser, writer, and modifier for Python, powered by Rust.
pip install parse_lp
from parse_lp import LpParser
# Parse an LP file
parser = LpParser("path/to/problem.lp")
parser.parse()
# Access problem information
print(f"Problem: {parser.name}")
print(f"Sense: {parser.sense}")
print(f"Variables: {parser.variable_count()}")
print(f"Constraints: {parser.constraint_count()}")
# Modify the problem
parser.update_objective_coefficient("OBJ", "x1", 5.0)
parser.rename_variable("x2", "production")
parser.update_constraint_rhs("C1", 100.0)
# Write back to LP format
modified_lp = parser.to_lp_string()
parser.save_to_file("modified_problem.lp")
# Export to CSV files
parser.to_csv("output_directory/")
from parse_lp import LpParser
parser = LpParser("optimization_problem.lp")
parser.parse()
# Get problem overview
print(f"Problem Name: {parser.name}")
print(f"Optimization Sense: {parser.sense}")
print(f"Variables: {parser.variable_count()}")
print(f"Constraints: {parser.constraint_count()}")
print(f"Objectives: {parser.objective_count()}")
# Access objectives
for i, objective in enumerate(parser.objectives):
print(f"Objective {i+1}: {objective['name']}")
for coef in objective['coefficients']:
print(f" {coef['name']}: {coef['value']}")
# Access variables
for var_name, var_info in parser.variables.items():
print(f"Variable {var_name}:")
print(f" Type: {var_info['var_type']}")
if 'bounds' in var_info:
bounds = var_info['bounds']
if 'lower' in bounds:
print(f" Lower bound: {bounds['lower']}")
if 'upper' in bounds:
print(f" Upper bound: {bounds['upper']}")
# Access constraints
for constraint in parser.constraints:
print(f"Constraint {constraint['name']}:")
print(f" Type: {constraint['type']}")
if constraint['type'] == 'standard':
print(f" Sense: {constraint['sense']}")
print(f" RHS: {constraint['rhs']}")
print(f" Coefficients: {len(constraint['coefficients'])}")
import os
# Create output directory
os.makedirs("output", exist_ok=True)
# Export to CSV files
parser.to_csv("output/")
# Files created:
# - output/variables.csv
# - output/constraints.csv
# - output/objectives.csv
from parse_lp import LpParser
# Parse an existing LP file
parser = LpParser("optimization_problem.lp")
parser.parse()
# Modify objectives
parser.update_objective_coefficient("profit", "x1", 5.0)
parser.rename_objective("profit", "total_profit")
# Modify constraints
parser.update_constraint_coefficient("capacity", "x1", 2.0)
parser.update_constraint_rhs("capacity", 200.0)
parser.rename_constraint("capacity", "production_limit")
# Modify variables
parser.rename_variable("x1", "production_a")
parser.update_variable_type("production_a", "integer")
# Set problem properties
parser.set_problem_name("Modified Optimization Problem")
parser.set_sense("minimize")
# Write back to LP format
modified_lp_content = parser.to_lp_string()
parser.save_to_file("modified_problem.lp")
# Verify round-trip compatibility
new_parser = LpParser("modified_problem.lp")
new_parser.parse()
print(f"Successfully modified and re-parsed: {new_parser.name}")
# Parse two different versions of a problem
parser1 = LpParser("problem_v1.lp")
parser1.parse()
parser2 = LpParser("problem_v2.lp")
parser2.parse()
# Compare the problems
diff = parser1.compare(parser2)
print("Comparison Results:")
print(f"Name changed: {diff['name_changed']}")
print(f"Sense changed: {diff['sense_changed']}")
print(f"Variable count difference: {diff['variable_count_diff']}")
print(f"Added variables: {diff['added_variables']}")
print(f"Removed variables: {diff['removed_variables']}")
print(f"Modified variables: {diff['modified_variables']}")
print(f"Added constraints: {diff['added_constraints']}")
print(f"Removed constraints: {diff['removed_constraints']}")
[
{
"name": "objective_name",
"coefficients": [
{"name": "variable_name", "value": 1.5},
{"name": "another_var", "value": -2.0}
]
}
]
{
"variable_name": {
"name": "variable_name",
"var_type": "Continuous", # or "Binary", "Integer", etc.
"bounds": { # Optional
"lower": 0.0, # Optional
"upper": 100.0 # Optional
}
}
}
[
{
"name": "constraint_name",
"type": "standard", # or "sos"
"sense": "LessOrEqual", # "Equal", "GreaterOrEqual"
"rhs": 10.0,
"coefficients": [
{"name": "variable_name", "value": 2.0}
]
},
{
"name": "sos_constraint",
"type": "sos",
"sos_type": "SOS1", # or "SOS2"
"variables": ["var1", "var2", "var3"]
}
]
update_objective_coefficient(obj_name, var_name, coefficient)
- Update or add coefficientrename_objective(old_name, new_name)
- Rename an objectiveremove_objective(obj_name)
- Remove an objectiveupdate_constraint_coefficient(const_name, var_name, coefficient)
- Update or add coefficientupdate_constraint_rhs(const_name, new_rhs)
- Update right-hand side valuerename_constraint(old_name, new_name)
- Rename a constraintremove_constraint(const_name)
- Remove a constraintrename_variable(old_name, new_name)
- Rename variable across problemupdate_variable_type(var_name, var_type)
- Change variable typeremove_variable(var_name)
- Remove variable from problemset_problem_name(name)
- Set problem nameset_sense(sense)
- Set optimization sense ("maximize" or "minimize")to_lp_string()
- Generate LP format stringto_lp_string_with_options(**options)
- Generate with custom formattingsave_to_file(filepath)
- Save to LP fileSupported variable types for update_variable_type()
:
"binary"
- Binary variables (0 or 1)"integer"
- General integer variables"general"
- Continuous variables (default)"free"
- Free variables (no bounds)"semicontinuous"
- Semi-continuous variablesLicensed under either of Apache License, Version 2.0 or MIT license at your option.
Issues and pull requests are welcome at: https://github.com/dandxy89/lp_parser_rs
FAQs
A LP file format parser for Python, powered by Rust
We found that parse-lp demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
/Security News
Two npm packages masquerading as WhatsApp developer libraries include a kill switch that deletes all files if the phone number isn’t whitelisted.
Research
/Security News
Socket uncovered 11 malicious Go packages using obfuscated loaders to fetch and execute second-stage payloads via C2 domains.
Security News
TC39 advances 11 JavaScript proposals, with two moving to Stage 4, bringing better math, binary APIs, and more features one step closer to the ECMAScript spec.