https://github.com/pauldl-rs/spyrrow
Python wrapper of Sparrow, State-of-the-art Nesting for 2D irregular strip packing
https://github.com/pauldl-rs/spyrrow
2d compaction cutting cutting-and-packing heuristic irregular local-search nesting optimization packing strip-packing
Last synced: 3 months ago
JSON representation
Python wrapper of Sparrow, State-of-the-art Nesting for 2D irregular strip packing
- Host: GitHub
- URL: https://github.com/pauldl-rs/spyrrow
- Owner: PaulDL-RS
- License: mit
- Created: 2025-04-22T14:55:31.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2025-12-18T09:43:41.000Z (6 months ago)
- Last Synced: 2025-12-29T20:24:20.432Z (5 months ago)
- Topics: 2d, compaction, cutting, cutting-and-packing, heuristic, irregular, local-search, nesting, optimization, packing, strip-packing
- Language: Python
- Homepage:
- Size: 150 KB
- Stars: 20
- Watchers: 4
- Forks: 4
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# Spyrrow
`spyrrow` is a Python wrapper on the Rust project [`sparrow`](https://github.com/JeroenGar/sparrow).
It enables to solve 2D [Strip packing problems](https://en.wikipedia.org/wiki/Strip_packing_problem).
The documentation is hosted [here](https://spyrrow.readthedocs.io/).
## Installation
Spyrrow is hosted on [PyPI](https://pypi.org/project/spyrrow/).
You can install with the package manager of your choice, using the PyPI package index.
For example, with `pip`, the default Python package:
```bash
pip install spyrrow
```
## Examples
```python
import spyrrow
rectangle1 = spyrrow.Item(
"rectangle", [(0, 0), (1, 0), (1, 1), (0, 1), (0, 0)], demand=4, allowed_orientations=[0]
)
triangle1 = spyrrow.Item(
"triangle",
[(0, 0), (1, 0), (1, 1), (0, 0)],
demand=6,
allowed_orientations=[0, 90, 180, -90],
)
instance = spyrrow.StripPackingInstance(
"test", strip_height=2.001, items=[rectangle1, triangle1]
)
config = spyrrow.StripPackingConfig(early_termination=False,total_computation_time=60,num_wokers=3,seed=0)
sol = instance.solve(config)
print(sol.width) # 4.0 +/- 5%
print(sol.density)
print("\n")
for pi in sol.placed_items:
print(pi.id)
print(pi.rotation)
print(pi.translation)
print("\n")
```
## Contributing
Spyrrow is open to contributions.
The first target should be to reach Python open sources packages standards and practices.
Second, a easier integration with the package `shapely` is envsionned.
Please use GitHub issues to request features.
They will be considered relative to what is already implemented in the parent library `sparrow`.
If necessary, they can be forwarded to it.