parse-lp


Nameparse-lp JSON
Version 2.5.0 PyPI version JSON
download
home_pageNone
SummaryA LP file format parser for Python, powered by Rust
upload_time2025-07-24 22:39:56
maintainerNone
docs_urlNone
authorDan Dixey, Dan Dixey <dan@functorml.co.uk>
requires_python>=3.9
licenseMIT OR Apache-2.0
keywords linear-programming optimization parser integer-programming math
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # parse_lp

A LP file format parser for Python, powered by Rust.

## Features

- **Complete LP Support**: Handles all standard LP file format features
- **Easy Data Access**: Direct access to problem components (variables, constraints, objectives)
- **CSV Export**: Export parsed data to CSV files for further analysis
- **Problem Comparison**: Compare two LP problems to identify differences
- **Type Safety**: Full type hints for better IDE support and development experience

## Installation

```bash
pip install parse_lp
```

## Quick Start

```python
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()}")

# Export to CSV files
parser.to_csv("output_directory/")
```

## Usage Examples

### Basic Parsing and Information

```python
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()}")
```

### Accessing Problem Data

```python
# 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'])}")
```

### CSV Export

```python
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
```

### Problem Comparison

```python
# 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']}")
```

### Objectives Structure

```python
[
    {
        "name": "objective_name",
        "coefficients": [
            {"name": "variable_name", "value": 1.5},
            {"name": "another_var", "value": -2.0}
        ]
    }
]
```

### Variables Structure

```python
{
    "variable_name": {
        "name": "variable_name",
        "var_type": "Continuous",  # or "Binary", "Integer", etc.
        "bounds": {  # Optional
            "lower": 0.0,  # Optional
            "upper": 100.0  # Optional
        }
    }
}
```

### Constraints Structure

```python
[
    {
        "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"]
    }
]
```

## Supported LP Format Features

- Multiple objective functions
- Standard constraints (≤, =, ≥)
- Variable bounds
- Variable types (continuous, binary, integer)
- SOS (Special Ordered Sets) constraints
- Problem names and comments
- Scientific notation in coefficients

## License

Licensed under either of Apache License, Version 2.0 or MIT license at your option.

## Contributing

Issues and pull requests are welcome at: <https://github.com/dandxy89/lp_parser_rs>


            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "parse-lp",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": null,
    "keywords": "linear-programming, optimization, parser, integer-programming, math",
    "author": "Dan Dixey, Dan Dixey <dan@functorml.co.uk>",
    "author_email": "Dan Dixey, Dan Dixey <dan@functorml.co.uk>",
    "download_url": "https://files.pythonhosted.org/packages/f7/40/8b9682370a223c7624387533a40433818687cd62428b8206ded40d46ed92/parse_lp-2.5.0.tar.gz",
    "platform": null,
    "description": "# parse_lp\n\nA LP file format parser for Python, powered by Rust.\n\n## Features\n\n- **Complete LP Support**: Handles all standard LP file format features\n- **Easy Data Access**: Direct access to problem components (variables, constraints, objectives)\n- **CSV Export**: Export parsed data to CSV files for further analysis\n- **Problem Comparison**: Compare two LP problems to identify differences\n- **Type Safety**: Full type hints for better IDE support and development experience\n\n## Installation\n\n```bash\npip install parse_lp\n```\n\n## Quick Start\n\n```python\nfrom parse_lp import LpParser\n\n# Parse an LP file\nparser = LpParser(\"path/to/problem.lp\")\nparser.parse()\n\n# Access problem information\nprint(f\"Problem: {parser.name}\")\nprint(f\"Sense: {parser.sense}\")\nprint(f\"Variables: {parser.variable_count()}\")\nprint(f\"Constraints: {parser.constraint_count()}\")\n\n# Export to CSV files\nparser.to_csv(\"output_directory/\")\n```\n\n## Usage Examples\n\n### Basic Parsing and Information\n\n```python\nfrom parse_lp import LpParser\n\nparser = LpParser(\"optimization_problem.lp\")\nparser.parse()\n\n# Get problem overview\nprint(f\"Problem Name: {parser.name}\")\nprint(f\"Optimization Sense: {parser.sense}\")\nprint(f\"Variables: {parser.variable_count()}\")\nprint(f\"Constraints: {parser.constraint_count()}\")\nprint(f\"Objectives: {parser.objective_count()}\")\n```\n\n### Accessing Problem Data\n\n```python\n# Access objectives\nfor i, objective in enumerate(parser.objectives):\n    print(f\"Objective {i+1}: {objective['name']}\")\n    for coef in objective['coefficients']:\n        print(f\"  {coef['name']}: {coef['value']}\")\n\n# Access variables\nfor var_name, var_info in parser.variables.items():\n    print(f\"Variable {var_name}:\")\n    print(f\"  Type: {var_info['var_type']}\")\n    if 'bounds' in var_info:\n        bounds = var_info['bounds']\n        if 'lower' in bounds:\n            print(f\"  Lower bound: {bounds['lower']}\")\n        if 'upper' in bounds:\n            print(f\"  Upper bound: {bounds['upper']}\")\n\n# Access constraints\nfor constraint in parser.constraints:\n    print(f\"Constraint {constraint['name']}:\")\n    print(f\"  Type: {constraint['type']}\")\n    if constraint['type'] == 'standard':\n        print(f\"  Sense: {constraint['sense']}\")\n        print(f\"  RHS: {constraint['rhs']}\")\n        print(f\"  Coefficients: {len(constraint['coefficients'])}\")\n```\n\n### CSV Export\n\n```python\nimport os\n\n# Create output directory\nos.makedirs(\"output\", exist_ok=True)\n\n# Export to CSV files\nparser.to_csv(\"output/\")\n\n# Files created:\n# - output/variables.csv\n# - output/constraints.csv\n# - output/objectives.csv\n```\n\n### Problem Comparison\n\n```python\n# Parse two different versions of a problem\nparser1 = LpParser(\"problem_v1.lp\")\nparser1.parse()\n\nparser2 = LpParser(\"problem_v2.lp\")\nparser2.parse()\n\n# Compare the problems\ndiff = parser1.compare(parser2)\n\nprint(\"Comparison Results:\")\nprint(f\"Name changed: {diff['name_changed']}\")\nprint(f\"Sense changed: {diff['sense_changed']}\")\nprint(f\"Variable count difference: {diff['variable_count_diff']}\")\nprint(f\"Added variables: {diff['added_variables']}\")\nprint(f\"Removed variables: {diff['removed_variables']}\")\nprint(f\"Modified variables: {diff['modified_variables']}\")\nprint(f\"Added constraints: {diff['added_constraints']}\")\nprint(f\"Removed constraints: {diff['removed_constraints']}\")\n```\n\n### Objectives Structure\n\n```python\n[\n    {\n        \"name\": \"objective_name\",\n        \"coefficients\": [\n            {\"name\": \"variable_name\", \"value\": 1.5},\n            {\"name\": \"another_var\", \"value\": -2.0}\n        ]\n    }\n]\n```\n\n### Variables Structure\n\n```python\n{\n    \"variable_name\": {\n        \"name\": \"variable_name\",\n        \"var_type\": \"Continuous\",  # or \"Binary\", \"Integer\", etc.\n        \"bounds\": {  # Optional\n            \"lower\": 0.0,  # Optional\n            \"upper\": 100.0  # Optional\n        }\n    }\n}\n```\n\n### Constraints Structure\n\n```python\n[\n    {\n        \"name\": \"constraint_name\",\n        \"type\": \"standard\",  # or \"sos\"\n        \"sense\": \"LessOrEqual\",  # \"Equal\", \"GreaterOrEqual\"\n        \"rhs\": 10.0,\n        \"coefficients\": [\n            {\"name\": \"variable_name\", \"value\": 2.0}\n        ]\n    },\n    {\n        \"name\": \"sos_constraint\",\n        \"type\": \"sos\",\n        \"sos_type\": \"SOS1\",  # or \"SOS2\"\n        \"variables\": [\"var1\", \"var2\", \"var3\"]\n    }\n]\n```\n\n## Supported LP Format Features\n\n- Multiple objective functions\n- Standard constraints (\u2264, =, \u2265)\n- Variable bounds\n- Variable types (continuous, binary, integer)\n- SOS (Special Ordered Sets) constraints\n- Problem names and comments\n- Scientific notation in coefficients\n\n## License\n\nLicensed under either of Apache License, Version 2.0 or MIT license at your option.\n\n## Contributing\n\nIssues and pull requests are welcome at: <https://github.com/dandxy89/lp_parser_rs>\n\n",
    "bugtrack_url": null,
    "license": "MIT OR Apache-2.0",
    "summary": "A LP file format parser for Python, powered by Rust",
    "version": "2.5.0",
    "project_urls": {
        "Source Code": "https://github.com/dandxy89/lp_parser_rs"
    },
    "split_keywords": [
        "linear-programming",
        " optimization",
        " parser",
        " integer-programming",
        " math"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "b6002b27043a4c405601c5bf9d70a28049cd82ea3ac6203a030a8b6e0ab976eb",
                "md5": "74fa8f6edfb8b7210a8c80289dce3482",
                "sha256": "d0e4364a0b632481c1b9385602828d9bcd0e840b1fc76b6ef98b01b0d532c4be"
            },
            "downloads": -1,
            "filename": "parse_lp-2.5.0-cp39-abi3-macosx_10_12_x86_64.whl",
            "has_sig": false,
            "md5_digest": "74fa8f6edfb8b7210a8c80289dce3482",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 378695,
            "upload_time": "2025-07-24T22:39:42",
            "upload_time_iso_8601": "2025-07-24T22:39:42.973991Z",
            "url": "https://files.pythonhosted.org/packages/b6/00/2b27043a4c405601c5bf9d70a28049cd82ea3ac6203a030a8b6e0ab976eb/parse_lp-2.5.0-cp39-abi3-macosx_10_12_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "408a1b02f50ad41e69dfb52e0f7ea2712021cd44a47c7089ccbc5c7678a0011d",
                "md5": "8b23aa3868947c886e34ebd69fe202d0",
                "sha256": "a230628c102f966f0551c8f872d5f884e6fb4cb42c0fd7224ba472832b960868"
            },
            "downloads": -1,
            "filename": "parse_lp-2.5.0-cp39-abi3-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "8b23aa3868947c886e34ebd69fe202d0",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 369211,
            "upload_time": "2025-07-24T22:39:44",
            "upload_time_iso_8601": "2025-07-24T22:39:44.430372Z",
            "url": "https://files.pythonhosted.org/packages/40/8a/1b02f50ad41e69dfb52e0f7ea2712021cd44a47c7089ccbc5c7678a0011d/parse_lp-2.5.0-cp39-abi3-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "c2eefbd6592401f82b69b9df10a66bb33f7e2d04cd466f61334e9a0ba0d9207d",
                "md5": "6e49f53be5be9e2b7d478b235846b957",
                "sha256": "72d33a6ca8a812892dda862de128c02e8583616904d630d219238c4f94ab142e"
            },
            "downloads": -1,
            "filename": "parse_lp-2.5.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "6e49f53be5be9e2b7d478b235846b957",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 401711,
            "upload_time": "2025-07-24T22:39:45",
            "upload_time_iso_8601": "2025-07-24T22:39:45.880412Z",
            "url": "https://files.pythonhosted.org/packages/c2/ee/fbd6592401f82b69b9df10a66bb33f7e2d04cd466f61334e9a0ba0d9207d/parse_lp-2.5.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "e915f97641e04c08dcb347e39d0d3902ab31454a30f173dd1a667dd52689fabb",
                "md5": "9113fe36e8ef9eb883b2d4976058e1c5",
                "sha256": "9bb35b59fb8cf57fb9ad83e4c3c7b97a7728c1a3334edd1ca3e368434b6a9dcc"
            },
            "downloads": -1,
            "filename": "parse_lp-2.5.0-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
            "has_sig": false,
            "md5_digest": "9113fe36e8ef9eb883b2d4976058e1c5",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 414671,
            "upload_time": "2025-07-24T22:39:46",
            "upload_time_iso_8601": "2025-07-24T22:39:46.961728Z",
            "url": "https://files.pythonhosted.org/packages/e9/15/f97641e04c08dcb347e39d0d3902ab31454a30f173dd1a667dd52689fabb/parse_lp-2.5.0-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "e4d47ee0655f3e8a7051fc8e6bb3d11ddf7fe0a6491c460ab4f29b5e748af261",
                "md5": "a96a7dc014f702bfdd2a11da4c744bce",
                "sha256": "93e593594b80a9d5f9d509d3ff74f4c0502651c2d195345899db8f1256d0c327"
            },
            "downloads": -1,
            "filename": "parse_lp-2.5.0-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "has_sig": false,
            "md5_digest": "a96a7dc014f702bfdd2a11da4c744bce",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 526713,
            "upload_time": "2025-07-24T22:39:48",
            "upload_time_iso_8601": "2025-07-24T22:39:48.073424Z",
            "url": "https://files.pythonhosted.org/packages/e4/d4/7ee0655f3e8a7051fc8e6bb3d11ddf7fe0a6491c460ab4f29b5e748af261/parse_lp-2.5.0-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "9588ee105bdd325c6202670c0dfa0234b3a579c1b1f61b73905c11a114a6cd3c",
                "md5": "f4adcbc2808e030d0c0f56974ef3dd02",
                "sha256": "917729cfa7edd96646111171d73e8dcc1e54f7abb9e5d12aba9d7a6aeb87e9a3"
            },
            "downloads": -1,
            "filename": "parse_lp-2.5.0-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl",
            "has_sig": false,
            "md5_digest": "f4adcbc2808e030d0c0f56974ef3dd02",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 445204,
            "upload_time": "2025-07-24T22:39:49",
            "upload_time_iso_8601": "2025-07-24T22:39:49.166662Z",
            "url": "https://files.pythonhosted.org/packages/95/88/ee105bdd325c6202670c0dfa0234b3a579c1b1f61b73905c11a114a6cd3c/parse_lp-2.5.0-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "523ff66cb798b08ab60b8cd5ee0ef25fcd977a25565ac88e5b62d6245acf994a",
                "md5": "d41376117c2dbfae8270bd46813cc975",
                "sha256": "e90431840daf797db71cfc5102943e12eb230609d408ed7743977d03cbc7bffb"
            },
            "downloads": -1,
            "filename": "parse_lp-2.5.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "d41376117c2dbfae8270bd46813cc975",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 407519,
            "upload_time": "2025-07-24T22:39:50",
            "upload_time_iso_8601": "2025-07-24T22:39:50.532033Z",
            "url": "https://files.pythonhosted.org/packages/52/3f/f66cb798b08ab60b8cd5ee0ef25fcd977a25565ac88e5b62d6245acf994a/parse_lp-2.5.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "abf60ed87f27180c29e8ad9fd157646a61b5c7242bd38c0c386fe06ab8a66f76",
                "md5": "1cbb7a26541d72123041ede655e34e83",
                "sha256": "1ba86c59661bd54b9c1f74ff4f5af92eeef352c2363b86776b01a84890cc54f5"
            },
            "downloads": -1,
            "filename": "parse_lp-2.5.0-cp39-abi3-manylinux_2_5_i686.manylinux1_i686.whl",
            "has_sig": false,
            "md5_digest": "1cbb7a26541d72123041ede655e34e83",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 434935,
            "upload_time": "2025-07-24T22:39:52",
            "upload_time_iso_8601": "2025-07-24T22:39:52.924838Z",
            "url": "https://files.pythonhosted.org/packages/ab/f6/0ed87f27180c29e8ad9fd157646a61b5c7242bd38c0c386fe06ab8a66f76/parse_lp-2.5.0-cp39-abi3-manylinux_2_5_i686.manylinux1_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "335039ab55ecfeb255c2fc77c115eba74d76e4bd1f5988039bab19c3fae266a9",
                "md5": "3df86aeae152de16a7a571623d231b43",
                "sha256": "fd972c84a723c126ef691ee6067aed75a9067d1708e63a9ccc37be1b5b89ebd4"
            },
            "downloads": -1,
            "filename": "parse_lp-2.5.0-cp39-abi3-win32.whl",
            "has_sig": false,
            "md5_digest": "3df86aeae152de16a7a571623d231b43",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 252498,
            "upload_time": "2025-07-24T22:39:53",
            "upload_time_iso_8601": "2025-07-24T22:39:53.955810Z",
            "url": "https://files.pythonhosted.org/packages/33/50/39ab55ecfeb255c2fc77c115eba74d76e4bd1f5988039bab19c3fae266a9/parse_lp-2.5.0-cp39-abi3-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "51acec61d481d5c9572f02e1264d3918319e1ef531fd61dd485066f499a62563",
                "md5": "87233076b1a124194419a3b5f6641ab7",
                "sha256": "0b7049560701b800f8d11f5c33a2d41caeb58077216509471ded0db209916f84"
            },
            "downloads": -1,
            "filename": "parse_lp-2.5.0-cp39-abi3-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "87233076b1a124194419a3b5f6641ab7",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 262513,
            "upload_time": "2025-07-24T22:39:55",
            "upload_time_iso_8601": "2025-07-24T22:39:55.369335Z",
            "url": "https://files.pythonhosted.org/packages/51/ac/ec61d481d5c9572f02e1264d3918319e1ef531fd61dd485066f499a62563/parse_lp-2.5.0-cp39-abi3-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "f7408b9682370a223c7624387533a40433818687cd62428b8206ded40d46ed92",
                "md5": "f22bf18adcebce30482d17440a3620ab",
                "sha256": "e99441a6ac02baa1da1a7289d1938cdc75238e43f21aea06d6ba533b000b480a"
            },
            "downloads": -1,
            "filename": "parse_lp-2.5.0.tar.gz",
            "has_sig": false,
            "md5_digest": "f22bf18adcebce30482d17440a3620ab",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 1244674,
            "upload_time": "2025-07-24T22:39:56",
            "upload_time_iso_8601": "2025-07-24T22:39:56.481212Z",
            "url": "https://files.pythonhosted.org/packages/f7/40/8b9682370a223c7624387533a40433818687cd62428b8206ded40d46ed92/parse_lp-2.5.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-07-24 22:39:56",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "dandxy89",
    "github_project": "lp_parser_rs",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "parse-lp"
}
        
Elapsed time: 1.75884s