batch-lp 1.0.0__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.
- batch_lp-1.0.0/.github/workflows/ci.yml +79 -0
- batch_lp-1.0.0/.github/workflows/release.yml +65 -0
- batch_lp-1.0.0/.gitignore +51 -0
- batch_lp-1.0.0/CHANGELOG.md +32 -0
- batch_lp-1.0.0/Cargo.lock +553 -0
- batch_lp-1.0.0/Cargo.toml +30 -0
- batch_lp-1.0.0/LICENSE +21 -0
- batch_lp-1.0.0/MANIFEST.in +5 -0
- batch_lp-1.0.0/PKG-INFO +248 -0
- batch_lp-1.0.0/README.md +215 -0
- batch_lp-1.0.0/example.py +211 -0
- batch_lp-1.0.0/pyproject.toml +48 -0
- batch_lp-1.0.0/src/lib.rs +287 -0
- batch_lp-1.0.0/src/python.rs +369 -0
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [ main ]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [ main ]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
lint:
|
|
11
|
+
name: Lint
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
steps:
|
|
14
|
+
- uses: actions/checkout@v4
|
|
15
|
+
|
|
16
|
+
- name: Set up Rust
|
|
17
|
+
uses: dtolnay/rust-toolchain@stable
|
|
18
|
+
with:
|
|
19
|
+
components: rustfmt, clippy
|
|
20
|
+
|
|
21
|
+
- name: Check formatting
|
|
22
|
+
run: cargo fmt --all -- --check
|
|
23
|
+
|
|
24
|
+
- name: Run clippy
|
|
25
|
+
run: cargo clippy --all-targets --all-features -- -D warnings
|
|
26
|
+
|
|
27
|
+
test:
|
|
28
|
+
name: Test on ${{ matrix.os }} - Python ${{ matrix.python-version }}
|
|
29
|
+
runs-on: ${{ matrix.os }}
|
|
30
|
+
strategy:
|
|
31
|
+
fail-fast: false
|
|
32
|
+
matrix:
|
|
33
|
+
os: [ubuntu-latest, macos-latest, windows-latest]
|
|
34
|
+
python-version: ['3.8', '3.12'] # Test oldest and newest
|
|
35
|
+
|
|
36
|
+
steps:
|
|
37
|
+
- uses: actions/checkout@v4
|
|
38
|
+
|
|
39
|
+
- name: Set up Python
|
|
40
|
+
uses: actions/setup-python@v5
|
|
41
|
+
with:
|
|
42
|
+
python-version: ${{ matrix.python-version }}
|
|
43
|
+
|
|
44
|
+
- name: Set up Rust
|
|
45
|
+
uses: dtolnay/rust-toolchain@stable
|
|
46
|
+
|
|
47
|
+
- name: Install dependencies
|
|
48
|
+
run: pip install maturin numpy
|
|
49
|
+
|
|
50
|
+
- name: Build
|
|
51
|
+
run: maturin develop --release
|
|
52
|
+
|
|
53
|
+
- name: Run Rust tests
|
|
54
|
+
run: cargo test --all-features
|
|
55
|
+
|
|
56
|
+
- name: Run example
|
|
57
|
+
run: python example.py
|
|
58
|
+
|
|
59
|
+
build-wheels:
|
|
60
|
+
name: Build wheels on ${{ matrix.os }}
|
|
61
|
+
runs-on: ${{ matrix.os }}
|
|
62
|
+
strategy:
|
|
63
|
+
matrix:
|
|
64
|
+
os: [ubuntu-latest, macos-latest, windows-latest]
|
|
65
|
+
|
|
66
|
+
steps:
|
|
67
|
+
- uses: actions/checkout@v4
|
|
68
|
+
|
|
69
|
+
- name: Build wheels
|
|
70
|
+
uses: PyO3/maturin-action@v1
|
|
71
|
+
with:
|
|
72
|
+
command: build
|
|
73
|
+
args: --release --out dist --find-interpreter
|
|
74
|
+
|
|
75
|
+
- name: Upload wheels
|
|
76
|
+
uses: actions/upload-artifact@v4
|
|
77
|
+
with:
|
|
78
|
+
name: wheels-${{ matrix.os }}
|
|
79
|
+
path: dist
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
name: Release to PyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
release:
|
|
5
|
+
types: [published]
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
build-wheels:
|
|
9
|
+
name: Build wheels on ${{ matrix.os }}
|
|
10
|
+
runs-on: ${{ matrix.os }}
|
|
11
|
+
strategy:
|
|
12
|
+
matrix:
|
|
13
|
+
os: [ubuntu-latest, macos-latest, windows-latest]
|
|
14
|
+
|
|
15
|
+
steps:
|
|
16
|
+
- uses: actions/checkout@v4
|
|
17
|
+
|
|
18
|
+
- name: Build wheels
|
|
19
|
+
uses: PyO3/maturin-action@v1
|
|
20
|
+
with:
|
|
21
|
+
command: build
|
|
22
|
+
args: --release --out dist --find-interpreter
|
|
23
|
+
|
|
24
|
+
- name: Upload wheels
|
|
25
|
+
uses: actions/upload-artifact@v4
|
|
26
|
+
with:
|
|
27
|
+
name: wheels-${{ matrix.os }}
|
|
28
|
+
path: dist
|
|
29
|
+
|
|
30
|
+
build-sdist:
|
|
31
|
+
name: Build source distribution
|
|
32
|
+
runs-on: ubuntu-latest
|
|
33
|
+
steps:
|
|
34
|
+
- uses: actions/checkout@v4
|
|
35
|
+
|
|
36
|
+
- name: Build sdist
|
|
37
|
+
uses: PyO3/maturin-action@v1
|
|
38
|
+
with:
|
|
39
|
+
command: sdist
|
|
40
|
+
args: --out dist
|
|
41
|
+
|
|
42
|
+
- name: Upload sdist
|
|
43
|
+
uses: actions/upload-artifact@v4
|
|
44
|
+
with:
|
|
45
|
+
name: sdist
|
|
46
|
+
path: dist
|
|
47
|
+
|
|
48
|
+
publish:
|
|
49
|
+
name: Publish to PyPI
|
|
50
|
+
needs: [build-wheels, build-sdist]
|
|
51
|
+
runs-on: ubuntu-latest
|
|
52
|
+
permissions:
|
|
53
|
+
id-token: write # Required for trusted publishing
|
|
54
|
+
|
|
55
|
+
steps:
|
|
56
|
+
- name: Download all artifacts
|
|
57
|
+
uses: actions/download-artifact@v4
|
|
58
|
+
with:
|
|
59
|
+
path: dist
|
|
60
|
+
merge-multiple: true
|
|
61
|
+
|
|
62
|
+
- name: Publish to PyPI
|
|
63
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
64
|
+
with:
|
|
65
|
+
skip-existing: true
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
*.so
|
|
6
|
+
.Python
|
|
7
|
+
build/
|
|
8
|
+
develop-eggs/
|
|
9
|
+
dist/
|
|
10
|
+
downloads/
|
|
11
|
+
eggs/
|
|
12
|
+
.eggs/
|
|
13
|
+
lib/
|
|
14
|
+
lib64/
|
|
15
|
+
parts/
|
|
16
|
+
sdist/
|
|
17
|
+
var/
|
|
18
|
+
wheels/
|
|
19
|
+
pip-wheel-metadata/
|
|
20
|
+
share/python-wheels/
|
|
21
|
+
*.egg-info/
|
|
22
|
+
.installed.cfg
|
|
23
|
+
*.egg
|
|
24
|
+
MANIFEST
|
|
25
|
+
|
|
26
|
+
# Virtual environments
|
|
27
|
+
venv/
|
|
28
|
+
env/
|
|
29
|
+
ENV/
|
|
30
|
+
.venv
|
|
31
|
+
|
|
32
|
+
# Rust
|
|
33
|
+
/target/
|
|
34
|
+
**/*.rs.bk
|
|
35
|
+
Cargo.lock
|
|
36
|
+
|
|
37
|
+
# IDE
|
|
38
|
+
.vscode/
|
|
39
|
+
.idea/
|
|
40
|
+
*.swp
|
|
41
|
+
*.swo
|
|
42
|
+
*~
|
|
43
|
+
.DS_Store
|
|
44
|
+
|
|
45
|
+
# Testing
|
|
46
|
+
.pytest_cache/
|
|
47
|
+
.coverage
|
|
48
|
+
htmlcov/
|
|
49
|
+
|
|
50
|
+
# Maturin
|
|
51
|
+
*.whl
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [1.0.0] - 2026-02-11
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- Initial release
|
|
12
|
+
- Single LP solving with `solve_lp()`
|
|
13
|
+
- Batch parallel LP solving with `solve_batch_lp()`
|
|
14
|
+
- `Problem` dataclass for defining LP problems (cleaner API than dictionaries)
|
|
15
|
+
- Support for inequality constraints (A x <= b)
|
|
16
|
+
- Support for equality constraints (A_eq x == b_eq)
|
|
17
|
+
- Support for variable bounds (lb <= x <= ub)
|
|
18
|
+
- Thread control via `num_threads` parameter
|
|
19
|
+
- Python bindings via PyO3
|
|
20
|
+
- Rayon-based work-stealing parallelism
|
|
21
|
+
- Comprehensive examples in `example.py`
|
|
22
|
+
- Performance benchmarks showing 10-15x speedup over scipy
|
|
23
|
+
- Automated CI/CD with GitHub Actions
|
|
24
|
+
- Automated PyPI publishing on release
|
|
25
|
+
|
|
26
|
+
### Technical Details
|
|
27
|
+
- NumPy >= 2.0 requirement
|
|
28
|
+
- Multi-platform support (Linux, macOS, Windows)
|
|
29
|
+
- Python 3.8+ support
|
|
30
|
+
- Zero GIL overhead for true parallelism
|
|
31
|
+
|
|
32
|
+
[1.0.0]: https://github.com/landonclark97/batch-lp/releases/tag/v1.0.0
|